在 Windows Subsystem Linux(WSL)中通过 Conda 为深度学习提供 GPU 支持

这篇笔记介绍了一种实用方法:在 WSL 终端中调用 Windows 版 Conda 和 Python 可执行文件,从而使用 GPU 加速的深度学习工具。撰写本文时,直接在 WSL 内运行的 Linux 二进制文件还无法访问 CUDA GPU,因此可靠的变通方案是在 Windows 上安装 CUDA、cuDNN、Conda 和 TensorFlow,然后从 WSL shell 调用这些 Windows 可执行文件。

0. 安装 WSL、Xfce 和 VcXsrv

如果需要 GUI 支持,请安装 WSL 和一个轻量级 Linux 桌面环境,例如 Xfce。在 Windows 上安装并启动 VcXsrv,然后从 WSL 启动 Xfce:

startxfce4

如果只需要运行基于终端的 Python 脚本或 notebooks,桌面环境是可选的。

1. 在 Windows 上安装 Miniconda

安装 Windows 版 Miniconda,并在安装器选项中选择让 condapython 可以从 Windows 命令行使用。重点是 Conda 必须安装在 Windows 上,而不只是安装在 WSL 内,因为支持 GPU 的 TensorFlow 包会使用 Windows 的 NVIDIA 驱动和 CUDA 库。

安装完成后,在 Windows PowerShell 或命令提示符中确认 Conda 可用:

conda --version
python --version

2. 在 WSL 中添加别名

把别名添加到 ~/.bashrc 末尾,让在 WSL 中输入的命令调用 Windows 可执行文件:

alias python="python.exe"
alias conda="conda.exe"
alias ipython="ipython.exe"
alias nosetests="nosetests.exe"
alias pip="pip.exe"

重新加载 shell 配置:

source ~/.bashrc

然后检查 WSL 是否能解析到 Windows 工具:

which python
python --version
conda --version

3. 安装 TensorFlow GPU 支持

从 WSL 创建 Conda 环境。由于上面的别名,这仍然会使用 Windows 版 Conda:

conda create -n tf-gpu python=3.6
conda activate tf-gpu
pip install tensorflow-gpu

对于较旧的 TensorFlow 版本,所需的 CUDA 和 cuDNN 版本必须与 TensorFlow 构建版本匹配。如果安装失败,或 TensorFlow 无法加载 GPU 库,请查看 TensorFlow 版本兼容性表,并在 Windows 上安装对应版本的 CUDA 和 cuDNN。

4. 在 Windows 上安装 CUDA 支持

在 Windows 上安装 NVIDIA GPU 软件栈:

  • NVIDIA GPU drivers — CUDA 9.0 需要 384.x 或更高版本的驱动。
  • CUDA Toolkit — 较旧的 TensorFlow GPU 构建通常使用 CUDA 9.0。
  • CUPTI — 随 CUDA Toolkit 一起提供。
  • cuDNN SDK — 使用 TensorFlow 版本所需的 cuDNN 版本,例如兼容的旧版本构建需要 7.2 或更新版本。

安装这些包之后,确保 CUDA 和 cuDNN 的 DLL 目录已经加入 Windows 的 PATH

5. 从 WSL 运行 Python 脚本

像平常一样从 WSL 终端运行脚本:

python train.py

该命令由 python.exe 执行,因此它会作为 Windows Python 进程运行,同时仍然从 WSL shell 启动。

可以用下面的代码验证 TensorFlow 是否能看到 GPU:

import tensorflow as tf
print(tf.test.is_gpu_available())

对于较新的 TensorFlow 2.x 环境,请使用:

import tensorflow as tf
print(tf.config.list_physical_devices('GPU'))

P.S. 可以使用 Hyper Terminal 改善终端体验。

Leave a Reply