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シェイプの一部が特定のテナンシで使用できない場合があります。