前置き
現在、UbuntuでNvidiaのGPUを使う方法が環境によって点在しています。というのもdesktop版とserverでのやり方、ドライバの種類、dockerの使用の有無など、があるためです。
という状況になると、複数人でGPUサーバーを管理している場合、前任者がどの入れ方でインストールを行ったかも分かりづらく、何が壊れているかわからないという場合もあるかと思います。今回はそんなGPUサーバーの環境を構築しなおします。
今回の再編の目標は以下です。
- Ubuntu-desktopでドライバを楽に入れる
- GPUdriverを綺麗にする
- dockerにGPUを対応させる
今回行った環境は以下です
スペック・構成
CPU i9-10980XE
RAM 128GB
GPU RTX A6000
OS ubuntu22.04LTS
目次
GPUドライバの削除
ドライバの削除は以下のコマンドでnvidiaに関連するソフトウェアを一括で削除します。
sudo apt purge nvidia-*
どのような状態でドライバがインストールされているかの特定を行うより、最新のドライバを入れ直したほうが早い場合です。後述するGUI経由でインストールされていない場合など恐らくすべての場合に対応します。
dockerの削除
docker周りの調子もおかしかったので再インストールを行います。
sudo apt purge -y --auto-remove docker-*
GPUドライバの再インストール
Ubuntu DesktopではGUIでドライバを管理することができます。
CUI版の場合は、nouveauを無効にする手順が挟まりますが、こちらだと同時にインストールまで行うことができます。(nvidia-driverを選択した時点で自動的に無効化されます)
設定画面を開き、ソフトウェアのアップデートを開く
追加のドライバータブを選択し、上から三つ目のNVIDIA driver metapackageをnvidia-driver-545から使用します(プロプライエタリ)
を選択します。
open kernel版とそうでないものの違いはkernelバージョンとの整合性の問題です。UbuntuをはじめとしたLinuxベースのOSにはLinux Kernelが基盤として動いており、このkernelバージョンとの相性によって動かないことがあるため、そのような場合ではこちらを選択することがあります。
ここで再起動
dockerの再インストール
面倒なことは避けたいのでワンライナーを使っていきます。
docker公式のこちらより、
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
nvidia container toolkitのインストール
基本的には公式ドキュメントに従って進めていくことになります。Ubuntuの場合はaptを利用します。
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/stable/deb/nvidia-container-toolkit.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 \
&& \
sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker
2023/12現在の話です。nvidiaのdocker対応はコロコロソフトウェアやバージョンが変わるのでその時々に合わせて変更してください。
動作確認
tsukky@oasis:~$ docker run --gpus all nvidia/cuda:12.3.0-base-ubuntu22.04 nvidia-smi
Unable to find image 'nvidia/cuda:12.3.0-base-ubuntu22.04' locally
12.3.0-base-ubuntu22.04: Pulling from nvidia/cuda
aece8493d397: Already exists
03bb9eb021f5: Pull complete
d1937dd2edf2: Pull complete
89aa5c6f8794: Pull complete
7d4f0f8effa7: Pull complete
Digest: sha256:ab701cbe9784a586949674dac46a83cd4bed19944fbc9324619317be865ea678
Status: Downloaded newer image for nvidia/cuda:12.3.0-base-ubuntu22.04
Sun Nov 19 06:51:43 2023
+---------------------------------------------------------------------------------------+
| NVIDIA-SMI 545.29.02 Driver Version: 545.29.02 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 RTX A6000 Off | 00000000:68:00.0 On | Off |
| 30% 33C P8 13W / 300W | 356MiB / 49140MiB | 1% Default |
| | | N/A |
+-----------------------------------------+----------------------+----------------------+
+---------------------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=======================================================================================|
+---------------------------------------------------------------------------------------+