WSL2 深度学习环境配置:Ubuntu、CUDA、MMCV 与代理设置

本文整理 WSL2 下搭建深度学习开发环境时常用的配置项,包括 Ubuntu 图形界面、网络代理、CUDA Toolkit、MMCV,以及 conda 与 pip 混用时的排查思路。命令示例需要结合自己的 Windows、驱动和框架版本调整。

1. 配置前检查

开始前建议确认以下信息:

  • Windows 已启用 WSL2,并安装了 Ubuntu 发行版;
  • NVIDIA 驱动支持 WSL CUDA;
  • 已明确项目所需的 Python、PyTorch、CUDA 和 MMCV 版本组合。

在 WSL 中可以先执行:

nvidia-smi
python --version

其中,nvidia-smi 能正常返回显卡与驱动信息,通常说明 WSL 已能访问 Windows 主机上的 NVIDIA 驱动。CUDA Toolkit、PyTorch 内置的 CUDA Runtime 与显卡驱动是不同层级,安装前不要混为一谈。

2. WSL2 图形界面:优先使用 WSLg

Windows 11 默认提供 WSLg,可直接运行 Linux 图形应用。大多数开发场景不需要在 WSL 中安装完整 Ubuntu 桌面或 GDM。

如果确实需要完整桌面会话,可安装桌面组件:

sudo apt update
sudo apt install ubuntu-desktop gdm3

需要注意:在 WSL 中启用 gdm3 依赖 systemd,且完整桌面会增加资源消耗,也可能与 WSLg 的使用方式冲突。只有在远程桌面或特定实验环境确有需求时再启用:

sudo systemctl enable gdm3

若安装过程中无法连接 Snap Store,优先检查 DNS、代理和网络连通性,而不是反复重装桌面环境。

3. 网络代理设置

Windows CMD 临时设置

下面设置仅对当前 CMD 窗口生效:

set http_proxy=http://127.0.0.1:7897
set https_proxy=http://127.0.0.1:7897

WSL / Linux 临时设置

export http_proxy=http://127.0.0.1:7897
export https_proxy=http://127.0.0.1:7897

在 WSL 的 NAT 网络模式下,127.0.0.1 未必指向 Windows 上的代理程序。可先确认代理软件是否允许局域网连接,再使用 /etc/resolv.conf 中的 nameserver 地址测试。

Python 中设置代理

在发起网络请求前设置环境变量:

import os

os.environ["HTTP_PROXY"] = "http://127.0.0.1:7897"
os.environ["HTTPS_PROXY"] = "http://127.0.0.1:7897"

不要把包含账号、密码或订阅链接的代理地址提交到公开文章或代码仓库。

4. 用 conda 安装 CUDA Toolkit

先创建独立环境,避免污染已有项目:

conda create -n dl python=3.10 -y
conda activate dl

安装指定版本的 CUDA Toolkit:

conda install -c nvidia cuda-toolkit=11.8

只有在需要本地编译 CUDA 扩展时,再额外安装 cuda-nvcc

conda install -c nvidia cuda-nvcc=11.8

也可以使用 conda-forge:

conda install -c conda-forge cudatoolkit=11.1 cudatoolkit-dev=11.1 -y

conda 安装的是用户态 Toolkit,不会替代 Windows 主机上的 NVIDIA 驱动。对于 PyTorch,优先按照 PyTorch 官网给出的命令安装与其版本匹配的 CUDA Runtime;不要仅凭 CUDA_PATH 判断框架实际使用的 CUDA 版本。

查看与卸载

nvcc --version
conda list | grep cuda
conda remove "cuda*" -y

在 Windows CMD 中,将 grep 替换为 findstr

conda list | findstr cuda

切换 CUDA 版本时,建议为不同的 PyTorch/CUDA 组合创建独立 conda 环境。只修改 CUDA_PATH 往往不足以解决二进制依赖不匹配的问题。

5. MMCV 安装与版本关系

推荐先安装 OpenMMLab 的 openmim

pip install -U openmim
mim install mmcv

安装前应先固定 PyTorch 与 CUDA Runtime。MMCV 的预编译包需要与它们匹配;如果没有匹配的 wheel,pip 可能转为本地编译,进而要求可用的编译器和 CUDA Toolkit。

版本命名也需要区分:

  • MMCV 1.x 中,mmcv 是轻量版,mmcv-full 包含 CUDA 算子;
  • MMCV 2.x 中,mmcv 对应原先的完整版能力,mmcv-lite 不包含 CUDA 算子。

遇到导入或编译错误时,优先核对项目要求的 MMCV、PyTorch 和 CUDA 版本,而不是直接升级到最新版本。

6. conda 与 pip 混用的注意事项

conda 和 pip 的依赖解析相互独立。比较稳妥的顺序是:先用 conda 安装 Python、PyTorch 和系统级依赖,再用 pip 安装项目剩余依赖。

编译依赖当前环境中的 PyTorch 扩展时,可关闭 pip 的隔离构建:

export PIP_NO_BUILD_ISOLATION=1
python -m pip install . --no-build-isolation

Windows CMD 对应写法:

set PIP_NO_BUILD_ISOLATION=1
python -m pip install . --no-build-isolation

开发模式安装示例:

set DISTUTILS_USE_SDK=1
python -m pip install -e . --no-build-isolation -v

7. 显卡与版本兼容性

RTX 4060 属于 Ada 架构,建议使用较新的 NVIDIA 驱动,并优先选择项目官方支持的 PyTorch CUDA 版本,例如 CUDA 11.8 或 12.x 运行时。它并不存在“绝对不能使用某个更低 CUDA 版本”的简单结论,关键在于驱动、框架 wheel 和是否需要本地编译扩展。

Python 和 PyTorch 的兼容范围会随版本变化。创建环境前请查阅当前 PyTorch 发布页的版本矩阵,不要将某个项目的最低版本要求当作所有环境的通用限制。

8. 最后检查清单

python -c "import torch; print(torch.__version__); print(torch.version.cuda); print(torch.cuda.is_available())"
python -c "import mmcv; print(mmcv.__version__)"

确认 torch.cuda.is_available() 返回 True 后,再继续安装检测、分割或训练框架,后续排查会更高效。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