Linux 環境において NVIDIA GPU の初期化に時間が掛かる問題の解決方法。
背景
機械学習用コードの開発など、NVIDIA GPU を初期化が遅いことがある。
特に後述の A100-SMX4 x4 などの環境では、うっかり $ nvidia-smi
とでもしようものなら、
数分間プロンプトが返ってこなくなる。
Web で調べると、これは既知の問題のようであり、
複数の記事で解決法が紹介されていたが、
NVIDIA 公式で obsolete とか legacy とか書かれている方法が多数散見されたので、
新しい現在の推奨方法を紹介する。
環境
- OS: Ubuntu Server 20.04
- GPU: NVIDIA A100-SMX4-40GB x4 (ほか、NVIDIA A100 PCIe x1 など)
解決法
systemd/Upstart/SystemV などを用いて、"持続モード(persistence mode)" を自動で永続的に ON に設定する。
/usr/share/doc/NVIDIA_GLX-1.0/samples/nvidia-persistenced-init.tar.bz2
に
それぞれのシステム用のテンプレート、及びインストール用のスクリプトが同梱されている。
同梱されている install.sh
を (sudoなど) 管理者権限で実行すると、
後ろで掲載しているログ出力のように、
デフォルトでは nvidia-persistenced ユーザーとグループを作成し、
それぞれのシステム用のサンプルスクリプトを生成、systemd などのシステムを検知して、
nvidia-persistenced デーモンの起動と自動起動の設定を全て行ってくれる。
こうすることで、システム起動時から nvidia-smi
などもすぐに応答するようになり、
その出力でも Persistence-M
が ON になっていることが確認できる。
ログ
以下は Ubuntu Server 20.04 (systemd) での実行例。
[sudo] password for xxx:
Checking for common requirements...
sed found in PATH? Yes
useradd found in PATH? Yes
userdel found in PATH? Yes
id found in PATH? Yes
Common installation/uninstallation supported
Creating sample System V script... done.
Creating sample systemd service file... done.
Creating sample Upstart service file... done.
Checking for systemd requirements...
/usr/lib/systemd/system directory exists? Yes
systemctl found in PATH? Yes
systemd installation/uninstallation supported
Installation parameters:
User : nvidia-persistenced
Group : nvidia-persistenced
systemd service installation path : /usr/lib/systemd/system
Adding user 'nvidia-persistenced' to group 'nvidia-persistenced'... done.
Installing sample systemd service nvidia-persistenced.service... done.
Enabling nvidia-persistenced.service... done.
Starting nvidia-persistenced.service... done.
systemd service successfully installed.
解決法 (Legacy)
nvidia-smi
でも persistence-mode を変更できる。
1 |
$ nvidia-smi -pm 1 # or --persistence-mode=1 |