すべてのプロダクト
Search
ドキュメントセンター

Container Service for Kubernetes:ノードのNVIDIAドライバを手動で更新する

最終更新日:Dec 14, 2024

CUDAライブラリに新しいNVIDIAドライバーバージョンが必要な場合は、現在のバージョンをアンインストールしてから新しいバージョンをインストールすることで、ノードのNVIDIAドライバーを更新できます。 このトピックでは、ノードのNVIDIAドライバーを更新する方法について説明します。

前提条件

クラスターのkubeconfigファイルが取得され、kubectlクライアントがクラスターに接続されます。

手順

手順1: クラスターからノードを切断し、ノードをドレインする

  1. 次のコマンドを実行して、ドライバを更新するGPUアクセラレーションノードをunschedulableに設定します。

    kubectl cordon <NODE_NAME>

    <NODE_NAME> をノードの名前に置き換えます。

    期待される出力:

    node/<NODE_NAME> cordoned
  2. 次のコマンドを実行して、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ドライバのアンインストール

  1. ノードにログインし、次のコマンドを実行して、ノード上のkubeletサービスとcontainerdサービスを停止します。 一部のDaemonSetポッドはGPUリソースを使用します。 kubectl drainコマンドはDaemonSetポッドを削除できません。 kubeletおよびcontainerdサービスを停止してから、これらのポッドを追い出す必要があります。

    sudo systemctl stop kubelet containerd
  2. ノードにログインし、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リソースを使用するすべてのプロセスが終了するまで前の手順を繰り返します。

  3. ノードにログインし、NVIDIAドライバーをアンインストールします。

    sudo nvidia-uninstall
  4. (オプション) 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ドライバーバージョンをインストールする

  1. NVIDIA公式サイトから新しいドライババージョンをノードにダウンロードし、次のコマンドを実行してインストールします。 この例では、NVIDIA-Linux-x86_64-510.108.03.runがインストールされています。

    sudo bash NVIDIA-Linux-x86_64-510.108.03.run -a -s -q
  2. 次のコマンドを実行して、新しいドライバーバージョンがインストールされているかどうかを確認します。

    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                                                 |
    +-----------------------------------------------------------------------------+
  3. 次の設定を構成します。

    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.
  4. (オプション) ブート時に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
  5. 次のコマンドを実行して、ノードに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
  6. kubeletおよびcontainerdサービスを有効にします。

    sudo systemctl restart containerd kubelet

手順4: ノードをクラスターに接続する

次のコマンドを実行して、ノードをクラスターに接続します。<NODE_NAME> をノードの名前に置き換えます。

sudo kubectl uncordon <NODE_NAME>