初めに
WindowsのPCでGPUが使える環境をなんとか仮想環境で実現しようといろいろ考えた結果タイトルのような構成になりました。
スペックは以下の通りです。
CPU: Corei7 (11th gen)
GPU: GeForce RTX3080
RAM: 16GB
ただし、動かしてみたところメモリは正直増設したほうがいいかもです。。。
手順はざっと以下の通りです。
- Win11にアップデート
- NVIDIAドライバーの導入
- WSL2、Ubuntuのセットアップ
- UbuntuにCUDA導入
- Ubuntuにdocker導入
- NVIDIAのdockerイメージを動かす
では早速行きます。
1. Win11にアップデート
この部分は調べれば色々出てくると思いますので、端折ります。
やることとしては
- Win11入れるための要件のチェックと必要機能の有効化
- Win11のインストール
となります。1でBIOSいじる必要性などが出てくるの可能性があり少々厄介ですが、頑張りましょう。
2. NVIDIAドライバーの導入
ゲーミングPCなら導入済みかと思います。
参考までに僕のバージョンはGeForce Game Ready Driver 496.76です。
3. WSL2、Ubuntuのセットアップ
以下のコマンドを管理者権限で実行したPowershellに打ち込むだけで導入可能だと思います。
wsl --install -d Ubuntu-20.04
Ubuntuが自動で起動するので、ユーザー名とパスワードを設定しましょう。
一応、ちゃんと導入できているかPowershellのほうで下記コマンドで確認しましょう。
wsl -l -v
下記のように出力されれば大丈夫です。
NAME STATE VERSION
* Ubuntu-20.04 Running 2
もし、表示が違っている場合は今インストールしたUbuntuをアプリと機能から探して一度アンインストールし、下記手順でWSL2にアップデートしたうえでUbuntu導入してみてください。
Ubuntuが導入できたら、後続の作業でいろいろ導入する際にエラーが起きないよう、少しだけ下準備をします。
まず、Ubuntuを起動します。exitなど打ち込んで閉じちゃった場合はタスクバーのアプリ検索をすれば出てきます。
起動したら下記コマンドを入力しましょう
sudo vim /etc/wsl.conf
vimというエディタが起動するのでi
を打ち込むとINSERTモード(書き込むモード)に移行できます。左下がINSERTになっていることを確認しましょう。
下記のような記述を追加します。余談ですが、ctrl+vでの貼り付けは受け付けてくれないので、コピーしたらubuntuのターミナル画面で右クリすればペーストできます。
[network]
generateResolvConf = false
[boot]
command = "sudo echo 'nameserver 8.8.8.8' > /etc/resolv.conf"
追加したら、Escキーを押してINSERTモードから抜け出します。(左下からINSERTの文字が消えます)
その後:wq
と入力(左下に入力が見えると思います)してEnterを押して保存、終了しましょう。wが保存、qが終了を意味します。
できたら、exit
と打ち込んで一度閉じ、もっかいアプリを開きましょう。
下記のように打ち込むと、ちゃんとresolv.confが生成されていることを確認できると思います。
sudo cat /etc/resolv.conf
4. UbuntuにCUDA導入
先ほど導入したUbuntuにCUDAを導入します。ここで、一点留意してほしいのが
WSL用のCUDAを導入するということです。
ここからCudaを選んでインストールします。今回は11.3.0を入れます。
上みたいな感じで選ぶと、下にコマンドが出てきますのでこれを打ち込みます。今回の例では以下のようになります。
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.3.0/local_installers/cuda-repo-wsl-ubuntu-11-3-local_11.3.0-1_amd64.deb
sudo dpkg -i cuda-repo-wsl-ubuntu-11-3-local_11.3.0-1_amd64.deb
sudo apt-key add /var/cuda-repo-wsl-ubuntu-11-3-local/7fa2af80.pub
sudo apt-get update
sudo apt-get -y install cuda
5. Ubuntuにdocker導入
次に、dockerというアプリの導入を行います。簡単に言うと、dockerさえ入っていればどんなマシンで構築した環境でもすぐにほかのマシンでも再現できるというものです。
docker周りのインストールを自動で行ってくれる便利なコマンド
curl https://get.docker.com | sh
nvidia-dockerの導入。順番に打ち込みます
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
dockerの再起動を行いましょう
sudo service docker stop
sudo service docker start
6. 実際にdockerイメージを動かす
下記を試しに動かしましょう。
sudo nvidia-docker run --rm -it --gpus all nvcr.io/nvidia/k8s/cuda-sample:nbody nbody -gpu -benchmark -numbodies=512000
GPUで計算が回りますので、下記のような表示ができれば完了です。あとはdockerに少し慣れるだけでいろんなことができるようになります。
ここで、じつはdockerはubuntu起動時に勝手に起動してくれないので、次回起動時にもdockerが自動で立ち上がるようにしましょう。
さっきのwsl.conf
の内容が以下の通りになるように追記しましょう。
sudo vim /etc/wsl.conf
[network]
generateResolvConf = false
[boot]
command = "sudo echo 'nameserver 8.8.8.8' > /etc/resolv.conf"
command = "sudo service docker start"
お疲れさまでした。