WSLからCUDAを利用できるようにしたときの忘備

ChatGPTを皮切りに大規模言語モデル(LLM)が世界を騒がせるようになった今、、今さらながらローカルで機械学習の諸々を動作させたいという気持ちになりました。
今のところメイン機はWindows11(i5/12500 + RTX3060Ti)を使っていて、Windows上で動作させてもよいのですが、実際に何か使おうとするとおそらくクラウド上などに展開するはず。。ということで、WSL2上に環境を作ってみようということで表題に至りました。

同じことを実際にされている方はすでにいらっしゃいますが、いきなり情報が消えてしまうのもこの世界。このため、一応自分でも忘備を作成しています。

基本こちらの記事を参考とさせていただきつつ、、最新の情報も確認しながら進めました

CUDA on WSL User Guide

まずはこちらのドキュメント。nvidiaの公式ですね。

インストール

  • NVIDIA Driver for GPU Supportのドライバーをインストール

  • WSL2系のインストール

  • CUDA Support for WSL 2

    • 最新のGPUドライバはWSL2をサポートしている

    • コンパイルにはToolkitが必要

    • ドライバ自体は、Windows上のドライバをWSL2上で、libcuda.soとしてスタブ化される

    • このため、WSL2内にLinuxドライバをインストールしてはいけない

    • なのにデフォルトのCUDAツールキットをインストールすると簡単に上書きしてしまうらしい・・・え?

    • このため専用のCUDA Toolkit for WSL 2 (Ubuntu)をインストールする

    • ubuntu-WSL2用のダウンロードはここから。ただ、Ubuntu用なのでWSL2でcentとか入れた場合は標準ツールキットからドライバを抜いて入れるとかしないといけないのかもしれません。

罠ですね・・WSL2でこの罠に落ちてしまった場合は、ディストリビューション入れなおしたほうが良いかもしれません。

2023-04-02時点では 12.1 でダウンロード+インストールは以下

$ 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/12.1.0/local_installers/cuda-repo-wsl-ubuntu-12-1-local_12.1.0-1_amd64.deb
$ sudo dpkg -i cuda-repo-wsl-ubuntu-12-1-local_12.1.0-1_amd64.deb
$ sudo cp /var/cuda-repo-wsl-ubuntu-12-1-local/cuda-*-keyring.gpg /usr/share/keyrings/
$ sudo apt-get update
$ sudo apt-get -y install cuda

cuDNN

NVIDIAで開発者登録を行ってダウンロード

$ sudo dpkg -i cudnn-local-repo-ubuntu2204-8.8.1.3_1.0-1_amd64.deb
$ sudo cp /var/cudnn-local-repo-ubuntu2204-8.8.1.3/cudnn-local-DB35EEEE-keyring.gpg /usr/share/keyrings/
$ sudo apt-get update
$ sudo apt-get install libcudnn8=8.8.1.3-1+cuda12.0
$ sudo apt-get install libcudnn8-dev=8.8.1.3-1+cuda12.0
$ sudo apt-get install libcudnn8-samples=8.8.1.3-1+cuda12.0
  • マニュアル上は8.x.x.x-1+cudaX.Yとなっていますので、利用バージョンに合わせて変更が必要

  • インストール確認

$ # FreeImage.h が無い!って怒られる場合は以下も
$ sudo apt-get install libfreeimage3 libfreeimage-dev
$ cp -r /usr/src/cudnn_samples_v8/ $HOME
$ cd $HOME/cudnn_samples_v8/mnistCUDNN
$ ./mnistCUDNN
Executing: mnistCUDNN
cudnnGetVersion() : 8801 , CUDNN_VERSION from cudnn.h : 8801 (8.8.1)
Host compiler version : GCC 11.3.0
:
:
Resulting weights from Softmax:
0.0000000 0.0000000 0.0000000 1.0000000 0.0000000 0.0000703 0.0000000 0.0000000 0.0000000 0.0000000
Loading image data/five_28x28.pgm
Performing forward propagation ...
Resulting weights from Softmax:
0.0000000 0.0000008 0.0000000 0.0000002 0.0000000 1.0000000 0.0000154 0.0000000 0.0000012 0.0000006

Result of classification: 1 3 5

Test passed!


nvccを実行してみたところ、パスが通っていなかったので設定

$ echo 'export CUDA_PATH=/usr/local/cuda' >> ${HOME}/.bashrc
$ echo 'export LD_LIBRARY_PATH=/usr/local/cuda/lib64:${LD_LIBRARY_PATH}' >> ${HOME}/.bashrc
$ echo 'export PATH=/usr/local/cuda/bin:${PATH}' >> ${HOME}/.bashrc
$ source ~/.bashrc
$ nvcc -V
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2023 NVIDIA Corporation
Built on Tue_Feb__7_19:32:13_PST_2023
Cuda compilation tools, release 12.1, V12.1.66
Build cuda_12.1.r12.1/compiler.32415258_0

これで一応環境が整ったように思いますので色々入れていこうと思います

この記事が気に入ったらサポートをしてみませんか?