
操作系统:Windows 10 专业版 22H2(保系统版本高于windows10 21H2或Windows11)
显卡:2080TI 22G
参考内容:CUDA on WSL (nvidia.com)、Install WSL | Microsoft Learn、Windows安装WSL2并配置nVidia GPU - 知乎 (zhihu.com)
现在已经是2024年,网上许多安装WSL2和WSL2中配置GPU的资料已经过时,因此在这里记录一下整个安装流程。
分别为Hyper-V、适用于Linux的Windwos子系统、虚拟机平台,安装完成后重启计算机即可开启WSL功能。注:开启Hyper-V会与Vmware等虚拟化软件造成冲突,可使用基于Hyper-V版本的Vmware。

然后我们要把wsl程序的版本更新到最新版本,打开系统终端(cmd或者powershell都行),输入wsl --update,即可升级到最新版的wsl程序,我这里已经升级过了,所以显示已是最新版。
正在检查更新。
已安装最新版本的适用于 Linux 的 Windows 子系统。输入wsl --version如果有结果显示那就证明wsl程序版本达到要求了,没有对应结果那就是wsl程序还不是最新版。
WSL 版本: 2.1.5.0
内核版本: 5.15.146.1-2
WSLg 版本: 1.0.60
MSRDC 版本: 1.2.5105
Direct3D 版本: 1.611.1-81528511
DXCore 版本: 10.0.25131.1002-220531-1700.rs-onecore-base2-hyp
Windows 版本: 10.0.19045.4474WSL使用CUDA要求Linux内核版本大于4.19.121+,输入wsl cat /proc/version即可查看wsl linux内核版本。
Linux version 5.15.146.1-microsoft-standard-WSL2 (root@65c757a075e2) (gcc (GCC) 11.2.0, GNU ld (GNU Binutils) 2.37) #1 SMP Thu Jan 11 04:09:03 UTC 2024如果你的内核版本不符合要求,请下载wsl的内核更新包,直接运行安装即可,这样WSL2的安装算是完成了。
首先设置WSL2为默认WSL版本,如果不是,可以通过下面命令切换默认为WSL2
wsl --set-default-version 2然后通过命令安装ubuntu,选择自己想要的版本,这里我选择20.04
wsl --install ubuntu20.04直接在系统终端输入wsl,即可进入到unbuntu系统。

为了方便使用,我们顺便开启wsl系统的systemd支持,
输入nano /etc/wsl.conf,在wsl.conf文件中添加以下行,你现在已打开此文件来更改用于 systemd 的 init:
[boot]
systemd=true然后重启wsl就可以了,输入wsl --shutdown关闭系统,在输入wsl启动即可。
网上有许多资料写道需要安装针对WSL特别驱动,但是新版驱动直接继承了WSL的驱动现在只需要到nVidia官网将驱动升级到最新版本即可。
驱动下载地址:NVIDIA GeForce 驱动程序 - N 卡驱动 | NVIDIA
根据自己的显卡型号以及操作系统选择对应驱动,我这里是RTX 2080TI,操作系统是Win 10 64位。

一般来说,会得到两种类型的驱动程序,一个是GeForce Game Ready 驱动程序,另外一个是NVIDIA Studio 驱动程序 ,我们要选择GeForce Game Ready 驱动程序,注意不要选错了。

安装完驱动后,在终端输入nvidia-smi,可以看到驱动支持的最高CUDA版本(向下兼容),我这里是12.5
PS C:\Users> nvidia-smi
Tue Jun  4 15:53:37 2024
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 555.85                 Driver Version: 555.85         CUDA Version: 12.5     |
|-----------------------------------------+------------------------+----------------------+
| GPU  Name                  Driver-Model | Bus-Id          Disp.A | Volatile Uncorr. ECC |
| Fan  Temp   Perf          Pwr:Usage/Cap |           Memory-Usage | GPU-Util  Compute M. |
|                                         |                        |               MIG M. |
|=========================================+========================+======================|
|   0  NVIDIA GeForce RTX 2080 Ti   WDDM  |   00000000:02:00.0  On |                  N/A |
| 27%   34C    P8             26W /  250W |    2092MiB /  22528MiB |      3%      Default |
|                                         |                        |                  N/A |
+-----------------------------------------+------------------------+----------------------+
+-----------------------------------------------------------------------------------------+
| Processes:                                                                              |
|  GPU   GI   CI        PID   Type   Process name                              GPU Memory |
|        ID   ID                                                               Usage      |
|=========================================================================================|
+-----------------------------------------------------------------------------------------+进入英伟达官网,找到CUDA Tookit下载页面,按下图选择对应的版本:

根据提示,进入到WSL里面进行安装

