CUDA ライブラリに新しい NVIDIA ドライバーバージョンが必要な場合は、現在のバージョンをアンインストールしてから新しいバージョンをインストールすることで、ノードの NVIDIA ドライバーを更新できます。このトピックでは、ノードの NVIDIA ドライバーを更新する方法について説明します。
手順 1:クラスタからノードを切断し、ノードをドレインする
次のコマンドを実行して、ドライバーを更新する GPU アクセラレーション ノードをスケジュール不可に設定します。
kubectl cordon <NODE_NAME><NODE_NAME> をノード名に置き換えます。
予期される出力:
node/<NODE_NAME> cordoned次のコマンドを実行して、GPU アクセラレーション ノード上のポッドをエビクトします。
kubectl drain <NODE_NAME> --grace-period=120 --ignore-daemonsets=true # ポッドをエビクトするための猶予期間を 120 秒に設定します。予期される出力:
There are pending nodes to be drained: <NODE_NAME>
手順 2:GPU アクセラレーション ノードの現在の NVIDIA ドライバーをアンインストールする
ノードにログオンし、次のコマンドを実行して、ノード上の kubelet サービスと containerd サービスを停止します。一部の DaemonSet ポッドは GPU リソースを使用します。[kubectl drain] コマンドでは、DaemonSet ポッドをエビクトできません。 kubelet サービスと containerd サービスを停止してから、これらのポッドをエビクトする必要があります。
sudo systemctl stop kubelet containerdノードにログオンし、[fuser] コマンドを実行して、GPU リソースを使用するプロセスが存在するかどうかを確認します。存在する場合は、[kill] コマンドを実行してプロセスを終了します。 NVIDIA ドライバーの更新プロセス中は、プロセスは GPU リソースを使用できません。
sudo fuser -v /dev/nvidia*出力が表示されない場合は、GPU リソースを使用しているプロセスはありません。次の例では、プロセス 3781 が GPU リソースを使用しています。
USER PID ACCESS COMMAND /dev/nvidia0: root 3781 F.... dcgm-exporter /dev/nvidiactl: root 3781 F...m dcgm-exporterこの場合は、プロセスを終了する必要があります。
sudo kill 3781[fuser] コマンドを再度実行して、GPU リソースを使用するプロセスが存在するかどうかを確認し、GPU リソースを使用するすべてのプロセスが終了するまで前の手順を繰り返します。
ノードにログオンし、NVIDIA ドライバーをアンインストールします。
sudo nvidia-uninstall(オプション) nvidia fabric manager をアンインストールします。
次のコマンドを実行して、ノードに nvidia fabric manager がインストールされているかどうかを確認します。
sudo rpm -qa | grep ^nvidia-fabric-manager出力が表示されない場合は、nvidia fabric manager はインストールされていません。それ以外の場合は、次のコマンドを実行して nvidia fabric manager をアンインストールします。
yum remove nvidia-fabric-manager
手順 3:ノードに新しい NVIDIA ドライバーバージョンをインストールする
NVIDIA 公式サイトからノードに新しいドライバーバージョンをダウンロードし、次のコマンドを実行してインストールします。この例では、NVIDIA-Linux-x86_64-510.108.03.run がインストールされています。
sudo bash NVIDIA-Linux-x86_64-510.108.03.run -a -s -q次のコマンドを実行して、新しいドライバーバージョンがインストールされているかどうかを確認します。
sudo nvidia-smi出力は、ドライバーバージョンが 510.108.03 であることを示しています。
+-----------------------------------------------------------------------------+ | NVIDIA-SMI 510.108.03 Driver Version: 510.108.03 CUDA Version: 11.6 | |-------------------------------+----------------------+----------------------+ | 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 V100-SXM2... Off | 00000000:00:07.0 Off | 0 | | N/A 35C P0 40W / 300W | 0MiB / 32768MiB | 0% Default | | | | N/A | +-------------------------------+----------------------+----------------------+ +-----------------------------------------------------------------------------+ | Processes: | | GPU GI CI PID Type Process name GPU Memory | | ID ID Usage | |=============================================================================| | No running processes found | +-----------------------------------------------------------------------------+次の設定を構成します。
sudo nvidia-smi -pm 1 || true # 永続モードを有効にします。 sudo nvidia-smi -acp 0 || true # 権限要件を UNRESTRICTED に設定します。 sudo nvidia-smi --auto-boost-default=0 || true # 自動ブーストモードを無効にします。値 0 は、自動ブーストモードが無効になっていることを示します。 sudo nvidia-smi --auto-boost-permission=0 || true # 管理者以外のユーザーが自動ブーストモードを制御できるようにします。値 0 は、管理者以外のユーザーが自動ブーストモードを制御できることを示します。値 1 は、管理者以外のユーザーが自動ブーストモードを制御できないことを示します。 sudo nvidia-modprobe -u -c=0 -m || true # 指定されたファイル番号の構成ファイルを使用して NVIDIA カーネルモジュールを読み込みます。(オプション) 起動時に NVIDIA ドライバーを自動的にロードする場合は、/etc/rc.d/rc.local ファイルに次の構成が含まれていることを確認します。
sudo nvidia-smi -pm 1 || true sudo nvidia-smi -acp 0 || true sudo nvidia-smi --auto-boost-default=0 || true sudo nvidia-smi --auto-boost-permission=0 || true sudo nvidia-modprobe -u -c=0 -m || true次のコマンドを実行して、ノードに nvidia fabric manager をインストールする必要があるかどうかを確認します。
sudo lspci | grep -i 'Bridge:.*NVIDIA'出力が返されない場合は、nvidia fabric manager をインストールする必要はありません。それ以外の場合は、NVIDIA YUM リポジトリからノードに nvidia fabric manager をダウンロードします。 nvidia fabric manager のバージョンが新しい NVIDIA ドライバーのバージョンと同じであることを確認してください。
次のコマンドを実行して、nvidia fabric manager をインストールして起動します。
# nvidia fabric manager をインストールします。 sudo yum localinstall nvidia-fabric-manager-510.108.03-1.x86_64.rpm # nvidia fabric manager を起動時に開始できるようにします。 systemctl enable nvidia-fabricmanager.service # nvidia fabric manager を開始します。 systemctl start nvidia-fabricmanager.servicekubelet サービスと containerd サービスを有効にします。
sudo systemctl restart containerd kubelet
手順 4:ノードをクラスタに接続する
次のコマンドを実行して、ノードをクラスタに接続します。 <NODE_NAME> をノード名に置き換えます。
sudo kubectl uncordon <NODE_NAME>