どうも人工知能では無い方のえむです。
GCPのCompute EngineでGPUを載せたインスタンスにドライバをインストールする手順はGCP公式ドキュメントの「GPU ドライバをインストールする」に従えばできるんです。
個人的にNVIDIA Tesla K80を選択しているのだがK80は最終対応ドライバがR470と決まっている。
何が言いたいかというと、ドキュメントに書かれているインストールスクリプトに従うと少し古いドライバがインストールされる。K80の最終対応ドライバのメジャーバージョンは決まっているが、マイナーな更新が続いて、インストールスクリプトの更新が追いついてない。できるなら最新版にしておきたいのだ。
というわけで手動でドライバのインストール/アップデート、ついでにCUDA Toolkitもぶち込む。
前提環境
- 自己責任でどうぞ
- 無理にアップデートする必要ありません。
- ディープラーニング用のイメージも用意されてるのでそちらも検討してみて下さい。
- NVIDIA Tesla K80搭載のインスタンス
- Ubuntu 20.04 LTS Minimal (x86/64, amd64)
- ↑Tesla K80に限ってはこれが最終対応。これ以上は対応するドライバが無い。なおUbuntu 20.04 LTSは一般の更新が2024年の中頃までとなっている
ドライバ
ドライバは下記のリンクからData Center / Tesla
、K-Series
、Tesla K80
、Linux 64-bit Ubuntu 20.04
、11.4
で検索する。結果一覧から日付が新しいものをwget
などでダウンロードする。
https://www.nvidia.co.jp/Download/Find.aspx?lang=jp
ドライバをインストールする(ファイル名は全て差し替えるように)。
インストール終了手前で「パブリック ??? GPG keyが無いから次のコマンド使ってインストールして」のような旨のメッセージが表示されているので、提示されているcp
コマンドなどを使って鍵のインストールを終えたら再起動sudo reboot
する。
### ファイル名は全て差し替えろ ### # インストール sudo dpkg -i nvidia-driver-local-repo-ubuntu2004-470.?_amd64.deb # GPGキーのインストール sudo ln -s /var/nvidia-driver-local-repo-ubuntu20?????????????/nvidia-driver-local-????????-keyring.gpg /usr/share/keyrings/nvidia-driver-local-????????-keyring.gpg # アップグレード sudo su -c 'apt update && apt upgrade -y' # 再起動 sudo reboot
余談だがドライバ一覧が出たとき2022年度は4回ほど更新がある。偶にドライバの更新が無いかチェックしておくのが良いだろう。
CUDA Toolkit
K80の場合、CUDA 11.4 Update 4が(恐らく)最終対応のCUDAとなる。
CUDA 11.4 Update 4の対応条件としてドライバ>=470.82.01
で、この記事が書かれた時点で既に470.161.03
なので条件を満たしている。下記のリンクからCUDA 11.4 Update 4を使う(アーカイブ一覧)。
https://developer.nvidia.com/cuda-11-4-4-download-archive
各プラットフォームすべて選択するとCUDA Toolkitのダウンロードとインストール手順が表示される。
- Operating System:
Linux
- Architecture:
x86_64
- Distribution:
Ubuntu
- Version:
20.04
- Installer Type:
deb (local)
やり方が悪いのかネットワークインストール、ランファイル共に何故か失敗する。なのでローカルインストール一択である(ローカル以外で成功したら教えて)。
最後に
成功していればnvidia-smi
コマンドでGPU情報を確認できる。
+-----------------------------------------------------------------------------+ | NVIDIA-SMI 470.161.03 Driver Version: 470.161.03 CUDA Version: 11.4 | |-------------------------------+----------------------+----------------------+ | 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 Tesla K80 On | 00000000:00:04.0 Off | 0 | | N/A 51C P0 151W / 149W | 11130MiB / 11441MiB | 99% Default | | | | N/A | +-------------------------------+----------------------+----------------------+ +-----------------------------------------------------------------------------+ | Processes: | | GPU GI CI PID Type Process name GPU Memory | | ID ID Usage | |=============================================================================| | 0 N/A N/A 1389 C python3 11125MiB | +-----------------------------------------------------------------------------+
K80が活性化しているのが分かる。
なおCUDA コンパイラバージョンはnvcc -V
コマンド確認できるがコマンドが見つからない病となる。
nvcc: NVIDIA (R) Cuda compiler driver Copyright (c) 2005-2021 NVIDIA Corporation Built on Mon_Oct_11_21:27:02_PDT_2021 Cuda compilation tools, release 11.4, V11.4.152 Build cuda_11.4.r11.4/compiler.30521435_0
これは環境変数Path
の登録が無い場所にあるため、/usr/local/cuda/bin/nvcc -V
とフルパスで実行する必要がある。
毎度のフルパスが面倒なら~/.local/bin
の中にln -s /usr/local/cuda/bin/nvcc nvcc
とnvcc
のシンボリックリンクを貼って対処する。
ただK80の場合、CUDA 11.4 Update 4から変わることが無いので見ても仕方無い。見たい人だけどうぞ。
Ubuntu 20.04の標準Pythonは3.8なので新しいPythonのインストール方法をと思ったが、他所で幾らでも紹介されているので、この記事では書かないことにした。各自で探そう。
余計なプロセスは潰そう
NVIDIA-SMIのProcessesにxorg
とgnome-shell
が稼働していると示されたときの対処方(CUI環境前提)。
プロセスが無駄にGPU側のメモリを消費すると、機械学習のプログラムが強制停止してしまう。CUIのみで行うなら要らない子である。
GCEのインスタンス停止→編集し、「表示デバイス」を無効にして保存→インスタンス開始。Ubuntuの起動が完了したらパッケージgdm3
をリムーブさせて再起動。再度nvidia-smi
コマンドで各プロセスが消えていれば成功。