NVIDIA GPUプラグイン

NVIDIA GPUプラグイン・クラスタ・アドオンを有効にすると、次のキー/値のペアを引数として渡すことができます。

NVIDIA GPUワーカー・ノードで実行されているワークロードが予期せず中断されないようにするために、Oracleでアドオンを自動的に更新するように指定するのではなく、デプロイするNVIDIA GPUプラグイン・アドオンのバージョンを選択することをお薦めします。

ほとんどのクラスタ・アドオンに共通の構成引数
キー(APIおよびCLI) キーの表示名(コンソール) 説明 必須/オプション デフォルト値 値の例
affinity affinity

アフィニティ・スケジューリング・ルールのグループ。

プレーン・テキストまたはエンコードされたBase64のJSON形式。

未使用者:
  • NVIDIA GPUオペレータ
可能な等価:
  • ノード機能の検出、master.affinityの使用
  • NVIDIA Network Operator、operator.affinityを使用
  • CSIドライバSMB、contoller.affinityを使用
  • AMD GPUオペレータ、controllerManager.affinityを使用
オプション null null
nodeSelectors ノード・セレクター

ノード・セレクタおよびノード・ラベルを使用して、アドオン・ポッドが実行されるワーカー・ノードを制御できます。

ポッドをノードで実行するには、ポッドのノード・セレクタのキー/値がノードのラベルと同じである必要があります。

nodeSelectorsを、ポッドのノード・セレクタとワーカー・ノードのラベルの両方に一致するキー/値ペアに設定します。

プレーン・テキストまたはエンコードされたBase64のJSON形式。

未使用者:
  • NVIDIA GPUオペレータ
  • CSIドライバ SMB
可能な等価:
  • ノード機能の検出、worker.nodeSelectorの使用
  • NVIDIA Network Operator、operator.nodeSelectorsを使用
  • AMD GPU演算子。selectorまたはcontrollerManager.nodeSelectorを使用します
オプション null {"foo":"bar", "foo2": "bar2"}

ポッドは、foo=barまたはfoo2=bar2ラベルを持つノードでのみ実行されます。

numOfReplicas numOfReplicas アドオン配備の複製の数。
未使用者:
  • AMD GPUプラグイン
  • NVIDIA GPUオペレータ
  • NVIDIAネットワーク事業者
  • CSIドライバ SMB
可能な等価:
  • CoreDNS。nodesPerReplicaを使用します。
  • ノード機能の検出、master.replicaCountの使用
  • AMD GPUオペレータ、controllerManager.replicasを使用
必須 1

クラスタごとにアドオン・デプロイメントのレプリカを1つ作成します。

2

クラスタごとにアドオン・デプロイメントの2つのレプリカを作成します。

rollingUpdate rollingUpdate

maxSurgeおよびmaxUnavailableによるローリング更新の望ましい動作を制御します。

プレーン・テキストまたはエンコードされたBase64のJSON形式。

未使用者:
  • ノード機能検出
  • NVIDIAネットワーク事業者
  • CSIドライバ SMB
可能な等価:
  • NVIDIA GPU Operator、daemonsets.rollingUpdate.maxUnavailableを使用
  • AMD GPU演算子。devicePluginmetricsExportertestRunner configManagerまたはdraDriverupgradePolicyを使用します。
オプション null null
tolerations 許容範囲

テイントおよび許容範囲を使用して、アドオン・ポッドが実行されるワーカー・ノードを制御できます。

taintがあるノード上でポッドを実行するには、ポッドに対応する許容範囲が必要です。

tolerationsを、ポッドの許容範囲とワーカー・ノードのテイントの両方に一致するキー/値のペアに設定します。

プレーン・テキストまたはエンコードされたBase64のJSON形式。

可能な等価:
  • ノード機能の検出。master.tolerationsまたはworker.tolerations、あるいはその両方を使用します。
  • NVIDIA GPU Operator、daemonsets.tolerationsを使用
  • NVIDIA Network Operator、operator.tolerationsを使用
  • CSIドライバSMB、controller.tolerationsを使用
  • AMD GPUオペレータ。 devicePluginmetricsExportertestRunnerconfigManagerdraDriverまたはcontrollerManagerで許容値を使用します。
オプション null [{"key":"tolerationKeyFoo", "value":"tolerationValBar", "effect":"noSchedule", "operator":"exists"}]

