VSCode必须安装在Windows侧,不能装在WSL里;因其远程开发依赖Windows主进程与WSL服务端协同,若在Ubuntu中apt安装code,仅得无GUI命令行工具,无法启动界面或加载扩展,正确做法是Windows官网安装并勾选“Add to PATH”,再于WSL终端执行code .触发自动部署vscode-server。

VSCode必须装在Windows侧,不能装在WSL里
VSCode远程开发能力依赖于Windows端的主进程和WSL里的轻量服务端协同工作。如果把VSCode直接装进Ubuntu发行版(比如用sudo apt install code),它会变成一个无GUI的命令行工具,根本打不开编辑器界面,也加载不了任何扩展——这是新手最常踩的第一个坑。
正确做法是:在Windows上从官网下载安装包,勾选“Add to PATH”选项;然后在WSL终端里运行code .,VSCode会自动检测并拉起WSL后端服务。这个过程会在WSL中下载并部署vscode-server,后续所有文件操作、调试、终端都走这个通道。
- 确保Windows版VSCode已更新到最新稳定版(2026年6月前的1.89+)
- 首次运行
code .时,WSL会自动安装vscode-server,需联网且有wget和ca-certificates - 若提示“command not found”,先在WSL里执行
sudo apt install wget ca-certificates
nvidia-smi在WSL里失败?检查Windows驱动是否含WSL支持
WSL2的GPU直通不依赖Linux内驱动,而是靠Windows端NVIDIA驱动里的一个内核模块暴露设备节点。所以nvidia-smi报错“NVIDIA-SMI has failed because it couldn’t communicate with the NVIDIA driver”时,99%的问题出在Windows驱动没装对版本,而不是WSL里缺什么包。
必须确认你装的是带“CUDA on WSL”标识的驱动,不是普通GeForce Game Ready驱动。官网下载页要选“CUDA on WSL”类别,版本号通常带535+或更高(如536.25)。装完后在Windows命令行运行nvidia-smi,输出里必须有CUDA Version: 12.x字段。
- 不要在WSL里尝试
apt install nvidia-driver——这不仅无效,还可能破坏系统 - 驱动安装后必须重启Windows,否则WSL无法加载新内核模块
- 验证WSL GPU可用性:在WSL里运行
nvidia-smi,正常应显示GPU型号、温度、显存使用,且Driver Version与Windows侧一致
PyTorch GPU版安装失败?CUDA Toolkit版本必须匹配驱动
WSL里pip install torch默认装CPU版,想用GPU得指定带cu121或cu122后缀的wheel。但wheel版本不能随便选——它必须和Windows端NVIDIA驱动所支持的CUDA Runtime版本严格对齐。比如驱动报告CUDA Version: 12.2,你就只能装torch==2.3.0+cu122,装cu121会报libcudart.so.12: cannot open shared object file。
查清当前驱动支持的CUDA版本最可靠方式是看nvidia-smi输出末尾那行,不是nvcc --version——后者显示的是你手动装的CUDA Toolkit版本,而PyTorch只认驱动自带的Runtime。
- 推荐安装命令:
pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu122 - 装完后在Python里跑
import torch; print(torch.cuda.is_available()),返回True才算成功 - 如果
torch.cuda.device_count()返回0,说明CUDA Runtime没被正确加载,大概率是驱动版本或wheel版本不匹配
VSCode调试PyTorch时卡住?禁用WSL默认的swapfile机制
WSL2默认启用内存交换(swap),当训练模型触发大量内存分配时,它会把部分数据写入/swapfile,而这个文件位于Windows NTFS挂载点下,IO性能极差,导致调试器响应延迟、断点失效甚至VSCode整个UI冻结。
解决方法是在WSL的/etc/wsl.conf里关闭swap,并限制内存上限防爆。这不是可选项,是大型模型调试的刚需配置。
- 编辑
/etc/wsl.conf,加入:[wsl2] memory=8GB swap=0 localhostForwarding=true
- 改完后必须退出所有WSL终端,再在PowerShell里执行
wsl --shutdown彻底重启WSL实例 - 验证是否生效:
free -h输出中Swap:行应为0B,且Mem:总大小接近你设置的memory值


















