2.15.2. GPU 割り当てオブジェクトと概念について


以下の属性ベースの GPU 割り当てオブジェクトと概念を使用することで、ワークロードが必要とするグラフィックス処理ユニット (GPU) 仕様を備えたノードにワークロードがスケジュールされるようにすることができます。先に進む前に、これらの物体についてよく理解しておく必要があります。

デバイスクラス

デバイスクラスとは、Pod が要求できるデバイスのカテゴリーのことです。一部のデバイスドライバーには独自のデバイスクラスが含まれています。管理者がデバイスクラスを作成することもできます。デバイスクラスにはデバイスセレクターが含まれています。デバイスセレクターは、デバイスが要求を満たす場合に true と評価される Common Expression Language (CEL) 式です。

次の例の DeviceClass オブジェクトは、driver.example.com デバイスドライバーによって管理されるすべてのデバイスを選択します。

デバイスクラスオブジェクトの例

apiVersion: resource.k8s.io/v1
kind: DeviceClass
metadata:
  name: example-device-class
spec:
  selectors:
  - cel:
      expression: |-
        device.driver == "driver.example.com"

各項目の説明:

仕様セレクター
デバイスを選択するための CEL 式を指定します。
リソーススライス

各ノード上の DRA ドライバーは、そのクラスターで利用可能なリソースを記述する リソーススライス を作成および管理します。リソーススライスは、ノードに割り当てられている 1 つ以上の GPU リソースを表します。リソース要求が作成され、Pod 内で使用されると、OpenShift Container Platform はリソーススライスを使用して、要求されたリソースを持つノードを検索します。リソースクレームに適したリソーススライスが見つかると、OpenShift Container Platform のスケジューラーが、割り当ての詳細を使用してリソースクレームを更新し、リソースクレームにリソースを割り当て、リソースにアクセスできるノードに Pod をスケジュールします。

リソーススライスオブジェクトの例

apiVersion: v1
items:
- apiVersion: resource.k8s.io/v1
  kind: ResourceSlice
# ...
spec:
    driver: driver.example.com
    nodeName: dra-example-driver
    pool:
      generation: 0
      name: dra-example-driver
      resourceSliceCount: 1
    devices:
    - attributes:
        driverVersion:
          version: 1.0.0
        index:
          int: 0
        model:
          string: LATEST-GPU-MODEL
        uuid:
          string: gpu-18db0e85-99e9-c746-8531-ffeb86328b39
      capacity:
        memory:
          value: 10Gb
      name: 2g-10gb
# ...

各項目の説明:

仕様ドライバー
DRA ドライバーの名前を指定します。この名前はデバイスクラス内で指定できます。
仕様デバイス属性
リソース要求またはリソース要求テンプレートを使用して割り当て可能なデバイスを指定します。
リソースクレームテンプレート

クラスター管理者とオペレーターは、Pod が必要とする GPU リソースを記述する リソース要求テンプレート を作成できます。管理者またはオペレーターは、リソース要求を Pod 仕様に追加します。OpenShift Container Platform は、リソース要求テンプレートを使用して、Pod のリソース要求を生成します。OpenShift Container Platform のスケジューラーは、要求された GPU を搭載したクラスター内のノードにその Pod をスケジュールします。

OpenShift Container Platform がテンプレートから生成する各リソース要求は、特定の Pod に紐付けられます。そのため、GPU は他のワークロードと同時に使用することはできません。Pod が終了すると、OpenShift Container Platform は対応するリソースクレームを削除します。

スケジューラーが満たすべき特定のデバイスに対する要求を指定するか、スケジューラーが選択するための優先順位付けされたデバイスのリストを提供する必要があります。

以下のリソース要求テンプレートの例には、2 つのサブ要求が含まれています。これらのサブリクエストのうち、スケジューラーによって選択されるのは 1 つだけです。スケジューラーは、サブリクエストがリストされている順序でそれらを処理しようとします。デバイスを選択するためのサブリクエスト内では、CEL 式が使用されます。

リソースクレームテンプレートオブジェクトの例

apiVersion: resource.k8s.io/v1
kind: ResourceClaimTemplate
metadata:
  namespace: gpu-claim
  name: gpu-devices
spec:
  spec:
    devices:
      requests:
      - name: req-0
        firstAvailable:
        - 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'"

各項目の説明:

仕様.仕様.デバイス.リクエスト

