2.15. Pod への GPU の割り当て


属性ベースの GPU 割り当てを使用すると、OpenShift Container Platform でのグラフィックスプロセッシングユニット (GPU) リソース割り当てを細かく制御できるようになります。これにより、製品名、GPU メモリー容量、計算能力、ベンダー名、ドライバーバージョンなどの特定のデバイス属性に基づいて Pod が GPU を要求できるようになります。これらの属性は、サードパーティーの Dynamic Resource Allocation (DRA) ドライバーによって公開されます。

重要

属性ベースの GPU 割り当ては、テクノロジープレビュー機能です。テクノロジープレビュー機能は、Red Hat 製品のサービスレベルアグリーメント (SLA) の対象外であり、機能的に完全ではないことがあります。Red Hat は、実稼働環境でこれらを使用することを推奨していません。テクノロジープレビュー機能は、最新の製品機能をいち早く提供して、開発段階で機能のテストを行い、フィードバックを提供していただくことを目的としています。

Red Hat のテクノロジープレビュー機能のサポート範囲に関する詳細は、テクノロジープレビュー機能のサポート範囲 を参照してください。

2.15.1. ワークロードへの GPU の割り当てについて

属性ベースの GPU 割り当てを使用すると、Pod が特定のデバイス属性に基づいてグラフィックスプロセッシングユニット (GPU) を要求できるようになります。これにより、Pod が必要とする指定どおりの GPU が各 Pod に割り当てられます。

属性ベースのリソース割り当てを使用するには、Dynamic Resource Allocation (DRA) ドライバーをインストールする必要があります。DRA ドライバーは、クラスター内の各ノードで動作し、そのノードのハードウェアとの橋渡しをするサードパーティーアプリケーションです。

DRA ドライバーは、以下の属性を含むいくつかの GPU デバイス属性をアドバタイズします。これらは OpenShift Container Platform が GPU の正確な選択に使用できる属性です。

製品名
Pod は、パフォーマンス要件やアプリケーションとの互換性に基づいて、正確な GPU モデルを要求できます。これにより、ワークロードがタスクに最適なハードウェアを活用できるようになります。
GPU メモリー容量
Pod は、8 GB、16 GB、40 GB など、最小または最大メモリー容量を持つ GPU を要求できます。これは、大規模な AI モデルのトレーニングやデータ処理など、メモリーを大量に消費するワークロードに役立ちます。この属性を使用すると、リソースの過剰な割り当てや不十分な使用を防ぎながら、アプリケーションがメモリーの要件に合わせて GPU を確保できるようになります。
計算能力
Pod は、サポートされている CUDA バージョンなど、GPU の計算能力に基づいて GPU を要求できます。Pod は、アプリケーションのフレームワークと互換性のある GPU をターゲットにして、最適化された処理能力を活用できます。
電力と熱のプロファイル
Pod は、電力使用量や熱特性に基づいて GPU を要求できます。これにより、電力や温度の影響を受けやすいアプリケーションを効率的に動作させることができます。これは、電力や冷却に制約がある高密度環境で特に役立ちます。
デバイス ID とベンダー ID
Pod は、GPU のハードウェアの詳細に基づいて GPU を要求できます。これにより、特定のベンダーまたはデバイスタイプを必要とするアプリケーションが、ターゲットを絞った要求を行えるようになります。
ドライバーバージョン
Pod は、特定のドライバーバージョンを実行する GPU を要求できます。これにより、アプリケーションの依存関係との互換性が確保され、GPU 機能へのアクセスが最大化されます。

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"
Copy to Clipboard Toggle word wrap

リソーススライス
各ノードの 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
Copy to Clipboard Toggle word wrap

リソースクレーム

管理者と運用担当者は、特定のデバイスクラスから GPU を要求する リソースクレーム を作成できます。リソースクレームは、GPU を複数の Pod で共有できる点で、リソースクレームテンプレートとは異なります。また、要求元の Pod が終了しても、リソースクレームは削除されません。

