GPUベース・ノードでのアプリケーションの実行

Container Engine for Kubernetes (OKE)を使用して作成されたクラスタのGPUベースのワーカー・ノードでアプリケーションを実行する方法を確認します。

GPUベースのワーカー・ノードでアプリケーションを実行するには、管理対象ノード・プール内の管理対象ノードまたは自己管理ノードのいずれかに対して、GPUシェイプと互換性のあるGPUイメージを選択します。

シェイプによって、各ノードに割り当てるCPU数とメモリー量が決まります。選択できるシェイプの中には、GPU (Graphics Processing Unit)シェイプがあり、GPU自体がNVIDIAグラフィックス・カード上にあります。元々は画像やグラフィックの操作を目的としており、GPUは大量のデータを並行して処理することが非常に効率的です。この機能により、データ集中型のアプリケーションをデプロイする際にGPUが適しています。ワーカー・ノード用に選択するGPUシェイプの詳細は、Container Engine for KubernetesでサポートされているGPUシェイプを参照してください。

NVIDIA GPUの大規模な並列コンピューティング機能には、CUDA (Compute Unified Device Architecture)ライブラリを使用してアクセスします。異なるGPU(NVIDIA®Tesla VoltaTM、NVIDIA®Tesla PascalTMなど)には、特定のバージョンのCUDAライブラリが必要です。管理対象ノード・プールまたは自己管理ノードのGPUシェイプを選択する場合、CUDAライブラリが事前インストールされている互換性のあるOracle Linux GPUイメージも選択する必要があります。互換性のあるイメージの名前は「GPU」です。

次の方法で、クラスタ内のワーカー・ノードのGPUシェイプと互換性のあるイメージを選択できます。

  • 管理対象ノード: Container Engine for Kubernetesを使用して管理対象ノード・プールを作成し、ノード・プールのGPUシェイプ(および互換性のあるイメージ)を選択します。管理対象ノード・プールのすべてのワーカー・ノードにGPUシェイプがあります。詳細は、ノード・プールの作成を参照してください。
  • 自己管理ノード: コンピュート・サービスを使用して、自己管理ノードをホストするコンピュート・インスタンス(またはインスタンス・プール)を作成し、インスタンスのGPUシェイプ(および互換性のあるイメージ)を選択し、インスタンスを追加するKubernetesクラスタを指定します。自己管理ノードは拡張クラスタにのみ追加できます。詳細については、Working with Self-Managed Nodesを参照してください。

Container Engine for Kubernetesで作成したクラスタにアプリケーションをデプロイする場合、ポッド仕様で必要なGPUリソースの数を指定する必要があります。アプリケーションをデプロイするために、kubeスケジューラによって、必要なリソースがあるノードが決定されます。アプリケーション・ポッドをGPUシェイプのノードで実行する場合、ポッドに次のものがマウントされます:

  • 要求されたGPUデバイスの数
  • ノードのCUDAライブラリ

アプリケーションは、様々なタイプのGPUから効果的に分離されています。その結果、異なるGPU用のCUDAライブラリをアプリケーション・コンテナに含める必要がなくなり、コンテナの移植性を維持できます。

次の点に注意してください:

  • Kubernetesバージョン1.19.7以降を実行しているクラスタ内の管理対象ノード・プールにGPUシェイプを指定できます。以前のバージョンのKubernetesを実行しているクラスタ内の管理対象ノード・プールにGPUシェイプを指定しないでください。
  • コンソール、APIまたはCLIを使用して、GPUシェイプで使用するGPUイメージを指定できます。APIまたはCLIを使用して、GPUシェイプで使用する非GPUイメージを指定することもできます。
  • GPUシェイプで管理対象ノード・プールを作成した後、非GPUシェイプを持つようにノード・プールを変更することはできません。同様に、GPU以外のシェイプを持つ管理対象ノード・プールをGPUシェイプを持つように変更することはできません。
  • GPUシェイプは、必ずしもすべてのアベイラビリティ・ドメインで使用できるとは限りません。
  • VCNネイティブのクラスタ(VCNのサブネットでホストされているKubernetes APIエンドポイントを持つクラスタ)で、管理対象ノード・プールのGPUシェイプを指定できます。クラスタのKubernetes APIエンドポイントがVCNに統合されていない場合は、クラスタ内の管理対象ノード・プールにGPUシェイプを指定しないでください。VCNネイティブ・クラスタへの移行を参照してください。
  • アプリケーションは、管理対象ノード・プールのGPUワーカー・ノードで実行できますが、仮想ノード・プールでは実行できません。

GPUを持つノードでのみ実行するポッドの定義

次の構成ファイルでは、使用可能なGPUリソースが1つあるクラスタ内の任意のノードで実行するポッドを定義します(GPUのタイプに関係なく)。


apiVersion: v1
kind: Pod
metadata:
  name: test-with-gpu-workload
spec:
  restartPolicy: OnFailure
  containers:
    - name: cuda-vector-add
      image: k8s.gcr.io/cuda-vector-add:v0.1
      resources:
        limits:
          nvidia.com/gpu: 1

GPUを持たないノードでのみ実行するポッドの定義

次の構成ファイルでは、GPUを持たないクラスタ内のノードでのみ実行するポッドを定義します:


apiVersion: v1
kind: Pod
metadata:
  name: test-with-non-gpu-workload
spec:
  restartPolicy: OnFailure
  containers:
    - name: test-with-non-gpu-workload
      image: "oraclelinux:8"

Container Engine for KubernetesでサポートされているGPUシェイプ

Container Engine for Kubernetesでは、管理対象ノード・プールおよびノード、および自己管理ノードに対して様々なGPUシェイプがサポートされます。

サービス制限とコンパートメント割当てがあるため、サポートされているGPUシェイプの一部が特定のテナンシで使用できない場合があります。

管理対象ノード・プールおよび管理対象ノードでサポートされるGPUシェイプ

管理対象ノード・プールおよび管理対象ノードの場合、Container Engine for Kubernetesでは次のGPUシェイプがサポートされます:

  • 管理対象ノード・プールおよび管理対象ノードのContainer Engine for Kubernetesでサポートされている仮想マシン(VM) GPUシェイプ:

    • VM.GPU2.1
    • VM.GPU3.1
    • VM.GPU3.2
    • VM.GPU3.4
    • VM.GPU.A10.1
    • VM.GPU.A10.2
  • 管理対象ノード・プールおよび管理対象ノードに対してContainer Engine for Kubernetesでサポートされているベア・メタル(BM) GPUシェイプ:

    • BM.GPU2.2
    • BM.GPU3.8
    • BM.GPU4.8
    • BM.GPU.A100-v2.8
    • BM.GPU.A10.4

サービス制限とコンパートメント割当てがあるため、サポートされているGPUシェイプの一部が特定のテナンシで使用できない場合があります。

自己管理ノードでサポートされるGPUシェイプ

自己管理ノードの場合、Container Engine for Kubernetesでは、自己管理ノードをホストするコンピュート・インスタンスの作成時に選択したOKE Oracle Linux 7 (OL7)またはOracle Linux 8 (OL8)イメージで使用可能なGPUシェイプがサポートされます。

サービス制限とコンパートメント割当てがあるため、サポートされているGPUシェイプの一部が特定のテナンシで使用できない場合があります。