基于 WSL 和 Mamba 优雅配置深度学习环境
最近在寻找一些深度学习环境的配置教程供新人们学习,但是找了一圈基本都不满意,不是安装繁琐,就是和现代开发脱节……干脆自己写一篇现代的配置方案。
本文介绍使用 WSL 进行配置深度学习环境。内容包括:
WSL 的安装及自动代理;Miniconda 和 Mamba 安装;PyTorch GPU 版本安装。
1 WSL
适用于 Linux 的 Windows 子系统(Windows Subsystem for Linux)在 Windows 系统中提供了 Linux 的实现,并且和 Windos 在硬件和文件系统上实现互通。
1.1 WSL 安装
一般来说,你可以在 Microsoft Store 获取 Linux 发行版,如 Ubuntu 24.04.1 LTS。
如果 Microsoft Store 无法打开,则可以通过 PowerShell 安装。以管理员身份打开 PowerShell,输入:
wsl --install Ubuntu-24.04
即可启用 WSL 并安装 Ubuntu 发行版。
参考资料:如何使用 WSL 在 Windows 上安装 Linux
1.2 设置 Linux 用户名和密码
从开始菜单或使用命令wsl
启动 Ubuntu 子系统,第一次启动时要求输入 Ubuntu 用户名和密码。
Installing,this may take a few minutes...
Installation successful!
Please create a default UNIX user account, The username does not match your Windows username.
For more information visit: https://aka.ms/wslusers
Enter new UNIX username:
然后输入用户名和密码。
- Ubuntu 用户名和密码与 Windows 用户名和密码无关。
- 输入密码时将会隐藏输入。
- 创建用户名和密码后,该用户将是 Ubuntu 的默认用户,并将在启动时自动登录。
参考资料:设置 Linux 用户名和密码
1.3 配置 WSL 网络为镜像模式
在默认情况下,WSL 与 Windows 的网络环境是隔离的,因此 WSL 无法直接访问 Windows 应用所使用的端口。这在深度学习环境配置中可能带来不便。通过启用 mirrored 模式,WSL 可以与 Windows 共享网络环境。
打开 PowerShell,输入:
code %USERPROFILE%\.wslconfig
将会使用 VSCode 打开 WSL 配置文件,输入:
[experimental]
autoMemoryReclaim=gradual # 自动内存回收
networkingMode=mirrored # 镜像网络模式
dnsTunneling=true # DNS 隧道
firewall=true # Hyper-V 防火墙
autoProxy=true # 自动代理,使 WSL 能够使用 Windows 的 HTTP 代理
sparseVhd=true # 默认启用稀疏 VHD
保存,然后使用wsl --shutdown
关闭 WSL 以应用配置。
启用autoProxy
后,当 Windows 系统的代理配置发生变化时,WSL 会提示你重启以同步更新。
1.4 更新软件包
进入 Ubuntu 更新软件包到最新:
sudo apt update && sudo apt upgrade -y
1.5 使用 VSCode 连接到 WSL
VSCode 提供了对 WSL 的完善支持。打开 VSCode,点击左下角的“打开远程窗口”按钮,连接到 WSL 即可。
2 Miniconda 和 Mamba
Conda 是一个常用的 Python 包和环境管理工具,而 Miniconda 则是 Anaconda 的精简版本,仅保留其核心功能。
Mamba 则作为 Conda 的高性能替代实现而诞生,它重构了 Conda 的依赖解析与下载机制,通过多线程并行下载显著提升了环境解析和安装的速度。
而 Mamba 基于 Conda 环境,因此需要先安装 Miniconda。
2.1 Miniconda
从 Miniconda 官方仓库下载并运行最新的安装脚本。
cd ~
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
sh Miniconda3-latest-Linux-x86_64.sh
运行脚本后会弹出:
Welcome to Miniconda3 py313_25.5.1-1
In order to continue the installation process, please review the license
agreement.
Please, press ENTER to continue
>>>
按回车确认继续。然后阅读 MINICONDA END USER LICENSE AGREEMENT,此处按方向下键或 PageDown 键至末尾,输入yes
进行安装。
MINICONDA END USER LICENSE AGREEMENT
...
Do you accept the license terms? [yes|no]
>>>
选择安装路径,按回车安装至默认位置(~/miniconda3/
):
Miniconda3 will now be installed into this location:
/home/yoake/miniconda3
- Press ENTER to confirm the location
- Press CTRL-C to abort the installation
- Or specify a different location below
[/home/yoake/miniconda3] >>>
询问是否要将 Conda 命令注入到终端,输入yes
:
You can undo this by running `conda init --reverse $SHELL`? [yes|no]
[no] >>>
至此安装完成,重启终端即可。
==> For changes to take effect, close and re-open your current shell. <==
Thank you for installing Miniconda3!
如果你不想每次打开终端就进入 base 环境,则可以执行以下命令:
conda config --set auto_activate_base false
2.2 Mamba
切换到 base 环境,然后安装 Mamba:
conda activate base
conda install mamba -n base -c conda-forge
然后执行命令使 mamba 自动完成初始化:
mamba shell init --shell bash --root-prefix=/home/yoake/miniconda3
Mamba 几乎实现了对所有 Conda 命令的替代,只需要把conda
替换为mamba
即可:
# 创建虚拟环境
conda create -n myenv python=3.10 -y
mamba create -n myenv python=3.10 -y
# 切换虚拟环境
conda activate myenv
mamba activate myenv
# 安装包
conda install pytorch
mamba install pytorch
3 PyTorch
现在已经不推荐从源码安装 CUDA Toolkit 和 cuDNN,而是借助 conda 进行安装。
首先创建虚拟环境:
mamba create -n deeplearning python=3.10 -y
Conda 包的版本约束
你可能注意到,以下两条命令的行为是不同的:
mamba create -n deeplearning python=3.10 -y
mamba create -n deeplearning python==3.10 -y
=
表示安装 3.10 系列的最新版本(比如 3.10.18),Conda 会自动解析最新的小版本。而==
会锁死到 3.10.0,而不是最新的 3.10.x。
激活虚拟环境,然后安装pytorch-cuda
。pytorch-cuda
是 Conda 的一个虚拟包,用来给 PyTorch 安装对应 CUDA runtime 和 cuDNN 的,其目的是让你在 Conda 环境里直接用 GPU 版本的 PyTorch,而不需要安装系统级 CUDA Toolkit。
你可以在这里找到各个包的版本对应关系,以及对应的安装命令。
如对于 PyTorch 1.13.1,使用以下命令安装:
mamba install pytorch==1.13.1 torchvision==0.14.1 torchaudio==0.13.1 pytorch-cuda=11.7 -c pytorch -c nvidia -y
安装完成后,使用以下命令检查是否配置成功:
python -c "import torch; print('Torch version:', torch.__version__); print('CUDA available:', torch.cuda.is_available()); print('CUDA version:', torch.version.cuda); print('Current device:', torch.cuda.get_device_name(0) if torch.cuda.is_available() else 'CPU')"
期望输出:
Torch version: 1.13.1
CUDA available: True
CUDA version: 11.7
Current device: NVIDIA GeForce RTX 4060 Ti
至此,环境配置结束。
4 常见问题
4.1 PyTorch 训练或推理时报错
Could not load library libcudnn_cnn_infer.so.8. Error: libcuda.so: cannot open shared object file: No such file or directory
这是 PyTorch 加载 cuDNN 库时失败了,因为找不到它依赖的 libcuda.so。
使用nvidia-smi
检查驱动是否正常,然后确认 cuDNN 是否已安装:
mamba list | grep cudnn
例如以下输出:
pytorch 1.13.1 py3.10_cuda11.7_cudnn8.5.0_0 pytorch
然后查找libcuda.so
:
find /usr -name "libcuda.so*"
期望结果:
/usr/lib/wsl/lib/libcuda.so
这说明 Windows 侧的 GPU 驱动已经传进来了,只是 PyTorch 在运行时没有找到这些库。只需要添加环境变量即可解决问题。
echo 'export LD_LIBRARY_PATH=/usr/lib/wsl/lib:$LD_LIBRARY_PATH' >> ~/.bashrc
source ~/.bashrc