こんばんわ。 なんだか暗号みたいですね。。。
今回の記事は誰かに何かを伝えようと言うわけではなく、自分の覚書のつもりということと、実はよくわかっていないので、すごくいい加減に書かれていますのであまり参考にしないでください。
ガレリアにUbuntuをセットアップして、NVIDIAのドライバを入れて、PytorchのDockerイメージを使って、GPUを利用した計算をしてみたいというメモです。Ubuntuのセットアップは省略です。
はじめに、ubuntu環境にNVIDIAのドライバをインストールします。
aptコマンドでインストールしたり、NVIDIAからパッケージをダウンロードする方法もあるようなのですが、「ソフトウエアとアップデート」というアプリケーションに「追加のドライバー」という項目があり、その中でインストールできるようだったのでやってみました。
インストールが終了すると、再起動を求められるので、再起動を行います。恐ろしく簡単です。以前やったときは、標準のドライバをblacklistに入れるだとか、GRUBを変更して、Kernelオプションを変更するだとかなんだか難しかった覚えがあるのですが、とても簡単でした。この後トラブルが待っているかもしれませんが。。。
再起動を行ったら次のおまじないを唱えて、nvidia-container-toolkit のレポジトリを登録します。詳細は、NVIDIAの「Installing the NVIDIA Container Toolkit」を参照してください。
# distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \
&& curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
&& curl -s -L https://nvidia.github.io/libnvidia-container/$distribution/libnvidia-container.list | \
sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
上記のコマンドを実行すると、/etc/apt/sources.list.d/nvidia-container-toolkit.list というファイルが、以下のような内容で作成されます。
deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://nvidia.github.io/libnvidia-container/stable/deb/$(ARCH) /
deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://nvidia.github.io/libnvidia-container/stable/ubuntu18.04/$(ARCH) /
#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://nvidia.github.io/libnvidia-container/experimental/deb/$(ARCH) /
#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://nvidia.github.io/libnvidia-container/experimental/ubuntu18.04/$(ARCH) /
レポジトリを追加したら、以下のコマンドを実行して、nvidia-container-toolkitをインストールします。
# apt update
# apt install nvidia-container-toolkil
インストールしたら、コンテナランタイムを認識させるために以下のようにコマンドを実行します。
# sudo nvidia-ctk runtime configure --runtime=docker
以下のように表示されれば成功のようです。正しく表示されなかったときはどうすれば良いのかは分かりません。
INFO[0000] Config file does not exist; using empty config
INFO[0000] Wrote updated config to /etc/docker/daemon.json
INFO[0000] It is recommended that docker daemon be restarted.
上記のように実行すると、/etc/docker/daemon.jsonが作成されます。内容は以下のようになります。うまく作成されなかった場合は手動で作成してしまって良いようです。
{
"runtimes": {
"nvidia": {
"args": [],
"path": "nvidia-container-runtime"
}
}
}
設定が終わったら、dockerデーモンを再起動します。
# systemctl restart docker
実際にDockerのイメージをpullして、dockerの中でnvidiaが利用できるかどうか確認します。まず、以下のようにコマンドを実行して、NVIDIAのGPUのドライバや、pytorchがセットアップされているイメージをpullします。
docker pull nvcr.io/nvidia/pytorch:24.03-py3
イメージの作成が終わったら、
docker run --gpus all -it --rm nvcr.io/nvidia/pytorch:24.03-py3
として、コンテナを起動します。すると、コンテナのコマンドラインが表示されるので、そこで nvidia-smiと実行して、以下のように表示されれば、コンテナ内でGPUが利用できるようになっているようです。
# nvidia-smi
+---------------------------------------------------------------------------------------+
| NVIDIA-SMI 535.161.07 Driver Version: 535.161.07 CUDA Version: 12.2 |
|-----------------------------------------+----------------------+----------------------+
| 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 RTX 2070 ... Off | 00000000:01:00.0 On | N/A |
| N/A 46C P8 10W / 30W | 54MiB / 8192MiB | 4% Default |
| | | N/A |
+-----------------------------------------+----------------------+----------------------+
+---------------------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=======================================================================================|
+---------------------------------------------------------------------------------------+
次に、PythonからGPUへアクセスできるかどうか確認します。
# python
Python 3.10.12 (main, Nov 20 2023, 15:14:05) [GCC 11.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import torch
>>> print(torch.cuda.get_device_name())
NVIDIA GeForce RTX 2070 with Max-Q Design
>>> exit()
#
ちゃんとGeForce RTX 2070 with Max-Q Design と出てます。
あまり引っかからずにどんどんできてしまいました。トラブったりすると色々と余計な経験がが身についたりするものですが、あまりうまく行ってしまうとトラブルが起きた時に対応できないかも。。。
ubuntuを動かすまでの方が、うまくブートできなかったりして、よほど時間がかかった気がします。