我这里安装的是12.5版本,请根据自己要安装的版本操作,确保自己的网络可靠(科学上网什么的):
wget https://developer.download.nvidia.com/compute/cuda/repos/wsl-ubuntu/x86_64/cuda-wsl-ubuntu.pin
sudo mv cuda-wsl-ubuntu.pin /etc/apt/preferences.d/cuda-repository-pin-600
wget https://developer.download.nvidia.com/compute/cuda/12.5.0/local_installers/cuda-repo-wsl-ubuntu-12-5-local_12.5.0-1_amd64.deb
sudo dpkg -i cuda-repo-wsl-ubuntu-12-5-local_12.5.0-1_amd64.deb
sudo cp /var/cuda-repo-wsl-ubuntu-12-5-local/cuda-*-keyring.gpg /usr/share/keyrings/sudo apt-get update
sudo apt-get -y install cuda-toolkit-12-5安装完成后,配置对应的环境变量,默认是修改.bashrc文件,如果你使用的是其他shell,请修改对应shll的环境变量。我这里使用的是zsh,故在.zshrc中添加,注意:cuda-12.5中的12.5要根据你安装的CUDA版本确定。
export CUDA_HOME=/usr/local/cuda-12.5
export LD_LIBRARY_PATH=$CUDA_HOME/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
export PATH=$CUDA_HOME/bin:$PATH编辑完.zshrc文件,输入source .zshrc来应用环境变量,之后输入nvcc -V得到类似下面的信息就证明CUDA安装成功了。
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2024 NVIDIA Corporation
Built on Wed_Apr_17_19:19:55_PDT_2024
Cuda compilation tools, release 12.5, V12.5.40
Build cuda_12.5.r12.5/compiler.34177558_0在上文我们在windwos下输入nvidia-smi是可以运行的,同样其实在WSL中也可以使用nvidia-smi命令,不过WSL的nvidia-smi在 /usr/lib/wsl/lib/目录,故我们只需要对/usr/lib/wsl/lib/nvidia-smi进行软链接到/usr/bin/:
ln -s /usr/lib/wsl/lib/nvidia-smi /usr/bin/nvidia-smi回显
Thu Oct 31 16:14:44 2024
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 560.35.02              Driver Version: 560.94         CUDA Version: 12.6     |
|-----------------------------------------+------------------------+----------------------+
| GPU  Name                 Persistence-M | Bus-Id          Disp.A | Volatile Uncorr. ECC |
| Fan  Temp   Perf          Pwr:Usage/Cap |           Memory-Usage | GPU-Util  Compute M. |
|                                         |                        |               MIG M. |
|=========================================+========================+======================|
|   0  NVIDIA GeForce RTX 2080 Ti     On  |   00000000:02:00.0  On |                  N/A |
| 27%   38C    P8             28W /  250W |    1327MiB /  22528MiB |      9%      Default |
|                                         |                        |                  N/A |
+-----------------------------------------+------------------------+----------------------+
+-----------------------------------------------------------------------------------------+
| Processes:                                                                              |
|  GPU   GI   CI        PID   Type   Process name                              GPU Memory |
|        ID   ID                                                               Usage      |
|=========================================================================================|
|    0   N/A  N/A        26      G   /Xwayland                                   N/A      |
|    0   N/A  N/A     24237      C   /ollama                                     N/A      |
+-----------------------------------------------------------------------------------------+上一步中我们已经在裸机上安装了 GPU Driver,CUDA Toolkit 等工具,实现了在宿主机上使用 GPU。
现在希望在 Docker 容器中使用 GPU,需要怎么处理呢?
为了让 Docker 容器中也能使用 GPU,大致步骤如下:
nvidia-container-toolkit 组件docker 配置使用 nvidia-runtime--gpu 参数NVIDIA Container Toolkit 的主要作用是将 NVIDIA GPU 设备挂载到容器中。
兼容生态系统中的任意容器运行时,docker、containerd、cri-o 等。
NVIDIA 官方安装文档:nvidia-container-toolkit-install-guide
对于 Ubuntu 系统,安装命令如下:
首先设置依赖库:
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
  && curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
    sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
    sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list可选,设置使用实验性包:
sed -i -e '/experimental/ s/^#//g' /etc/apt/sources.list.d/nvidia-container-toolkit.list然后更新apt列表
sudo apt-get update安装nvidia-container-toolkit
sudo apt-get install -y nvidia-container-toolkit支持 Docker, Containerd, CRI-O, Podman 等 CRI。
具体见官方文档 container-toolkit#install-guide
这里以 Docker 为例进行配置:
旧版本需要手动在 /etc/docker/daemon.json 中增加配置,指定使用 nvidia 的 runtime。
"runtimes": {
    "nvidia": {
        "args": [],
        "path": "nvidia-container-runtime"
    }
}新版 toolkit 带了一个nvidia-ctk 工具,执行以下命令即可一键配置:
sudo nvidia-ctk runtime configure --runtime=docker然后重启 Docker 即可
sudo systemctl restart docker至此整个教程结束。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。