次のリソースクレームテンプレートの例では、CEL 式を使用して、example-device-class デバイスクラス内の特定のサイズを持つ特定のデバイスを要求します。

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

apiVersion: resource.k8s.io/v1beta1
kind: ResourceClaimTemplate
metadata:
  namespace: gpu-claim
  name: gpu-devices
spec:
  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'"
Copy to Clipboard Toggle word wrap

リソースクレーム、リソースクレームテンプレートの設定の詳細は、Dynamic Resource Allocation (Kubernetes ドキュメント) を参照してください。

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

2.15.3. Pod へのリソースクレームの追加

属性ベースの GPU 割り当てでは、Pod 内のコンテナーに対して特定のグラフィックスプロセッシングユニット (GPU) を要求できるようにするために、リソースクレームとリソースクレームテンプレートを使用します。リソースクレームは複数のコンテナーで使用できますが、リソースクレームテンプレートは 1 つのコンテナーでのみ使用できます。詳細は、関連情報 セクションの「デバイス属性を使用したデバイス割り当ての設定について」を参照してください。

次の手順の例では、特定の GPU を container0 に割り当てるリソースクレームテンプレートと、container1container2 間で GPU を共有するリソースクレームを作成します。

前提条件

  • Dynamic Resource Allocation (DRA) ドライバーがインストールされている。DRA の詳細は、Dynamic Resource Allocation (Kubernetes ドキュメント) を参照してください。
  • リソーススライスが作成されている。
  • リソースクレームやリソースクレームテンプレートが作成されている。
  • cluster という名前の FeatureGate CR を編集して、クラスターに必要なテクノロジープレビュー機能を有効にした。

    FeatureGate CR の例

    apiVersion: config.openshift.io/v1
    kind: FeatureGate
    metadata:
      name: cluster
    spec:
      featureSet: TechPreviewNoUpgrade 
    1
    Copy to Clipboard Toggle word wrap

    1
    必要な機能を有効にします。
    警告

    クラスターで TechPreviewNoUpgrade 機能セットを有効にすると、元に戻すことができず、マイナーバージョンの更新が妨げられます。この機能セットを使用すると、該当するテクノロジープレビュー機能をテストクラスターで有効にして、完全にテストすることができます。実稼働クラスターではこの機能セットを有効にしないでください。

手順

  1. 次のような YAML ファイルを作成して Pod を作成します。

    リソースを要求する Pod の例

    apiVersion: v1
    kind: Pod
    metadata:
      namespace: gpu-allocate
      name: pod1
      labels:
        app: pod
    spec:
      restartPolicy: Never
      containers:
      - name: container0
        image: ubuntu:24.04
        command: ["sleep", "9999"]
        resources:
          claims: 
    1
    
          - name: gpu-claim-template
      - name: container1
        image: ubuntu:24.04
        command: ["sleep", "9999"]
        resources:
          claims:
          - name: gpu-claim
      - name: container2
        image: ubuntu:24.04
        command: ["sleep", "9999"]
        resources:
          claims:
          - name: gpu-claim
      resourceClaims: 
    2
    
      - name: gpu-claim-template
        resourceClaimTemplateName: example-resource-claim-template
      - name: gpu-claim
        resourceClaimName: example-resource-claim
    Copy to Clipboard Toggle word wrap

    1
    このコンテナーで使用する 1 つ以上のリソースクレームを指定します。
    2
    コンテナーの起動に必要なリソースクレームを指定します。リソースクレームリクエストと、リソースクレームやリソースクレームテンプレートの任意の名前を含めます。
  2. CRD オブジェクトを作成します。

    $ oc create -f <file_name>.yaml
    Copy to Clipboard Toggle word wrap

Pod のリソースクレームを設定する方法の詳細は、Dynamic Resource Allocation (Kubernetes ドキュメント) を参照してください。

トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

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

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

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

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

会社概要

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

Theme

© 2025 Red Hat