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,这不是你安装最新的就可以,必须是指定版本。
现在比较常用的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
注意:如果你选择的是其它版本,那么代码与本站所获取到的是不一样的,不要直接来复制我的!自己去按对应的选择生成。
下面是关于每一行代码的解释,大家简单了解一下就行,因为这部分内容都是按部就班的。
wget https://developer.download.nvidia.com/compute/cuda/repos/wsl-ubuntu/x86_64/cuda-wsl-ubuntu.pin
- 使用
wget
工具从NVIDIA开发者网站下载一个名为cuda-wsl-ubuntu.pin
的文件。这个文件通常包含APT存储库的优先级设置,以确保在安装时从特定的存储库中获取正确版本的软件包。
- 使用
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工具会考虑这个优先级设置。
- 使用
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的发行版用于软件包管理的格式。
- 使用
sudo dpkg -i cuda-repo-wsl-ubuntu-11-8-local_11.8.0-1_amd64.deb
- 使用
sudo
(超级用户权限)运行dpkg
命令来安装刚刚下载的.deb
文件,从而在系统中添加CUDA的APT存储库。
- 使用
sudo cp /var/cuda-repo-wsl-ubuntu-11-8-local/cuda-*-keyring.gpg /usr/share/keyrings/
- 使用
sudo
复制CUDA存储库的公钥到/usr/share/keyrings/
目录,以确保后续从该存储库安装的软件包都是已知并可信的。
- 使用
sudo apt-get update
- 使用
sudo
更新系统的软件包列表。这是确保APT工具知道所有可用软件包及其版本的标准步骤。
- 使用
sudo apt-get -y install cuda
- 使用
sudo
安装CUDA软件包。y
标志表示自动答复”yes”,这意味着安装过程中的所有提示都会自动接受,默认为”yes”。
- 使用
总之,这些命令的目的是从NVIDIA
的官方开发者网站下载和安装CUDA 11.8
的WSL 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。