この許容範囲を持つポッドのみが、tolerationKeyFoo=tolerationValBar:noScheduleテイントを持つワーカー・ノードで実行できます。

topologySpreadConstraints topologySpreadConstraints

指定されたトポロジ間で一致するポッドを分散する方法。

プレーン・テキストまたはエンコードされたBase64のJSON形式。

未使用者:
  • ノード機能検出
  • NVIDIA GPUオペレータ
  • NVIDIAネットワーク事業者
  • CSIドライバ SMB
  • AMD GPU演算子
オプション null null
このクラスタ・アドオンに固有の構成引数
キー(APIおよびCLI) キーの表示名(コンソール) 説明 必須/オプション デフォルト値 値の例
deviceIdStrategy デバイスID戦略

基礎となるランタイムにデバイスIDを渡すために使用する戦略。

次のいずれかです。

  • uuid
  • index
オプション uuid
deviceListStrategy デバイス・リスト戦略

基礎となるランタイムにデバイス・リストを渡すために使用する戦略。

サポートされる値:

  • envvar
  • volume-mounts
  • cdi-annotations
  • cdi-cri

カンマ区切りリストでは複数の値がサポートされています。

オプション envvar
driverRoot ドライバ・ルート NVIDIAドライバインストールのルートパス。 オプション /
failOnInitError FailOnInitError

初期化中にエラーが発生した場合にプラグインを失敗させるかどうか。

falseに設定すると、失敗するのではなく、プラグインを無期限にブロックします。

オプション true
migStrategy MIG戦略

MIG (マルチインスタンスGPU)デバイスをサポートしているGPUに公開する際に使用する戦略。

次のいずれかです。

  • none
  • single
  • mixed
オプション none
nvidia-gpu-device-plugin.ContainerResources nvidia-gpu-device-pluginコンテナリソース

アドオン・コンテナが要求するリソース数量を指定し、アドオン・コンテナが超過できないリソース使用量制限を設定できます。

プレーン・テキストまたはエンコードされたBase64のJSON形式。

オプション null {"limits": {"cpu": "500m", "memory": "200Mi" }, "requests": {"cpu": "100m", "memory": "100Mi"}}

100ミリコアのCPUと100メビバイトのメモリーをリクエストするアドオン・コンテナを作成します。アドオンコンテナを500MバイトのCPUおよび200Mバイトのメモリーに制限します。

passDeviceSpecs デバイス仕様を渡す コンテナに割り当てられているNVIDIAデバイスのパスおよび目的のデバイス・ノード権限を渡すかどうか。 オプション false
useConfigFile ConfigMapの構成ファイルの使用

構成ファイルを使用してKubernetes用のNvidiaデバイス・プラグインを構成するかどうか。構成ファイルは、ConfigMapから導出されます。

trueに設定すると、クラスタ内にConfigMapを作成し、ConfigMap nvidia-device-plugin-configという名前を付け、構成引数の値を指定する必要があります。を参照してください。

ConfigMapは、nvidia-gpu-device-pluginデーモンセットによって参照されます。

オプション false

nvidia-device-plugin-config ConfigMapの例:

apiVersion: v1
kind: ConfigMap
metadata: 
  name: nvidia-device-plugin-config 
  namespace: kube-system
data:
  config.yaml: |
    version: v1
    flags:
      migStrategy: "none"
      failOnInitError: true
      nvidiaDriverRoot: "/"
      plugin:
        passDeviceSpecs: false
        deviceListStrategy: envvar
        deviceIDStrategy: uuid
大規模なクラスタに関する考慮事項

次の表に、大規模クラスタでこのクラスタ・アドオンを構成する際の考慮事項を示します。

引数名 ロールWRTノード数 説明 クラスタ・サイズが増加するにつれて リスク 推奨事項
nvidia-gpu-device-plugin.ContainerResources あり

NVIDIA GPUプラグイン・ポッドのCPUおよびメモリー・リクエストおよび制限を定義します。

プラグインは、すべてのGPUノード上でDaemonSetとして実行されるため、GPUノードの数に応じてリソース使用量が増加します。

追加のGPUノードが増加:

  • GPUヘルス・モニタリング・オーバーヘッド
  • デバイス割り当ての追跡
  • ノード・レベルのリソース・レポート

