WSL配置深度学习环境
截至2023年11月8日,系统要求,本人使用的是wsl2 Ubuntu20.04
,wsl版本一定要是2。
关于驱动
不需要在wsl中安装驱动,和windows系统共用一个驱动!
登录到wsl的ubuntu中,输入nvidia-smi
。
root@DESKTOP-SJ490MT:~# nvidia-smi
Thu Nov 9 20:20:48 2023
+---------------------------------------------------------------------------------------+
| NVIDIA-SMI 545.29.01 Driver Version: 546.01 CUDA Version: 12.3 |
|-----------------------------------------+----------------------+----------------------+
| 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 4060 Ti On | 00000000:01:00.0 On | N/A |
| 0% 42C P8 10W / 165W | 672MiB / 16380MiB | 3% Default |
| | | N/A |
+-----------------------------------------+----------------------+----------------------+
+---------------------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=======================================================================================|
| 0 N/A N/A 23 G /Xwayland N/A |
+---------------------------------------------------------------------------------------+
在wsl中没有显示使用显卡的windows进程。
安装cuda和cudnn准备
-
以root用户登录ubuntu子系统,打开cmd窗口
wsl --user root
为了方便后续开发,本人习惯root直接登录,可以修改wsl的默认登录用户,这样使用pycharm可以直接连接到wsl的python解释器。
到
C:\Users\用户名\AppData\Local\Microsoft\WindowsApps
目录下,打开cmd窗口,执行ubuntu2004.exe config --default-user root
-
查看硬件
在wsl中,图形适配器显示为Microsoft Corporation设备(微软自己改的),自己知道自己显卡型号就行了,本人是4060ti。
root@DESKTOP-SJ490MT:~# lspci | grep -i microsoft 27c9:00:00.0 3D controller: Microsoft Corporation Device 008e 39e1:00:00.0 3D controller: Microsoft Corporation Device 008e
-
升级软件包,本人使用ubuntu官方源速度也很快,有需要可以换成其他源
apt update && apt upgrade # 换成阿里源 # sed -i 's/archive.ubuntu.com/mirrors.aliyun.com/g' /etc/apt/sources.list
-
查看系统信息
root@DESKTOP-SJ490MT:~# uname -m && cat /etc/*release x86_64 DISTRIB_ID=Ubuntu DISTRIB_RELEASE=20.04 DISTRIB_CODENAME=focal DISTRIB_DESCRIPTION="Ubuntu 20.04.6 LTS" NAME="Ubuntu" VERSION="20.04.6 LTS (Focal Fossa)" ID=ubuntu ID_LIKE=debian PRETTY_NAME="Ubuntu 20.04.6 LTS" VERSION_ID="20.04" HOME_URL="https://www.ubuntu.com/" SUPPORT_URL="https://help.ubuntu.com/" BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/" PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy" VERSION_CODENAME=focal UBUNTU_CODENAME=focal
-
安装gcc等工具
apt install build-essential -y gcc --version # 9.4.0
-
安装内核头文件(或许非必要?)
下面这段来自官方CUDA安装教程,但是驱动都可以和windows共用了,或许没啥影响,
但本人做了这步操作
。nvidia驱动程序需要内核头文件和开发包,并且一旦内核版本改变,驱动程序也需要重新编译安装。Runfile安装方式不对内核相关包做任何检验,但是RPM和DEB包则会检验,如果没有内核相关包,安装程序将自动安装这些包的最新版本,可能不匹配当前内核。因此,最好在安装驱动程序和CUDA之前,安装内核相关包的正确版本,否则可能出现各种各样的问题。
root@DESKTOP-SJ490MT:~# uname -r 5.15.90.1-microsoft-standard-WSL2
下载微软wsl2的git仓库下载指定版本的内核源码,拷贝到wsl中
apt install unzip cp /mnt/d/WSL2-Linux-Kernel-linux-msft-wsl-5.15.90.1.zip /usr/src cd /usr/src unzip ./WSL2-Linux-Kernel-linux-msft-wsl-5.15.90.1.zip
安装依赖并编译,编译需要比较长的时间
apt install build-essential flex bison dwarves libssl-dev libelf-dev -y cd WSL2-Linux-Kernel-linux-msft-wsl-5.15.90.1 make KCONFIG_CONFIG=Microsoft/config-wsl -j $(nproc) make KCONFIG_CONFIG=Microsoft/config-wsl modules_install -j $(nproc)
此时可以看到在/lib/modules
目录下生成和当前内核版本一致的文件夹,并有只想源代码文件夹的软链接
root@DESKTOP-SJ490MT:~# ll /lib/modules/5.15.90.1-microsoft-standard-WSL2/
total 236
drwxr-xr-x 3 root root 4096 Nov 8 21:14 ./
drwxr-xr-x 3 root root 4096 Nov 8 21:16 ../
lrwxrwxrwx 1 root root 48 Nov 8 21:07 build -> /usr/src/WSL2-Linux-Kernel-linux-msft-wsl-5.15.90.1/
drwxr-xr-x 2 root root 4096 Nov 8 21:14 kernel/
-rw-r--r-- 1 root root 45 Nov 8 21:14 modules.alias
-rw-r--r-- 1 root root 12 Nov 8 21:14 modules.alias.bin
-rw-r--r-- 1 root root 15426 Nov 8 21:14 modules.builtin
-rw-r--r-- 1 root root 45653 Nov 8 21:14 modules.builtin.alias.bin
-rw-r--r-- 1 root root 17880 Nov 8 21:14 modules.builtin.bin
-rw-r--r-- 1 root root 116066 Nov 8 21:14 modules.builtin.modinfo
-rw-r--r-- 1 root root 0 Nov 8 21:14 modules.dep
-rw-r--r-- 1 root root 12 Nov 8 21:14 modules.dep.bin
-rw-r--r-- 1 root root 0 Nov 8 21:14 modules.devname
-rw-r--r-- 1 root root 0 Nov 8 21:14 modules.order
-rw-r--r-- 1 root root 55 Nov 8 21:14 modules.softdep
-rw-r--r-- 1 root root 49 Nov 8 21:14 modules.symbols
-rw-r--r-- 1 root root 12 Nov 8 21:14 modules.symbols.bin
lrwxrwxrwx 1 root root 48 Nov 8 21:14 source -> /usr/src/WSL2-Linux-Kernel-linux-msft-wsl-5.15.90.1/
安装cuda
非常简单,去官网下载需要的版本即可,nvidia-smi显示的是当前驱动最高支持的cuda版本,windows上驱动更新频繁,一般都能支持最新的cuda,不过不建议下载最新的,我这里下载的是12.2。下载的时候选择wsl-ubuntu
,然后网站下边的命令就能安装了。
添加环境变量,本人是在/etc/profile.d/cuda.sh
中添加,也可以~/.bashrc,.profile文件中,了解它们之间的区别即可。
export PATH=/usr/local/cuda-12.2/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-12.2/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
验证安装成功
source /etc/profile.d/cuda.sh
nvcc -V
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2023 NVIDIA Corporation
Built on Tue_Jun_13_19:16:58_PDT_2023
Cuda compilation tools, release 12.2, V12.2.91
Build cuda_12.2.r12.2/compiler.32965470_0
安装cudnn
到这里和在linux系统上安装cudnn已经没有什么区别了,可以参考我写的另一篇文章。
Python环境和测试
剩下就是配置python虚拟环境并测试了,配置和使用上和在ubuntu系统上没啥区别,本人试着跑了Qwen-7B,编译了fastllm,都没有问题。
注意事项
- 在wsl2上相比直接在windows上某些程序会略有性能损失。
- 不要跨系统读写文件,性能损失严重。
Q.E.D.