1.本記事の目的
Windows11ではWSL上でGPUが使用できるようになりました。(WSLg:Windows Subsystem for Linux GUI、と呼ばれています)WSL側でGPUが使用できるようになったことで、GUIプログラムや機械学習のプログラムをWSL上で動作させることができるようになります。
さっそく、Window11上で環境を構築していきましょう!
2.使用する環境の前提
- Windows 11がインストールしてあること
- NVIDIAのグラフィックボードが搭載されていること
もし、Windows11への更新がまだの場合は手動のインストール(参考:)ができますので、そちらをためしてみましょう。残念ながらWindows10秋の更新(21H2)には、グラフィック機能はサポートされない様子ですので、Windows11にアップデートを行ってください。
グラフィックスの機能は当初、WSL2で搭載されるという話でした。Windows10でWSL2はサポートされましたが、グラフィックスの機能は搭載されず、結局、Windows11からのサポートとなったようです。Windows11に移行できないHWも多そうですので、ぜひ、Windows10のWSL2にもサポートしてほしいところです。
3.Windows側でグラフィックドライバーの更新
WSLgを使用するには、__Windows側のグラフィックドライバー__を更新する必要があります。以下から最新版のグラフィックドライバーをダウンロードします。
3.WSL上にLinuxをインストール
Power Shellを管理者権限で起動します。
Ubuntu-20.04 をインストールします。
> wsl --install -d Ubuntu-20.04
4.LinuxにWSL用のCUDAをインストール
Linuxを起動し、WSL用のCUDAを入れていきます。ポイントはここです。]
- ①Linux側でのドライバーは不要
- ②WSL用のCUDAを入れる
以下、WSL上でのLinuxでのCUDA 11.4.0の場合のコマンドを示しています。機械学習ユーザー(TensorFlow/PyTorch)の方は必要なバージョンに適宜読み替えてCUDAをインストールお願いします。
$ 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.4.0/local_installers/cuda-repo-wsl-ubuntu-11-4-local_11.4.0-1_amd64.deb
$ sudo dpkg -i cuda-repo-wsl-ubuntu-11-4-local_11.4.0-1_amd64.deb
$ sudo apt-key add /var/cuda-repo-wsl-ubuntu-11-4-local/7fa2af80.pub
$ sudo apt-get update
$ sudo apt-get -y install cuda
通常、CUDAをインストールするとグラフィックドライバ等までインストールされてしまいますが、その依存関係を修正したうえで最後にインストールかけているということでしょうか。
5. GPUが使える仮想環境(Docker)をインストール
WSL上のLinuxにDockerもインストールできます。この場合、Dockerの中でもGPUを使うことができます。Windows->WSLのLinux->Docker内のLinuxという3階建て構成です。
この場合、DockerもGPU対応にする必要があります。
まずは素のDocker-CEをインストールします。
$ curl https://get.docker.com | sh
つづいて、NVIDIA Container Toolkit(旧名:nvidia-docker2)をインストールします。
$ distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
$ curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
$ curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
$ sudo apt-get update
$ sudo apt-get install -y nvidia-docker2
また、ユーザーをdockerグループに追加します。(これをしないとdockerコマンドがユーザーから起動できません)
$ sudo usermod -aG docker $USER
最後にWSL上のdockerサービスを再起動します。
$ sudo service docker stop
$ sudo service docker start
以上で環境は構築されたと思います。
6. nvidia-smiコマンドのパス
なお、nvidia-smiコマンドは、ちょっと変なところにインストールされていてびっくりしました。
パスが通っていないので、最後にパスを通してください。
$ sudo cp /usr/lib/wsl/lib/nvidia-smi /usr/bin
$ sudo chmod +x /usr/bin/nvidia-smi
7. 参考
本稿では以下を参考にしています。
https://docs.nvidia.com/cuda/wsl-user-guide/index.html