手中有刀,心里有佛

在 Windows 下利用 WSL2 和 Ubuntu 配置 GPU 机器学习环境 (GPU Machine Leanring Environment Configuration under Windows with WSL2 and Ubuntu)


本文主要面向希望在游戏空闲时段将显卡用于科学事业的朋友们😎。

本文以 Windows 11 22H2 版本为例,不确保在其他版本系统下完全适用。

终端

工欲善其事必先利其器,开发离不开那个黑框框,所以我们需要把这个黑框框变得更好看更好用些。Windows 终端是一个新的支持 PowerShell 和 WSL bash 的应用,通过应用商店 直接进行安装。

建议安装最新版的 PowerShell 作为命令行环境,相关下载和配置详见官网

为了更好的在终端中显示中英文和图标,推荐使用 Sarasa Term SC Nerd 作为终端显示字体。

WSL

以管理员模式打开 PowerShell 或 Windows 命令提示符,输入如下命令,并重启计算机:

wsl --install

此命令会启用 WSL 并安装 Ubuntu 发行版 Linux。通过 wsl -l -o 可以查看所有 Linux 的发行版:

通过 wsl --install <发行版名称> 可以安装其他发行版 Linux。通过 wsl -l -v 可以查看当前运行的 WSL 版本:

通过 wsl 新安装的 Linux 默认已经设置为 WSL 2。

进入 Ubuntu 命令行,输入如下命令安装必要的系统依赖:

sudo apt install gcc

安装 zsh 作为 Ubuntu 默认的 Shell:

sudo apt install zsh

安装 Oh My Zsh 来提升 zsh 的易用性。

显卡

驱动

从 Nvidia 官网(https://www.nvidia.cn/geforce/drivers)下载适用于 Windows 的最新驱动并安装。进入 Windows 命令行,输入 nvidia-smi 命令查看显卡状态:

Ubuntu 中不再需要额外安装显卡驱动,进入 Ubuntu 命令行,输入 nvidia-smi 命令查看显卡状态:

不难看出,出了 nvidia-smi 工具版本不同外,显卡驱动和 CUDA 版本均是相同的。

CUDA

从 Nvidia 官网(https://developer.nvidia.com/cuda-toolkit-archive)下载适用于 WSL Ubuntu 的 CUDA,在此选择的版本为 11.8.0(具体请参考例如 Tensorflow 等所需工具的依赖版本),相关平台选项如下:

下载完毕后运行如下命令进行安装:

sudo sh cuda_11.8.0_520.61.05_linux.run --toolkit

其中 --toolkit 表示仅安装 CUDA 工具箱。

在弹出的 EULA 界面输入 accept 进入安装选项界面:

仅保留 CUDA Toolkit 11.8 即可,切换到 Install 并按回车键进行安装。

将如下内容添加到 ~/.bashrc 文件尾部:

export PATH=/usr/local/cuda/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH

通过 source ~/.bashrcsource ~/.zshrc 使路径立即生效。输入 nvcc -V 查看 CUDA 编译器驱动版本:

cuDNN

从 Nvidia 官网(https://developer.nvidia.com/rdp/cudnn-archive)下载适用于 Linux 和上述安装 CUDA 版本的 cuDNN,在此选择的版本为 v8.8.0 for CUDA 11.x,安装包格式为 Local Installer for Linux x86_64 (Tar)

注意:cuDNN 需要注册账户后方可进行下载。

下载完毕后运行如下命令进行解压:

tar -xvf cudnn-linux-x86_64-8.8.0.121_cuda11-archive.tar.xz

运行如下命令将其移动到 CUDA 目录:

sudo mv cudnn-*-archive/include/cudnn*.h /usr/local/cuda/include
sudo mv -P cudnn-*-archive/lib/libcudnn* /usr/local/cuda/lib64 
sudo chmod a+r /usr/local/cuda/include/cudnn*.h /usr/local/cuda/lib64/libcudnn*

机器学习环境

Python

Ubuntu 22.04 系统已经安装了 Python 3.10 版本,Python 3.10 在常用机器学习库上具有较好的兼容性。因此,以 Python 3.10 版本为例,使用 venv 创建机器学习虚拟环境。在系统层面安装 venv 并创建虚拟环境:

sudo apt install python3.10-venv
mkdir ~/sdk
python3.10 -m venv ~/sdk/python310
source ~/sdk/python310/bin/activate

PyTorch

PyTorch 的 2.0 版本支持的最高 CUDA 即为 11.8,输入如下命令安装 PyTorch:

pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118

惊奇的发现 PyTorch 的安装包 torch-2.0.0+cu118-cp310-cp310-linux_x86_64.whl 竟然超过 2GB。安装完毕后发现 PyTorch 内嵌了 CUDA 和 cuDNN。内嵌的好处是可以做到安装即用,但如果和其他包依赖的系统 CUDA 和 cuDNN 版本不一致,容易出现各种意想不到的问题。在 Python 中运行如下命令验证 PyTorch 是否可以正常调用显卡:

import torch

# PyTorch 版本
torch.__version__
# 2.0.0+cu118

# CUDA 是否可用
torch.cuda.is_available()
# True

# GPU 数量
torch.cuda.device_count()
# 1

# GPU 名称
torch.cuda.get_device_name(0)
# NVIDIA GeForce RTX 3070 Ti

Tensorflow

输入如下命令安装 Tensorflow:

pip install tensorflow

在 Python 中运行如下命令验证 Tensorflow 是否可以正常调用显卡:

import tensorflow as tf

# Tensorflow 版本
tf.__version__
# 2.11.0

# CUDA 是否可用
tf.test.is_gpu_available()
# True

# GPU 数量
len(tf.config.experimental.list_physical_devices('GPU'))
# 1

# GPU 名称
tf.test.gpu_device_name()
# /device:GPU:0