Windows子系统WSL2-Linux|Ubuntu安装英伟达CUDA

本节主要教大家如何在Windows的WSL子系统Ubuntu中安装部署英伟达NVIDIA的CUDA加速运算,关于如何安装CUDA其实非常简单,但因为是WSL子系统的关系,有一些配置问题与真正的Linux系统并不相同,导致站长期间踩坑无数,最主要的问题还是libcuda.so无法找到,需要建立软链接。

前置条件

关于如何安装WSL之前本站有过介绍,这里不做赘述,如何还未安装,请参阅下文:

http://dataddd.com/windows%e5%ad%90%e7%b3%bb%e7%bb%9fwsl%ef%bd%9cubuntu/

CUDA

为保证站长的命令行各项参数与你的系统一致,请严格按以下方式执行命令和操作。

准备工作

请不要使用你之前打开的CMD窗口,此时在你的Windows系统中,尽量关闭之前所有已打开的CMD窗口,重新打开一个CMD窗口。

如果你的电脑中仅存在一个WSL虚拟机,那么执行如下命令,进入虚拟机。

wsl

备注:如果你的电脑中存在多个wsl虚拟机,那么你应该执行wsl -d 虚拟机名称。将虚拟机名称换为你的实际名称,如wsl -d Ubuntu,进入指定虚拟机,而不是默认的。

执行如下命令,切换用户为你的root用户。

su root

备注:执行完成上面的命令后,有可能让你输入密码密码输入过程中是不可见的,正常放心输入即可。(如果你通过本站的教程所搭建,那么密码与用户名一致,都是dataddd。)

此时我们准备工作已经进行大半,最后执行如下命令,自动切换目录为root用户的主目录下。

cd ~

下载安装

这部分就比较简单了,首先我们要知道自己需要下载什么版本的CUDA,这很重要。因为如果CUDA的版本与其它依赖库的版本不匹配,那么安装后也是无法使用的。

比如PyTorch在你安装时,会让你选择CUDA的版本,一些开源库会要求你安装指定版本的PyTorch,这不是你安装最新的就可以,必须是指定版本。

WSL2|Linux系统Ubuntu安装CUDA-openAI维基百科

现在比较常用的CUDA版本就是11.8,所以下面的教程以CUDA的11.8版本为例,但请放心,无论哪个版本的安装方式都是一样的,你可以自由决定。

我们【点击此处】打开这个网址,将会看到如下页面。

我们找到自己想要安装的版本,因为站长想安装的是11.8,所以找到这一行,这一行有两个链接可以点击,分别是是CUDA Toolkit 11.8.0和 Versioned Online Documentation,我们要点击CUDA Toolkit 11.8.0这个链接,不然你将会跳转到开发文档,那不是我们这种小白能够看懂的。(如果你想安装其它版本,那就选择你想要的版本号,后面的操作完全一致,不用担心。)

点击CUDA Toolkit 11.8.0之后,你将会看到如下页面:

上面那些按钮的选择是固定的,所以不必须在意你如果选择了其它版本,应该怎么勾选这些按钮。

  • Operating System(系统平台)
    • 因为我们是Ubuntu系统,该系统属于Linux,所以我们这里直接选择Linux。
  • Architecture(系统架构)
    • 因为我们是基于Windows的子系统,所以这里选择X86_64。
  • Distribution(系统版本)
    • 这个怎么解释呢,Linux是开源系统,所以你可以理解为安卓各个厂商,小米的系统叫MUI,华为的叫鸿蒙,Vivo的叫OriginOS,其本质都是一样的,只是发行商不同。
    • 按道理来说,我们应该选择Ubuntu,可该Ubuntu是Windows的子系统,也就是WSL的Ubuntu,所以我们这里需要选择WSL-Ubuntu,这很重要!!
  • Version(版本)
    • 这个版本并不是指CUDA的版本,且只有一个选项,不用理会,直接点击即可。
  • Installer Type(安装方式)
    • deb(local):【推荐】这种方式是完整的将CUDA下载到本地,然后执行安装。
    • deb(network):你可以理解为这是一个启动器,通过该启动器内置脚本通过网络一边下载一边安装,但是默认安装的是最新版本,小白不推荐。
    • runfile(local):通过这种方式安装需要做很多独立选择,不适合小白,Pass。

我们通过上面的选择,将会看到网页中给出下面的一段代码。

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/11.8.0/local_installers/cuda-repo-wsl-ubuntu-11-8-local_11.8.0-1_amd64.deb

sudo dpkg -i cuda-repo-wsl-ubuntu-11-8-local_11.8.0-1_amd64.deb

sudo cp /var/cuda-repo-wsl-ubuntu-11-8-local/cuda-*-keyring.gpg /usr/share/keyrings/

sudo apt-get update

sudo apt-get -y install cuda

注意:如果你选择的是其它版本,那么代码与本站所获取到的是不一样的,不要直接来复制我的!自己去按对应的选择生成。

