できるようにはなったが、想定した手順の再現が思ったようにできていない(環境の初期化に自信がない)。(いつもそうだが今回はいつのも増して)自分用のメモなので、参考にされる方は注意。
・Windows 11 ... いつも使っている Windows 11
・WSL2 ... Windowsの上で動かしているUbuntu
・コンテナ ... docker内で動いている環境。今回はUbuntu。
・Docker ... WSL2の中でコンテナを動かす。導入済みとする。
CGとかゲームやってる人ならすでに入っていると思う。Windows 11 に、自分のグラフィックボード用のドライバを入れた記憶があるなら次の手順へ。
よく注意されるのは、ドライバのインストールはあくまで普通の「Windowsへドライバを入れる作業(公式から.exeを落としてマウスでアイコンをポイントしダブルクリックしインストール画面を開きウィザードに従って次へを押していく)」として行わなければならず、「WSL2でLinuxを使っているからと言ってaptコマンドで入れないように」という所。
公式: https://www.nvidia.co.jp/Download/index.aspx?lang=jp
WSL2上で以下のコマンドを打って、ドライバのバージョンの表記が出れば成功。
なおここでCUDAバージョンが表示されるが、これはこのドライバが対応しているCUDAドライバの最大バージョンとなる。これより新しいCUDAは入れられないという意味。
公式のインストール方法に従って、WSL2上に、aptを使ってインストールする。
公式: https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html
以下を写経
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
&& curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
Docker内のUbuntuは、WSL2にインストールされたCUDA Toolkitを参照する形で使用する。
公式へ行く。例えばCUDA 11.8を導入したい場合、以下。
https://developer.nvidia.com/cuda-11-8-0-download-archive
Linux → x86_64 → WSL-Ubuntu → 2.0 → deb(local)
の順で選択するとコマンドが表示されるのでそれをWSL2で実行する。
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
CUDAを使うためには -v と --gpusを指定しなければいけない。
-v ... WSL2側のディレクトリをコンテナにマウントする。これにより、WSL2側にインストールしたcudart.so.11.0等をコンテナ側から使えるようになる。
--gpus ... コンテナからGPUを使う設定。allを指定する
-vオプションでは、WSL2側のCUDAのインストールディレクトリを、コンテナ側の指定したパスでアクセスできるようにしている。
まずはコンテナを起動し、
ドライバが読めていることを確認
CUDA Toolkitが使えることを確認