デフォルトでは、Container Service for Kubernetes (ACK) クラスターにインストールされているNVIDIAドライバーのバージョンは、クラスターのタイプとバージョンによって異なります。 使用するCompute Unified Device Architecture (CUDA) ツールキットでNVIDIAドライバーの更新が必要な場合は、クラスターノードにNVIDIAドライバーを手動でインストールする必要があります。 このトピックでは、Object Storage Service (OSS) URLを追加して、ノードプール内のGPU高速化ノードのNVIDIAドライバーバージョンを指定する方法について説明します。
注意事項
ACKは、NVIDIAドライバーとCUDAツールキットの互換性を保証するものではありません。 互換性を確認する必要があります。
NVIDIAドライバーとNVIDIAコンテナランタイムなどのGPUコンポーネントと共にインストールされているカスタムOSイメージの場合、ACKはNVIDIAドライバーとモニタリングコンポーネントなどの他のGPUコンポーネントとの互換性を保証しません。
ノードプールにラベルを追加して、GPU高速化ノードのNVIDIAドライバーのバージョンを指定すると、新しいノードがノードプールに追加された場合にのみ、指定されたNVIDIAドライバーがインストールされます。 ノードプール内の既存のノードにはNVIDIAドライバーがインストールされていません。 既存のノードにNVIDIAドライバーをインストールする場合は、これらのノードをノードプールから削除し、ノードプールに再追加する必要があります。 詳細については、「ノードの削除」および「既存のECSインスタンスをACKクラスターに追加」をご参照ください。
OSSバケットにアップロードしたNVIDIAドライバーを使用する場合、NVIDIAドライバーは、OS、Elastic Compute Service (ECS) インスタンスタイプ、またはコンテナランタイムと互換性がない可能性があります。 その結果、NVIDIAドライバーがインストールされているGPU高速化ノードの追加に失敗します。 ACKは、すべてのノードがクラスターに正常に追加できることを保証するものではありません。
ecs.gn7.xxxxxおよびecs.ebmgn7.xxxxインスタンスタイプは、NVIDIAドライバーバージョン510.xxxおよび515.xxxと互換性がありません。 ecs.gn7.xxxxxおよびecs.ebmgn7.xxxxインスタンスタイプの場合、470.xxx. x1PINSGHEN xxx、または525.125.06以降のバージョンなど、510.xxxより前でGPUシステムプロセッサ (GSP) が無効になっているドライバーバージョンを使用することを推奨します。
P100、T4、V100、A10など、さまざまなNVIDIAモデルで必要なNVIDIAドライバーのバージョンの詳細については、「NVIDIA公式ドキュメント」をご参照ください。
ステップ1: NVIDIAドライバーをダウンロードする
[NVIDIAドライバーのバージョンがACKでサポートされている] リストに目的のNVIDIAドライバーのバージョンが含まれていない場合は、NVIDIA公式サイトからドライバーをダウンロードできます。 この例では、NVIDIAドライバのバージョンは515.86.01です。 次の図の [検索] をクリックしてダウンロードページを開き、ドライバーNVIDIA-Linux-x86_64-515.86.01.runをオンプレミスマシンにダウンロードします。
ステップ2: NVIDIA Fabric Managerをダウンロードする
NVIDIA YUMリポジトリからNVIDIA Fabric Managerをダウンロードします。 NVIDIA Fabric Managerのバージョンは、NVIDIAドライバーのバージョンと同じである必要があります。
wget https://developer.download.nvidia.cn/compute/cuda/repos/rhel7/x86_64/nvidia-fabric-manager-515.86.01-1.x86_64.rpm
手順3: OSSバケットの作成
OSSコンソールにログインし、OSSバケットを作成します。 詳しくは、「バケットの作成」をご参照ください。
ACKクラスターは、NVIDIAドライバーのインストール時に内部ネットワークを介してOSSバケットからドライバーをプルする必要があるため、ACKクラスターが存在するリージョンにOSSバケットを作成することをお勧めします。
手順4: NVIDIAドライバーとnvidia-fabric-managerをOSSバケットにアップロード
OSS コンソールにログインします。 左側のナビゲーションウィンドウで、[バケット] をクリックします。 作成したOSSバケットを検索し、NVIDIA-Linux-x86_64-515.86.01.runおよびnvidia-fabric-manager-515.86.01-1.x86_64.rpmをバケットのルートディレクトリにアップロードします。
詳細については、「オブジェクトのアップロード」をご参照ください。
重要ファイルがバケットのルートディレクトリにアップロードされ、サブディレクトリにはアップロードされないようにしてください。
バケットページの左側のナビゲーションウィンドウで、
を選択し、アップロードしたドライバーファイルの [操作] 列の [詳細の表示] をクリックして詳細を表示します。[詳細の表示] パネルで、[HTTPS] をオフにしてHTTPSを無効にします。
重要ACKがクラスターを作成すると、ACKはHTTP URLからNVIDIAドライバーをプルします。 デフォルトでは、OSSバケットはHTTPSを使用します。 したがって、HTTPSを無効にする必要があります。
バケットの詳細ページの左側のナビゲーションウィンドウで、[概要] をクリックして、バケットの内部エンドポイントを取得します。
重要外部エンドポイントからNVIDIAドライバーをプルするプロセスは遅く、ACKがGPUアクセラレーションされたノードをクラスターに追加できない場合があります。 NVIDIAドライバーは、内部エンドポイント (-internalキーワード) または高速化ドメイン名 (oss-accelerateキーワード) からプルすることを推奨します。
ステップ5: ノードプールを作成し、ノードプールにラベルを追加する
ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターの名前をクリックします。 左側のナビゲーションウィンドウで、 を選択します。
右上隅の [ノードプールの作成] をクリックします。 [ノードプールの作成] ダイアログボックスで、ノードプールのパラメーターを設定します。
下表に、各パラメーターを説明します。 パラメーターの詳細については、「ACK管理クラスターの作成」をご参照ください。
[詳細オプションの表示] をクリックします。
[ノードラベル] セクションで、アイコンをクリックして次のラベルを追加します。
最初のラベル: Keyフィールドに
ack.aliyun.com/nvidia-driver-oss-endpoint
を入力し、手順4で取得したOSSバケットの内部エンドポイントをValueフィールドに入力します。 この例では、内部エンドポイントはmy-nvidia-driver.oss-cn-beijing-internal.aliyuncs.com
です。2番目のラベル: キーフィールドに
ack.aliyun.com/nvidia-driver-runfile
を入力し、ステップ1でダウンロードしたNVIDIAドライバーの名前を値フィールドに入力します。 この例では、NVIDIAドライバーの名前はNVIDIA-Linux-x86_64-515.86.01.run
です。3番目のラベル: キーフィールドに
ack.aliyun.com/nvidia-fabricmanager-rpm
を入力し、ステップ2でダウンロードしたNVIDIA Fabric Managerファイルの名前を値フィールドに入力します。 この例では、NVIDIA Fabric Managerファイルの名前はnvidia-fabric-manager-515.86.01-1.x86_64.rpm
です。
パラメーターを設定したら、注文の確認.
ステップ6: 指定されたNVIDIAドライバのバージョンがインストールされているかどうかを確認する
ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
ACKコンソールで、管理するクラスターを選択し、[操作] 列の
を選択します。次のコマンドを実行して、
component: nvidia-device-plugin
ラベルを持つポッドを照会します。kubectl get po -n kube-system -l component=nvidia-device-plugin -o wide
期待される出力:
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES nvidia-device-plugin-cn-beijing.192.168.1.127 1/1 Running 0 6d 192.168.1.127 cn-beijing.192.168.1.127 <none> <none> nvidia-device-plugin-cn-beijing.192.168.1.128 1/1 Running 0 17m 192.168.1.128 cn-beijing.192.168.1.128 <none> <none> nvidia-device-plugin-cn-beijing.192.168.8.12 1/1 Running 0 9d 192.168.8.12 cn-beijing.192.168.8.12 <none> <none> nvidia-device-plugin-cn-beijing.192.168.8.13 1/1 Running 0 9d 192.168.8.13 cn-beijing.192.168.8.13 <none> <none> nvidia-device-plugin-cn-beijing.192.168.8.14 1/1 Running 0 9d
出力は、node列に新しく追加されたノードのポッドの名前が
nvidia-device-plugin-cn-beijing.192.168.1.128
であることを示します。次のコマンドを実行して、ノードのNVIDIAドライバーバージョンを照会します。
kubectl exec -ti nvidia-device-plugin-cn-beijing.192.168.1.128 -n kube-system -- nvidia-smi
期待される出力:
出力は、NVIDIAドライバーのバージョンが515.86.01であることを示します。 指定されたNVIDIAドライバがインストールされます。
その他の方法
APIを呼び出してACKクラスターを作成またはスケールアウトする場合、ノードプール設定にNVIDIAドライバーのOSS URLを追加できます。 サンプルコード:
{
// Other fields are not shown.
......
"tags": [
{
"key": "ack.aliyun.com/nvidia-driver-oss-endpoint",
"value": "xxxx"
},
{
"key": "ack.aliyun.com/nvidia-driver-runfile",
"value": "xxxx"
},
{
"key": "ack.aliyun.com/nvidia-fabricmanager-rpm",
"value": "xxxx"
}
],
// Other fields are not shown.
......
}