2.15.2. GPU 割り当てオブジェクトについて
属性ベースの GPU 割り当ては、次のオブジェクトを使用して、グラフィックスプロセッシングユニット (GPU) の主要な割り当て機能を提供します。これらの API の種類は、すべて resource.k8s.io/v1beta2 API グループに含まれています。
- デバイスクラス
デバイスクラスは、Pod が要求できるデバイスのカテゴリーと、要求時に特定のデバイス属性を選択する方法です。一部のデバイスドライバーには独自のデバイスクラスが含まれています。管理者がデバイスクラスを作成することもできます。デバイスクラスにはデバイスセレクターが含まれています。デバイスセレクターは、デバイスが要求を満たす場合に true と評価される Common Expression Language (CEL) 式です。
次の例の
DeviceClassオブジェクトは、driver.example.comデバイスドライバーによって管理されるすべてのデバイスを選択します。デバイスクラスオブジェクトの例
apiVersion: resource.k8s.io/v1beta1 kind: DeviceClass metadata: name: example-device-class spec: selectors: - cel: expression: |- device.driver == "driver.example.com"- リソーススライス
- 各ノードの Dynamic Resource Allocation (DRA) ドライバーは、クラスター内の リソーススライス を作成および管理します。リソーススライスは、ノードに割り当てられている 1 つ以上の GPU リソースを表します。リソースクレームが作成され、Pod で使用されると、OpenShift Container Platform はリソーススライスを使用して、要求されたリソースにアクセスできるノードを探します。リソースクレームに適したリソーススライスが見つかると、OpenShift Container Platform のスケジューラーが、割り当ての詳細を使用してリソースクレームを更新し、リソースクレームにリソースを割り当て、リソースにアクセスできるノードに Pod をスケジュールします。
- リソースクレームテンプレート
クラスターの管理者と運用担当者は、特定のデバイスクラスから GPU を要求するための リソースクレームテンプレート を作成できます。リソースクレームテンプレートは、それぞれ分離された類似のリソースへのアクセスを Pod に提供します。OpenShift Container Platform は、リソースクレームテンプレートを使用して、Pod のリソースクレームを生成します。OpenShift Container Platform がテンプレートから生成する各リソースクレームは、特定の Pod にバインドされます。Pod が終了すると、OpenShift Container Platform は対応するリソースクレームを削除します。
次のリソースクレームテンプレートの例では、
example-device-classデバイスクラス内のデバイスを要求します。リソースクレームテンプレートオブジェクトの例
apiVersion: resource.k8s.io/v1beta1 kind: ResourceClaimTemplate metadata: namespace: gpu-test1 name: gpu-claim-template spec: # ... spec: devices: requests: - name: gpu deviceClassName: example-device-class- リソースクレーム
管理者と運用担当者は、特定のデバイスクラスから GPU を要求する リソースクレーム を作成できます。リソースクレームは、GPU を複数の Pod で共有できる点で、リソースクレームテンプレートとは異なります。また、要求元の Pod が終了しても、リソースクレームは削除されません。
次のリソースクレームテンプレートの例では、CEL 式を使用して、
example-device-classデバイスクラス内の特定のサイズを持つ特定のデバイスを要求します。リソースクレームオブジェクトの例
apiVersion: resource.k8s.io/v1beta1 kind: ResourceClaim metadata: namespace: gpu-claim name: gpu-devices spec: devices: requests: - name: 1g-5gb deviceClassName: example-device-class selectors: - cel: expression: "device.attributes['driver.example.com'].profile == '1g.5gb'" - name: 1g-5gb-2 deviceClassName: example-device-class selectors: - cel: expression: "device.attributes['driver.example.com'].profile == '1g.5gb'" - name: 2g-10gb deviceClassName: example-device-class selectors: - cel: expression: "device.attributes['driver.example.com'].profile == '2g.10gb'" - name: 3g-20gb deviceClassName: example-device-class selectors: - cel: expression: "device.attributes['driver.example.com'].profile == '3g.20gb'"
リソースクレーム、リソースクレームテンプレートの設定の詳細は、Dynamic Resource Allocation (Kubernetes ドキュメント) を参照してください。
Pod にリソースクレームを追加する方法は、「Pod へのリソースクレームの追加」を参照してください。
次のステップ