CUDAライブラリに新しいNVIDIAドライバーバージョンが必要な場合は、現在のバージョンをアンインストールしてから新しいバージョンをインストールすることで、ノードのNVIDIAドライバーを更新できます。 このトピックでは、ノードのNVIDIAドライバーを更新する方法について説明します。
前提条件
手順
手順1: クラスターからノードを切断し、ノードをドレインする
次のコマンドを実行して、ドライバを更新するGPUアクセラレーションノードをunschedulableに設定します。
kubectl cordon <NODE_NAME>
<NODE_NAME> をノードの名前に置き換えます。
期待される出力:
node/<NODE_NAME> cordoned
次のコマンドを実行して、GPUアクセラレーションノードのポッドを削除します。
kubectl drain <NODE_NAME> --grace-period=120 --ignore-daemonsets=true # Set the grace period for evicting pods to 120 seconds.
期待される出力:
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リソースを使用するプロセスが存在するかどうかを確認します。 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 # Enable the Persistence mode. sudo nvidia-smi -acp 0 || true # Set the permission requirement to UNRESTRICTED. sudo nvidia-smi --auto-boost-default=0 || true # Disable the auto boost mode. A value of 0 indicates that the auto boost mode is disabled. sudo nvidia-smi --auto-boost-permission=0 || true # Allow users other than administrators to control the auto boost mode. A value of 0 indicates that users other than administrators are allowed to control the auto boost mode. A value of 1 indicates that users other than administrators are not allowed to control the auto boost mode. sudo nvidia-modprobe -u -c=0 -m || true # Load the NVIDIA kernel module with a configuration file of the specified file number.
(オプション) ブート時に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 fabric managerをNVIDIA YUMリポジトリからノードにダウンロードします。 nvidia fabric managerのバージョンが新しいNVIDIAドライバーのバージョンと同じであることを確認してください。
次のコマンドを実行して、nvidia fabric managerをインストールして起動します。
# Install nvidia fabric manager. sudo yum localinstall nvidia-fabric-manager-510.108.03-1.x86_64.rpm # Enable nvidia fabric manager to start on boot. systemctl enable nvidia-fabricmanager.service # Start nvidia fabric manager. systemctl start nvidia-fabricmanager.service
kubeletおよびcontainerdサービスを有効にします。
sudo systemctl restart containerd kubelet
手順4: ノードをクラスターに接続する
次のコマンドを実行して、ノードをクラスターに接続します。<NODE_NAME> をノードの名前に置き換えます。
sudo kubectl uncordon <NODE_NAME>