GPUベース・ノードでのアプリケーションの実行
Kubernetes Engine (OKE)を使用して作成されたクラスタ内のGPUベースのワーカー・ノードでアプリケーションを実行する方法をご紹介します。
GPUベースのワーカー・ノードでアプリケーションを実行するには、管理対象ノード・プール内の管理対象ノードまたは自己管理ノードのいずれかに対して、GPUシェイプと互換性のあるGPUイメージを選択します。
シェイプによって、各ノードに割り当てるCPU数とメモリー量が決まります。選択できるシェイプの中には、GPU (Graphics Processing Unit)シェイプがあり、GPU自体がNVIDIAグラフィックス・カード上にあります。元々は画像やグラフィックの操作を目的としており、GPUは大量のデータを並行して処理することが非常に効率的です。この機能により、データ集中型のアプリケーションをデプロイする際にGPUが適しています。ワーカー・ノード用に選択するGPUシェイプの詳細は、Kubernetes Engine (OKE)でサポートされているGPUシェイプを参照してください。
NVIDIA GPUの大規模な並列コンピューティング機能には、CUDA (Compute Unified Device Architecture)ライブラリを使用してアクセスします。異なるGPU(NVIDIA®Tesla VoltaTM、NVIDIA®Tesla PascalTMなど)には、特定のバージョンのCUDAライブラリが必要です。管理対象ノード・プールまたは自己管理ノードのGPUシェイプを選択する場合、CUDAライブラリが事前インストールされている互換性のあるOracle Linux GPUイメージも選択する必要があります。互換性のあるイメージの名前は「GPU」です。
次の方法で、クラスタ内のワーカー・ノードのGPUシェイプと互換性のあるイメージを選択できます。
- 管理対象ノード: Kubernetes Engineを使用して管理対象ノード・プールを作成し、ノード・プールのGPUシェイプ(および互換性のあるイメージ)を選択します。管理対象ノード・プールのすべてのワーカー・ノードにGPUシェイプがあります。詳細は、「管理対象ノード・プールの作成」を参照してください。
- 自己管理ノード:コンピュート・サービスを使用して、自己管理ノードをホストするコンピュート・インスタンス(またはインスタンス・プール)を作成し、インスタンスのGPUシェイプ(および互換性のあるイメージ)を選択し、インスタンスを追加するKubernetesクラスタを指定します。自己管理ノードは拡張クラスタにのみ追加できます。詳細については、Working with Self-Managed Nodesを参照してください。
Kubernetes Engineで作成したクラスタにアプリケーションをデプロイする場合、ポッド仕様で必要な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"
Kubernetes Engine (OKE)でサポートされているGPUシェイプ 🔗
Kubernetes Engineは、管理対象ノード・プールおよびノード、および自己管理ノードに対して様々なGPUシェイプをサポートします。
サービス制限とコンパートメント割当てがあるため、サポートされているGPUシェイプの一部が特定のテナンシで使用できない場合があります。
管理対象ノード・プールおよび管理対象ノードでサポートされるGPUシェイプ
管理対象ノード・プールおよび管理ノードの場合、Kubernetes Engineは次のGPUシェイプをサポートします:
-
管理対象ノード・プールおよび管理対象ノードに対してKubernetes Engineによってサポートされる仮想マシン(VM) GPUシェイプ:
- VM.GPU.A10.1、VM.GPU.A10.2
- VM.GPU.A100.40G.1、VM.GPU.A100.40G.2、VM.GPU.A100.40G.4、VM.GPU.A100.40G.8
- VM.GPU.A100.80G.1、VM.GPU.A100.80G.2、VM.GPU.A100.80G.4、VM.GPU.A100.80G.8
- VM.GPU.A100。B40G.1、VM.GPU.A100。B40G.2、VM.GPU.A100。B40G.4
- VM.GPU.GU1.1、VM.GPU.GU1.2、
- VM.GPU.L40S.1、VM.GPU.L40S.2
- VM.GPU2.1
- VM.GPU3.1、VM.GPU3.2、VM.GPU3.4
-
管理対象ノード・プールおよび管理ノードに対してKubernetes Engineによってサポートされるベア・メタル(BM) GPUシェイプ:
- BM.GPU.A10.4
- BM.GPU.A100-v2.8
- BM.GPU.B4.8
- BM.GPU.GM4.8
- BM.GPU.GU1.4
- BM.GPU.H100.8
- BM.GPU.L40S.4
- BM.GPU.T1.2
- BM.GPU.T1-2.4
- BM.GPU2.2
- BM.GPU3.8
- BM.GPU4.8
サービス制限とコンパートメント割当てがあるため、サポートされているGPUシェイプの一部が特定のテナンシで使用できない場合があります。
自己管理ノードでサポートされるGPUシェイプ
自己管理ノードの場合、Kubernetes Engineは、自己管理ノードをホストするコンピュート・インスタンスの作成時に選択したOKE Oracle Linux 7 (OL7)またはOracle Linux 8 (OL8)イメージで使用可能なGPUシェイプをサポートします。
サービス制限とコンパートメント割当てがあるため、サポートされているGPUシェイプの一部が特定のテナンシで使用できない場合があります。