【WSL】WSL2-Ubuntu安装CUDA

某一天,在摸鱼的时候被人拍了一下,叫我用Kali跑一下hashcat,因为hashcat可以调用CUDA(显卡)模块,加速爆破 虽然实际上,我的CPU跑起来也很快 file 但是,既然来了就研究一下。但是我又不想装多系统,那么就该想想怎么在WSL里面调用CUDA了。

Update: 其实做到最后我又重新做了一遍。原因在于,我的linux核心其实不支持CUDA。 GPU_CUDA_IN_WSL 在安装前,你需要确认一下你的内核版本,只有5.10.43.3以上的版本才是默认支持的

PS C:\Users\hz2016> wsl cat /proc/version
Linux version 5.10.16.3-microsoft-standard-WSL2 (oe-user@oe-host) (x86_64-msft-linux-gcc (GCC) 9.3.0, GNU ld (GNU Binutils) 2.34.0.20200220) #1 SMP Fri Apr 2 22:23:49 UTC 2021

你需要打开下面的功能,并且把内核更新到最新版 file

  1. 安装Ubuntu的WSL版并换源

由于WSL版的Ubuntu不自带gcc,所以我们在安装CUDA前要自己装一个

apt-get install gcc -y
  1. 安装CUDA for WSL-Ubuntu

CUDA Toolkit官网下载 我安装的十CUDA Toolkit 11.6版本,选择的是Runfile(可执行文件)安装 别问为什么,只要知道我翻车很多次就是了。 file

wget https://developer.download.nvidia.com/compute/cuda/11.6.2/local_installers/cuda_11.6.2_510.47.03_linux.run
sudo sh cuda_11.6.2_510.47.03_linux.run

千万别点进去Options的Drives,别问我为什么问就是我在来了一次 file 安装完成

===========
= Summary =
===========

Driver:   Not Selected
Toolkit:  Installed in /usr/local/cuda-11.6/

Please make sure that
 -   PATH includes /usr/local/cuda-11.6/bin
 -   LD_LIBRARY_PATH includes /usr/local/cuda-11.6/lib64, or, add /usr/local/cuda-11.6/lib64 to /etc/ld.so.conf and run ldconfig as root

To uninstall the CUDA Toolkit, run cuda-uninstaller in /usr/local/cuda-11.6/bin
***WARNING: Incomplete installation! This installation did not install the CUDA Driver. A driver of version at least 510.00 is required for CUDA 11.6 functionality to work.
To install the driver using this installer, run the following command, replacing with the name of this run file:
    sudo .run --silent --driver 
  1. 添加PATH路径
export PATH=/usr/local/cuda-11.6/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-11.6/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
  1. 验证是否更新成功
root@hz2016-pc:~# nvcc -V
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2022 NVIDIA Corporation
Built on Tue_Mar__8_18:18:20_PST_2022
Cuda compilation tools, release 11.6, V11.6.124
Build cuda_11.6.r11.6/compiler.31057947_0
  1. 更新你的显卡驱动

A driver of version at least 510.00 is required for CUDA 11.6 functionality to work.

打开GPU-Z查看一下 file 发现自己是497.29版本的显卡驱动,于是更新一下 file

然后你就可以在你的WSL里面跑CUDA了~

  1. 安装OpenCL相关(翻车)
apt-get install beignet clinfo
apt-get install beignet-dev
apt-cache search opencl

运行clinfo测试一下

root@hz2016-pc:~# clinfo
······
clCreateContextFromType(NULL, CL_DEVICE_TYPE_GPU)  No devices found in platform
clCreateContextFromType(NULL, CL_DEVICE_TYPE_ACCELERATOR)  No devices found in platform
clCreateContextFromType(NULL, CL_DEVICE_TYPE_CUSTOM)  No devices found in platform
······

还是找不到GPU,翻了下文档,还是我想多了

OpenGL-CUDA Interop is not yet supported. Applications relying on OpenGL will not work.

要用GPU跑hashcat还是去win版跑吧 file 实测GPU跑比CPU跑快130倍

【脚本】WSL数据磁盘迁移

Windows中WSL默认磁盘为C盘,这导致在安装了Docker,Kali,Ubuntu等WSL后,C盘空间不足,于是参照相应Issue有如下脚本

#以下脚本均应该在PowerShell管理员模式下运行
wsl --list -v
PS C:\Windows\system32> wsl --list -v
  NAME                   STATE           VERSION
* Ubuntu                 Running         2
  docker-desktop-data    Running         2
  docker-desktop         Running         2
  kali-linux             Stopped         2
#查看相应WSL
wsl --shutdown
#停止WSL
wsl --export Ubuntu F:\WSL\Ubuntu.tar
wsl --export docker-desktop F:\WSL\docker-desktop.tar
wsl --export docker-desktop-data F:\WSL\docker-desktop-data.tar
wsl --export kali-linux F:\WSL\kali-linux.tar
#导出WSL
wsl --unregister Ubuntu
wsl --unregister docker-desktop
wsl --unregister docker-desktop-data
wsl --unregister kali-linux
#删除对应WSL
wsl --import Ubuntu F:\WSL\Ubuntu F:\WSL\Ubuntu.tar --version 2
wsl --import docker-desktop F:\WSL\docker-desktop F:\WSL\docker-desktop.tar --version 2
wsl --import docker-desktop-data F:\WSL\docker-desktop-data F:\WSL\docker-desktop-data.tar --version 2
wsl --import kali-linux F:\WSL\kali-linux F:\WSL\kali-linux.tar --version 2
#在新位置重新导入
wsl -d Ubuntu exit
wsl -d docker-desktop exit
wsl -d docker-desktop-data exit
wsl -d kali-linux exit
#重新对应WSL
ubuntu config --default-user root
kali config --default-user root
#设置Ubuntu/kali默认用户