由于随机操作系统后来更新 office 不利,后从学校下载安装了 Windows 11 专业版(21H2)
因为安装了 Windows 适配的 cuda 和 cudnn 却无法 make cudnn samples,所以转而采用 wsl。
Windows Subsystem for Linux (WSL) 的安装,由于官网提供的一行命令安装方式下载太慢,采用了网上提供的经验性方法。进入 控制面板-程序和功能-启动或关闭 Windows 功能,勾选 wsl 和虚拟机平台,不勾选会怎样我没有试过。也有其他人还选了 虚拟机监控程序平台 and/or Hyper-V,什么用我也不知道。然后进应用商店下载适当的 Ubuntu 安装即可。安装重启后,power shell 输入
wsl --list --verbose
结果应有 version 2,表示是 wsl2。
首先来到 https://docs.microsoft.com/en-us/windows/ai/directml/gpu-cuda-in-wsl 发现要求 wsl cat /proc/version 得到的 kernel version 要大于等于5.10.43.3,而我新装的 Ubuntu 即使 upgrade 之后仍然是 5.10.19.3。所以去 wls 的 GitHub 上下载了较新的 release,使得 Linux version 来到了 5.10.102.1-microsoft-standard-WSL2。
然后按照官网步骤安装 cuda toolkit,前提是 Windows 那边已经安装了适合的驱动。
CUDA on WSL :: CUDA Toolkit Documentation (nvidia.com) 即可,注意这里的命令示例都是 11.7,我装的是11.6。所以在 CUDA toolkit 下载界面不直接下载,选择 Archive,再选择 11.6.2,在随后页面中选择合适的搭配:Linux + x86_64 + WSL-Ubuntu + 2.0 + deb(local)。
官网这里给出的命令最后一行
sudo apt-get -y install cuda
一开始始终不成功,因为总是显示 11.7 的什么东西找不到,即使指定版本 cuda=11.6也不行。
可能是因为我之前在本机安装过 wls-Ubuntu22.04,在里面装过 11.7;但是已经重装了 20.04!
也可能是因为在宿主机 Windows 里装了 11.7;但是已经卸载了!
也可能是这条命令自己的问题?
后来通过清除 cuda 得以解决。
apt-get remove --purge cuda
CUDA 安装之后先是找不到 nvcc 命令,加 PATH 即可。
第一轮 make 之后,有一些 samples 不能通过,报错 FreeImage.h 没有,隧安装
sudo apt-get install libfreeimage3 libfreeimage-dev
但是安装过程中会发现有些包显示下载不成功,手动下载本地安装,freeimage 问题解决;
仍有些 samples 不成功,比如 oceanFFT nbody postProcessGL 和 recursiveGaussian 等等 ,make 会生成 可执行文件,但执行之后报 segmentation fault,回看 make 过程的 log,有 libGL.so libGLU.so gl.h glu.h 四个文件找不到的问题,尚未解决;
另有 simpleGLES 一系列 sample 不成功,提示 libnvscibuf.so libnvscisync.so nvscibuf.h nvscisync.h 找不到,不知道干什么的,没有去解决。
仍然从官网步骤出发 Installation Guide :: NVIDIA Deep Learning cuDNN Documentation
安装准备阶段就报错。
sudo apt-get install zlib1g
的时候说:/sbin/ldconfig.real: /usr/lib/wsl/lib/libcuda.so.1 is not a symbolic link。网上给出的方法是删除 C:\Windows\System32\lxss\lib 里的 libcuda.so.1 和 libcuda.so,再通过 wsl 进入到这个目录,通过 ln 命令建立链接:
ln -s libcuda.so.1.1 libcuda.so.1
ln -s libcuda.so.1.1 libcuda.so
但是我用这个方法行不通,总是说我没有权限,sudo 也不行,su 进入 root 也不行。后来是在 Windows 的 cmd 里 用 mklink 建立了两个链接。
行进到以下位置被卡住
sudo cp /var/cudnn-local-repo-*/cudnn-local-*-keyring.gpg /usr/share/keyrings/
事实上执行到这里的时候没有什么问题,但是到了下一步
sudo apt-get install libcudnn8=8.x.x.x-1+cudaX.Y
会报错,系统给出的建议的解决方式就是类似上一行命令,只是将星号替换为了一串字符,说明上一行命令没有起效,重复执行也无效。搜索给出的解决方法是 copy 到 /usr/share/keyrings/cuda-archive-keyring.gpg。
不懂的是,通过 deb 安装后,并没有在 /usr/local/cuda/include 和 /usr/local/cuda/lib64 中发现 cudnn*.h 和 libcudnn*,两种安装方式结果不一样?不懂。
进入 cudnn_samples_v8/mnistCUDNN,make 之后运行测试通过。