这篇笔记介绍了一种实用方法:在 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,并在安装器选项中选择让 conda 和 python 可以从 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 改善终端体验。
