2022-05-22 15:00:00

いつの間にかWSLでCUDAもnvidia-docker2(NVIDIA container toolkit)も使えるようになっていた

つい先日、会社から思いがけない臨時収入があったので、思い切ってゲーミングマシンを購入しました^^

せっかくGPUマシンも来たことだし、できればDeepLearningもできるようにしてえなーって思ってUbuntuとデュアルブート環境作ろうかなとか思っていたんですが、調べてみると今はWSLでCUDAが使えるようになってるみたい(こちら参照)!!

これを使えばEFIとかセキュアブートとかややこしいデュアルブート環境をつくらずともWindows上にいい感じのDeepLearning環境作れそう!ということで、さっそく環境つくってみた。Windows11でOSとかも最新だったからか、特に何もせず、WSLインストールするだけでWSLでnvidia-smiが打てるのを確認!

nvidia-smi for WSL

次に、Dockerが動くかどうか?なんとなく、「Docker for windows」はうまく動きそうな気がしなかったので、WSL上でaptを使いDockerをインストール。インストールは公式サイトの通りに実施(参考)。 次に、nvidia-docker2(NVIDIA container toolkit)をインストール。メモが残っていないのでちゃんと覚えていないけどたぶん公式の通りにインストールしたと思う(こちら)。

ちゃんと動いているか動作確認・・・。WSLでDockerを使う場合、起動時はDockerが動いていないのでserviceコマンドでDockerを起動(WSLではsystemctlは使えないです。がんばれば使えるようにできるみたいですが、serviceコマンドで動かせるのでとりあえず不要)

$ sudo service docker 

そして、本当にDockerでGPU使ったDeepLearningが動かせるか確認します。イメージはnvcr.io/nvidia/pytorch:22.04-py3を使うことにしました(僕はDeepLearningはPytorch派です)。

$ docker run --rm --gpus all -it nvcr.io/nvidia/pytorch:22.04-py3 bash

さて、これでコンテナに入れるので本当にGPUが認識しているか確認してみましょう。

<ここにスクショ>

※ 2月24日(金)追記: スクショ貼り忘れていました

大丈夫そうですが、、、本当に大丈夫なのだろうか🤔 念のため下記のPythonコードで実際にTensorをGPUに転送してみます。 このコマンドがちゃんと処理されるのであれば、大丈夫そうです。

>>> import torch
>>> data = torch.Tensor([1, 2, 3]).cuda)

で、実行結果がこちら!大丈夫そうだ♪

Tensor-on-CUDA

これでWSLでCUDAが使えることが分かったので、これからいろいろ遊んでみようと思います。 ・・・が、僕のマシンのGPUはRTX-3070TiでなのでGPUは大体8192MiBです。 で、Windowsのグラフィックに1.5~2Gくらい使っちゃうみたいなので残りは6Gくらい・・・。 これじゃあ大き目のモデルは動かせそうにはないかも・・・🤔