デバイスに対する 1 つ以上の要求のリストを指定します。サブリクエストには、exactly または firstAvailable の いずれかを含める必要があります。

  • exactly: 1 台以上の同一デバイスを要求することを指定します。要求が満たされるためには、デバイスが要求内容と完全に一致する必要がある。要求されたデバイスが利用できない場合、スケジューラーは Pod を作成できません。
  • firstAvailable: デバイスに対する複数のリクエストを指定します。スケジューラーがリクエスト元の Pod を作成する前に、そのうちの 1 つのデバイスが利用可能であれば十分です。スケジューラーは、リストに記載されている順序でデバイスの可用性を確認し、最初に利用可能なデバイスを選択します。スケジューラーは、要求されたデバイスが 1 つでも利用可能な場合、Pod を作成できます。
spec.devices.requests.exactly.deviceClassName または spec.devices.requests.firstAvailable.deviceClassName
このリクエストで使用するデバイスクラスを指定します。
spec.devices.requests.exactly.selectors または spec.devices.requests.firstAvailable.selectors
指定されたデバイスクラスから特定のデバイスを要求するための CEL 式を指定します。
リソースクレーム

管理者とオペレーターは、Pod が必要とする GPU リソースを記述する リソース要求 を作成できます。管理者またはオペレーターは、リソース要求を Pod 仕様に追加します。OpenShift Container Platform のスケジューラーは、要求された GPU を搭載したクラスター内のノードにその Pod をスケジュールします。

リソース要求は複数の Pod 仕様で使用できるため、複数のワークロードで GPU を共有できます。リソース要求は、要求元の Pod が終了しても削除されません。

リソース要求内のデバイス要求については、スケジューラーが満たすべき 1 つ以上のデバイス要求のリストを指定するか、スケジューラーが選択するための優先順位付けされた要求リストを提供する必要があります。

以下のリソース要求の例では、CEL 式を使用して、example-device-class デバイスクラスのデバイスを 1 つ要求しています。ここで、exact パラメーターは、スケジューラーが Pod を作成する前に、要求された特定のデバイスを備えたノードが利用可能である必要があることを示しています。

リソースクレームオブジェクトの例

apiVersion: resource.k8s.io/v1
kind: ResourceClaim
metadata:
  namespace: gpu-claim
  name: gpu-devices
spec:
  devices:
    requests:
    - name: req-0
      exactly:
        name: 2g-10gb
        deviceClassName: example-device-class
        selectors:
        - cel:
            expression: "device.attributes['driver.example.com'].profile == '2g.10gb'"

管理者アクセス

クラスター管理者は、他のユーザーが使用しているデバイスに対して特権アクセス権を取得できる。これにより、管理者はデバイスの健全性や状態を監視するなどのタスクを実行できると同時に、ユーザーがこれらのデバイスをワークロードに引き続き使用できることを保証できます。

管理者アクセスを取得するには、管理者は 、resource.kubernetes.io/admin-access: "true" ラベルを含む名前空間で、adminAccess: true パラメーターを指定したリソースクレームまたはリソースクレームテンプレートを作成する必要があります。管理者以外のユーザーは、このラベルが付いた名前空間にアクセスできません。

管理者アクセスラベル付き名前空間の例

apiVersion: v1
kind: Namespace
metadata:
  labels:
    resource.kubernetes.io/admin-access: "true"
# ...

次の例では、管理者は 2G-10GB デバイスへのアクセス権を与えられています。

管理者権限を持つリソースクレームオブジェクトの例

apiVersion: resource.k8s.io/v1
kind: ResourceClaimTemplate
metadata:
  name: large-black-cat-claim-template
spec:
  devices:
    requests:
    - name: req-0
      exactly:
        allocationMode: All
        adminAccess: true
        deviceClassName: example-device-class
        selectors:
        - cel:
            expression: "device.attributes['driver.example.com'].profile == '2g.10gb'"

各項目の説明:

spec.devices.requests.exactly.adminAccess.true または spec.devices.requests.firstAvailable.adminAccess.true
指定されたデバイスに対して管理者アクセスモードが有効になっていることを指定します。

Pod にリソースクレームを追加する方法は、「Pod へのリソースクレームの追加」を参照してください。

Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

Red Hat ドキュメントについて

Legal Notice

Theme

© 2026 Red Hat
トップに戻る