NVIDIA CUDAとDocker: ノートPCでのAI開発の第一歩

2023.12.21 追記 コンテナが起動しない場合

最近、生成系AIに関しても興味がでてきたのでちょこっとStable Diffusionなんかも簡単に動かしたいなあと思うようになりました。と入っても、ノートPCではストレージにも余裕がそこまでなく、やばいときには環境を削除したり戻したりということも考えなければ行けないのですがローカルに環境をインストールをするのがちょっと抵抗感がありました。そこで今回はその下準備としてまず、Dockerをインストールしている自分の環境でNVIDIACUDAコアが使用できるのか確認する方法が必要でした。ということでその調べかたをメモしておきます。

Docker上でGPUの認識を確認する

とりあえず、NVIDIAのドライバ類は最新にしておきます。

今回は、CUDAコアが使用できるコンテナ使います。

使用するイメージは以下です。

hub.docker.com

DockerをインストールしたWindowsPowerShellなどのCLIを起動し、更に以下の様にコマンドを実行します。このエントリを書いている時点でのCUDAバージョンは12.3、Ubuntuのバージョンが22.04です。

PS > docker run -it --gpus=all --rm nvidia/cuda:12.3.1-base-ubuntu22.04 /bin/bash

オプションスイッチの意味は以下の通りです。

オプション/コマンド 説明
docker run Dockerコンテナを作成し、実行するためのコマンド。
-it -iはコンテナの標準入力を開いた状態にする。-tはターミナルを割り当てる。これにより、コンテナ内でのユーザーインターフェイスが使用できます。
--gpus=all ホストマシンに存在する全てのGPUをコンテナ内で利用可能にする。
--rm コンテナの実行終了後に、自動的にコンテナを削除する。
nvidia/cuda:12.3.1-base-ubuntu22.04 NVIDIAが提供するCUDA 12.3.1とUbuntu 22.04をベースとしたDockerイメージを使用。
/bin/bash コンテナ内で実行するコマンド。bashシェルを起動し、コンテナ内でコマンドを実行できるようにする。

このような形で実行をすると以下のように画面が表示されます。イメージがインストールされ、コンテナが起動し、シェル(bash)が起動します。

コンテナが起動しない場合

2023.12.21 追記

dockerコマンドを実行しても動作しない場合には以下の2点の原因が考えられます。

  1. NVIDIA製のグラフィックスカードのドライバーが正常にインストールされていない場合
  2. NVIDIAのCUDAコアを動作させるソフトウエアCUDA Toolkitがインストールされていない場合

ドライバーが当たっていない可能性は非常に低いと思いますので、原因は後者になると考えられます。 以下のリンクでダウンロードしインストールを行います。インストールした記憶がない方はたぶんこれで解決するでしょう。

developer.nvidia.com

アクセス後、画面内の【Download Now】ボタンをクリックします。あとはダウンロードされたファイルを実行すればOKです。

コンテナが無事に起動した場合

コンテナが起動するとOSのバージョンは以下の様になっています。

root@e74855cdf815:/# cat /etc/os-release
PRETTY_NAME="Ubuntu 22.04.3 LTS"
NAME="Ubuntu"
VERSION_ID="22.04"
VERSION="22.04.3 LTS (Jammy Jellyfish)"
VERSION_CODENAME=jammy
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=jammy

Shellの実行ができるようになったらnvidia-smiコマンドを実行します。 実行すると表形式で状態を表示してくれます。ドライバのバージョンやCUDAのバージョンも表示されています。

root@e74855cdf815:/# nvidia-smi
Fri Dec 15 14:34:39 2023
+---------------------------------------------------------------------------------------+
| NVIDIA-SMI 545.33.01              Driver Version: 546.29       CUDA Version: 12.3     |
|-----------------------------------------+----------------------+----------------------+
| GPU  Name                 Persistence-M | Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp   Perf          Pwr:Usage/Cap |         Memory-Usage | GPU-Util  Compute M. |
|                                         |                      |               MIG M. |
|=========================================+======================+======================|
|   0  NVIDIA GeForce GTX 1650 ...    On  | 00000000:01:00.0 Off |                  N/A |
| N/A   36C    P8               4W /  35W |    360MiB /  4096MiB |      1%      Default |
|                                         |                      |                  N/A |
+-----------------------------------------+----------------------+----------------------+

+---------------------------------------------------------------------------------------+
| Processes:                                                                            |
|  GPU   GI   CI        PID   Type   Process name                            GPU Memory |
|        ID   ID                                                             Usage      |
|=======================================================================================|
|  No running processes found                                                           |
+---------------------------------------------------------------------------------------+```

Geforce GTX 1650 Laptopが認識されていることがわかります。VRAMが4GBですね😓 このVRAM容量だとStable Diffusionの動作はちょっと渋いかもしれません。

別のPCでも試してみましたが、こちらはすごい性能でGeforce RTX 4700 LaptopでVRAMが8GBです。

おわりに

無事にDocker上からNVIDIACUDAを使用できるか確認ができました。 今回起動したコンテナはpython3gitのインストールされていないので、別途インストールが必要なのでご注意ください。

/* -----codeの行番号----- */