下面是关于每一行代码的解释,大家简单了解一下就行,因为这部分内容都是按部就班的。

  1. wget https://developer.download.nvidia.com/compute/cuda/repos/wsl-ubuntu/x86_64/cuda-wsl-ubuntu.pin
    • 使用wget工具从NVIDIA开发者网站下载一个名为cuda-wsl-ubuntu.pin的文件。这个文件通常包含APT存储库的优先级设置,以确保在安装时从特定的存储库中获取正确版本的软件包。
  2. sudo mv cuda-wsl-ubuntu.pin /etc/apt/preferences.d/cuda-repository-pin-600
    • 使用sudo(超级用户权限)将刚刚下载的.pin文件移动到/etc/apt/preferences.d/目录下,并重命名为cuda-repository-pin-600。这确保了在后续的软件包安装过程中,APT工具会考虑这个优先级设置。
  3. wget https://developer.download.nvidia.com/compute/cuda/11.8.0/local_installers/cuda-repo-wsl-ubuntu-11-8-local_11.8.0-1_amd64.deb
    • 使用wget工具从NVIDIA开发者网站下载CUDA 11.8的WSL Ubuntu版本的.deb安装包。.deb文件是Debian和Ubuntu等基于Debian的发行版用于软件包管理的格式。
  4. sudo dpkg -i cuda-repo-wsl-ubuntu-11-8-local_11.8.0-1_amd64.deb
    • 使用sudo(超级用户权限)运行dpkg命令来安装刚刚下载的.deb文件,从而在系统中添加CUDA的APT存储库。
  5. sudo cp /var/cuda-repo-wsl-ubuntu-11-8-local/cuda-*-keyring.gpg /usr/share/keyrings/
    • 使用sudo复制CUDA存储库的公钥到/usr/share/keyrings/目录,以确保后续从该存储库安装的软件包都是已知并可信的。
  6. sudo apt-get update
    • 使用sudo更新系统的软件包列表。这是确保APT工具知道所有可用软件包及其版本的标准步骤。
  7. sudo apt-get -y install cuda
    • 使用sudo安装CUDA软件包。y标志表示自动答复”yes”,这意味着安装过程中的所有提示都会自动接受,默认为”yes”。

总之,这些命令的目的是从NVIDIA的官方开发者网站下载和安装CUDA 11.8WSL Ubuntu版本,并确保安装过程中使用正确的存储库和公钥。

关于使用这段代码,就非常简单啦,只需要一行一行的去执行就可以啦,不要一次性全部执行!复制一行,执行一行,执行结束后,再执行下一行。

环境配置

我们现在只是安装完成,但还没有配置环境变量,在没有配置环境变量之前,我们是无法通过Python或其它软件调用CUDA的。

前面那些教程,站长在实际安装部署过程中,五分钟就解决了,下面的才是遇到的真正难题,下面是配置环境变量的教程。

为了让大家尽少减少自己修改命令的麻烦程度,所以我们使用变量的方式,如果你安装的不是11.8版本的CUDA,那么请将11.8修改为你的实际版本。

CUDA_VERSION="cuda-11.8"

执行如下命令,将CUDA的路径写入环境变量中。

echo "export PATH=\"/usr/local/$CUDA_VERSION/bin:\$PATH\"" <strong>|</strong> sudo tee -a /etc/profile.d/somefile.sh

因为WSL的特殊性,所以这里需要软链接来处理一下libcuda.so无法找到的问题。

sudo ln -s /usr/lib/wsl/lib/libcuda.so /usr/local/$CUDA_VERSION/targets/x86_64-linux/lib/libcuda.so

执行如下代码,将建立链接后的位置加入环境变量。

echo "export LD_LIBRARY_PATH=\"/usr/local/$CUDA_VERSION/targets/x86_64-linux/lib:\$LD_LIBRARY_PATH\"" <strong>|</strong> sudo tee -a /etc/profile.d/somefile.sh

最后我们执行如下代码,刷新当前系统环境,否则当前终端依然无法调用CUDA书相关功能。

source /etc/profile.d/somefile.sh

CUDA验证

我们已经安装好啦,我们可以执行如下代码,查看已安装的CUDA版本

nvcc --version

如果你安装并配置的一切正确的话,那么在你执行完上述代码之后,将会看到类似于如下的内容。

root@dataddd:~# nvcc --version
nvcc: NVIDIA (R) Cuda compiler driver

Copyright (c) 2005-2022 NVIDIA Corporation

Built on Wed_Sep_21_10:33:58_PDT_2022

Cuda compilation tools, release 11.8, V11.8.89

Build cuda_11.8.r11.8/compiler.31833905_0

如果你想查看CUDA安装路径,那么可以执行如下代码。

dirname $<strong>(</strong>which nvcc<strong>)</strong>

执行完上述代码,你将会看到如下内容输入。

root@dataddd:~# dirname $(which nvcc)
/usr/local/cuda-11.8/bin

这代表我们的CUDA已被安装在/usr/local/cuda-11.8/bin目录下。

总结

关于CUDA的安装本来没有什么难度,但是因为WSL的特殊性,所以CUDA的调用方式与正常的Ubuntu不同,不然无法找到libcuda.so文件,就无法调用CUDA。