気付いたら最新の環境を構築すると、コンテナ内でも GPU (CUDA) を利用可能になっていました。
必要なもの
- Windows 版の Docker Desktop 4.4.4
- Windows 10 21H2 (64bit)
- NVIDIA グラフィックボードと最新ドライバ
- GeForce 3060Ti
- ドライババージョン 511.23, 511.79
これらの環境を用意すると、コンテナの中でも GPU が使用可能となり、ディープラーニングの学習用として環境構築の手間が減らせそうです。
手順
まずは、Docker Desktop をインストールして、このときに WSL2 Integration を有効化します。
さらに、 WSL2 環境で動作する Ubuntu 20.04 をインストールします。
このとき、Ubuntu が WSL2 で動作しているかを確認しておきます。
このときの確認コマンドは以下の通りです。結果、VERSION 2 となっていることを確認します。
wsl -l -v
また Windows 環境の NVIDIA ドライバも新しいものをインストールします。対応バージョンの境目までは確認できていませんが、迷ったら上記で挙げたバージョン以降を使って下さい。
WSL2 の Ubuntu 環境に NVIDIA ドライバをインストールしたり、cuda 関連のソフトウェアをインストールなどは不要です。
動作確認
NVIDIA が提供しているコンテナを使用して、コンテナ内で NVIDIA GPU を認識しているかの確認をしてみます。まずはコンテナを起動して、その中のシェルに入ってみるため、以下のコマンドを実行します。
docker run --gpus all -it --rm nvcr.io/nvidia/pytorch:21.12-py3 /bin/bash
シェルに入った後、 nvidia-smi コマンドを実行してみると、うまく GPU を認識できていることが分かります。
docker コマンドで、 “–gpus all” の項目を消すと、 nvidia-smi コマンドが実行出来ませんので、その差を比べてみると確かに GPU が認識しているなと感じられます。
このままだとメモリ割当部分で警告が出るので、実使用の際には –ipc=host や –shm-size=1g などのオプションを使って別途割当指示が必要です。
試しにディープラーニングのタスクを走らせてみると、Windows のタスクマネージャーからも GPU CUDA の使用率が上がることを確認出来ます。
まとめ
コンテナで簡単に CUDA, GPU を有効にした学習タスクを実行できるようになるので、とても便利になります。最初の環境構築が今までは大変だったので、これでかなり楽になる印象があるので、とてもよいなと感じています。
余談ですが、すこし昔の NVIDIA コンテナを使うとコンテナ内で 「WARNING: The NVIDIA Driver was not detected.」の警告が出てしまいました。しかしながら、 nvidia-smi コマンドが実行可能であったり、CUDA のタスクも問題なく実行出来たので、まぁ大丈夫かなと思っています。