リソースのサイズが小さい場合:

  • プラグインがノード上で不安定になる可能性があります。
  • GPUリソースが正しく通知されない可能性があります。
  • ポッドはGPUノードでスケジュールできない場合があります。
  • GPUの可用性がノード間で一貫していない可能性があります。
  • 各GPUノードに十分なメモリーを割り当てます。
  • 各ノードのGPU数およびGPUワークロードの強度に基づいてリソースを調整します。
affinity / nodeSelectors / tolerations あり

NVIDIA GPUプラグイン・ポッドが実行されるノードを制御します。

  • プラグインがGPUノードでのみ実行されるようにします。
  • CPUのみのノードで不要なデプロイメントを防止します。
  • GPUを含まないノードでリソースを浪費することを回避します。

これらの引数が正しく構成されていない場合:

  • このプラグインはCPUのみのノードで実行され、リソースを浪費する可能性があります。
  • このプラグインはGPUノードで実行されないため、KubernetesワークロードでGPUを使用できません。
  • GPUノードに適用されるラベルと一致するノード・セレクタを使用します。
  • GPUノードが汚れている場合に許容差を設定します。
topologySpreadConstraints なし

NVIDIA GPUプラグイン・ポッドをノードおよび可用性ドメインに分散する方法を制御します。

トポロジ分散制約は、異機種間GPUノード・プールを持つマルチドメイン・クラスタおよびクラスタで均等な分散を維持するのに役立ちます。

トポロジ分散制約が構成されていない場合:

  • プラグイン・ポッドは不均等に配布される場合があります。
  • ノード障害または可用性ドメイン障害時の耐障害性が低下する可能性があります。

複数の可用性ドメインにまたがる大規模なGPUクラスタ、または異機種間GPUノード・プールを含む大規模なGPUクラスタには、トポロジ分散制約を使用します。

numOfReplicas なし

レプリカベースのスケーリングをサポートするコンポーネントのレプリカの数を制御します。

NVIDIA GPUプラグインは、対象となるGPUノードごとに1つのポッドを持つDaemonSetとして実行されます。レプリカ数を変更してもスケーリングされません。

該当なし 該当なし
rollingUpdate なし

NVIDIA GPUプラグイン・ポッドの更新方法を制御します。

大規模なクラスタでは、更新は多くのGPUノードに影響し、一時的にGPUの可用性を低下させる可能性があります。

  • GPUワークロードが中断される場合があります。
  • プラグイン・ポッドの更新中にGPUが一時的に使用できなくなる可能性があります。
  • 制御されたローリング更新戦略を使用します。
  • 多数のGPUノードを同時に更新しないでください。
failOnInitError あり

初期化に失敗した場合のプラグインの動作を制御します。

初期化の失敗は、GPUノードの数が増えるにつれて、クラスタ内のどこかで発生する可能性が高くなります。

  • 値が true の場合、プラグインは終了し、影響を受けるノードのGPUが使用不可になります。
  • 値が false の場合、プラグインは動作しなくなり、障害の表示が少なくなることがあります。
  • 初期化の失敗が引き続き表示されるように、値を true に設定したままにします。
  • GPUノード間でプラグインの初期化の失敗を監視します。
deviceListStrategy / deviceIdStrategy なし

GPUデバイスを識別し、コンテナに公開する方法を制御します。

選択した戦略は、GPUノード間のコンテナ実行時統合およびGPU割当て効率に影響します。

正しく構成されていない場合、GPUデバイスはコンテナに一貫して識別または注入されない可能性があります。これにより、GPUワークロードの障害、不正なデバイス割当て、GPUノード間のスケジューリングの問題が発生する可能性があります。

コンテナ・ランタイムおよびGPU環境にあわせてdeviceListStrategyおよびdeviceIdStrategyを構成し、検証済ユース・ケースで特に必要がないかぎり、デフォルトのuuidデバイス識別戦略を使用します。
migStrategy なし

NVIDIAマルチインスタンスGPUリソースをKubernetesに公開する方法を制御します。

マルチインスタンスGPUは、GPUワークロードの数が増加するにつれて、GPUの共有と使用率を向上させることができます。

この引数が正しく構成されていない場合は、次のようにします。

  • GPUリソースが断片化する可能性があります。
  • ワークロードのスケジューリングがより複雑になる可能性があります。

GPUパーティション化が必要な場合にのみ、マルチインスタンスGPUを使用します。