ハードウェアアクセラレーター
ハードウェアアクセラレーター
概要
第1章 ハードウェアアクセラレーターについて リンクのコピーリンクがクリップボードにコピーされました!
専用ハードウェアアクセラレーターは、新しい生成人工知能および機械学習 (AI/ML) 業界で重要な役割を果たします。具体的には、ハードウェアアクセラレーターは、この新しいテクノロジーを支える大規模言語モデルやその他の基礎モデルのトレーニングと提供に不可欠です。データサイエンティスト、データエンジニア、ML エンジニア、開発者は、データ量の多い変換やモデルの開発と提供に特化したハードウェアアクセラレーションを活用できます。そのエコシステムの多くはオープンソースであり、複数の貢献パートナーとオープンソース財団が存在します。
Red Hat OpenShift Container Platform は、ハードウェアアクセラレーターの構成要素である次の処理ユニットを追加するカードと周辺ハードウェアをサポートしています。
- グラフィックスプロセッシングユニット (GPU)
- ニューラルプロセッシングユニット (NPU)
- 特定用途向け集積回路 (ASIC)
- データプロセッシングユニット (DPU)
専用ハードウェアアクセラレーターは、AI/ML 開発にさまざまな利点をもたらします。
- 1 つのプラットフォームであらゆる用途に対応
- 開発者、データエンジニア、データサイエンティスト、DevOps のためのコラボレーション環境
- Operator による機能拡張
- Operator により OpenShift Container Platform に AI/ML 機能を導入可能
- ハイブリッドクラウドのサポート
- モデルの開発、提供、デプロイのためのオンプレミスサポート
- AI/ML ワークロードのサポート
- モデルのテスト、イテレーション、統合、プロモートを行い、サービスとして運用環境に提供
Red Hat は、Red Hat Enterprise Linux (RHEL) および OpenShift Container Platform プラットフォームの Linux (カーネルとユーザー空間) および Kubernetes レイヤーで、このような専用ハードウェアアクセラレーターを有効にするために最適化されたプラットフォームを提供しています。これを実現するために、Red Hat は、Red Hat OpenShift AI と Red Hat OpenShift Container Platform の実証済みの機能を、単一のエンタープライズ対応 AI アプリケーションプラットフォームに統合しました。
ハードウェア Operator は、Kubernetes クラスターのオペレーティングフレームワークを使用して、必要なアクセラレーターリソースを有効にします。提供されているデバイスプラグインを手動で、またはデーモンセットとしてデプロイすることもできます。このプラグインにより、クラスターに GPU が登録されます。
専用ハードウェアアクセラレーターの中には、開発とテストのためのセキュリティーを確保する必要がある非接続環境内で動作するように設計されているものもあります。
1.1. ハードウェアアクセラレーター リンクのコピーリンクがクリップボードにコピーされました!
Red Hat OpenShift Container Platform では、次のハードウェアアクセラレーターが有効になります。
- NVIDIA GPU
- AMD Instinct® GPU
- Intel® Gaudi®
第2章 NVIDIA GPU アーキテクチャー リンクのコピーリンクがクリップボードにコピーされました!
NVIDIA は、OpenShift Container Platform でのグラフィックスプロセッシングユニット (GPU) リソースの使用をサポートしています。OpenShift Container Platform は、大規模な Kubernetes クラスターのデプロイと管理用に Red Hat が開発およびサポートする、セキュリティーを重視して強化された Kubernetes プラットフォームです。OpenShift Container Platform には Kubernetes の拡張機能が含まれているため、ユーザーはが簡単に NVIDIA GPU リソースを設定し、それを使用してワークロードを高速化できます。
NVIDIA GPU Operator は、OpenShift Container Platform 内の Operator フレームワークを使用して、GPU で高速化されたワークロードの実行に必要な NVIDIA ソフトウェアコンポーネントのライフサイクル全体を管理します。
これらのコンポーネントには、NVIDIA ドライバー (CUDA を有効にするため)、GPU 用の Kubernetes デバイスプラグイン、NVIDIA Container Toolkit、GPU Feature Discovery (GFD) を使用した自動ノードタグ付け、DCGM ベースのモニタリングなどが含まれます。
NVIDIA GPU Operator をサポートしているのは NVIDIA だけです。NVIDIA からサポートを受ける方法は、NVIDIA サポートの利用方法 を参照してください。
2.1. NVIDIA GPU の前提条件 リンクのコピーリンクがクリップボードにコピーされました!
- 1 つ以上の GPU ワーカーノードを備えた OpenShift クラスターが稼働している。
-
必要な手順を実行するために
cluster-admin
として OpenShift クラスターにアクセスできる。 -
OpenShift CLI (
oc
) がインストールされている。 -
Node Feature Discovery (NFD) Operator をインストールし、
nodefeaturediscovery
インスタンスを作成している。
2.2. NVIDIA GPU の有効化 リンクのコピーリンクがクリップボードにコピーされました!
以下の図は、OpenShift で GPU アーキテクチャーがどのように有効になっているかを示しています。
図2.1 NVIDIA GPU の有効化
MIG は、NVIDIA Ampere 生成で始まる GPU でサポートされています。MIG をサポートする GPU のリストは、NVIDIA MIG ユーザーガイド を参照してください。
2.2.1. GPU とベアメタル リンクのコピーリンクがクリップボードにコピーされました!
NVIDIA 認定のベアメタルサーバーに OpenShift Container Platform をデプロイできますが、いくつかの制限があります。
- コントロールプレーンノードは CPU ノードにできます。
AI/ML ワークロードがワーカーノードで実行される場合、そのワーカーノードは GPU ノードである必要があります。
さらに、ワーカーノードは 1 つ以上の GPU をホストできますが、すべて同じタイプである必要があります。たとえば、ノードには 2 つの NVIDIA A100 GPU が存在することは可能ですが、A100 GPU と T4 GPU を 1 つずつ備えたノードはサポートされません。Kubernetes の NVIDIA デバイスプラグインは、同じノード上で異なる GPU モデルの組み合わせをサポートしません。
- OpenShift を使用する場合は、1 台または 3 台以上のサーバーが必要な点に注意してください。2 台のサーバーを含むクラスターはサポートされません。単一サーバーのデプロイメントはシングルノード openShift (SNO) と呼ばれ、この設定を使用すると、高可用性 OpenShift 環境が得られません。
以下のいずれかの方法で、コンテナー化された GPU にアクセスできます。
- GPU パススルー
- マルチインスタンス GPU (MIG)
2.2.2. GPU と仮想化 リンクのコピーリンクがクリップボードにコピーされました!
多くの開発者や企業がコンテナー化されたアプリケーションやサーバーレスインフラストラクチャーに移行していますが、仮想マシン上で実行されるアプリケーションの開発と保守は引き続き注目されています。Red Hat OpenShift Virtualization はこの機能を提供し、企業はこの機能を使用して仮想マシンをクラスター内のコンテナー化されたワークフロー組み込むことができます。
ワーカーノードを GPU に接続する場合は、次のいずれかの方法を選択できます。
- 仮想マシン内の GPU ハードウェアにアクセスして使用するための GPU パススルー。
- GPU コンピュート容量がワークロードでいっぱいになっていない場合の GPU (vGPU) のタイムスライス。
2.2.3. GPU と vSphere リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Container Platform は、さまざまな GPU タイプをホストできる NVIDIA 認定の VMware vSphere サーバーにデプロイできます。
仮想マシンで vGPU インスタンスが使用されている場合は、NVIDIA GPU ドライバーをハイパーバイザーにインストールする必要があります。VMware vSphere の場合、このホストドライバーは VIB ファイルの形式で提供されます。
ワーカーノード仮想マシンに割り当てることができる vGPUS の最大数は、vSphere のバージョンによって異なります。
- vSphere 7.0: 仮想マシンごとに最大 4 つの仮想 GPU
vSphere 8.0: 仮想マシンごとに最大 8 つの仮想 GPU
注記vSphere 8.0 では、仮想マシンに関連付けられた複数の完全または部分的な異種プロファイルのサポートが導入されました。
次のいずれかの方法を選択して、ワーカーノードを GPU に割り当てることができます。
- 仮想マシン内の GPU ハードウェアにアクセスして使用するための GPU パススルー
- すべての GPU が必要でない場合の GPU (vGPU) タイムスライス
ベアメタルデプロイメントと同様に、1 台または 3 台以上のサーバーが必要です。2 台のサーバーを含むクラスターはサポートされません。
2.2.4. GPU および Red Hat KVM リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Container Platform は、NVIDIA 認定のカーネルベースの仮想マシン (KVM) サーバー上で使用できます。
ベアメタルデプロイメントと同様に、1 台または 3 台以上のサーバーが必要です。2 台のサーバーを含むクラスターはサポートされません。
ただし、ベアメタルデプロイメントとは異なり、サーバーで異なるタイプの GPU を使用できます。これは、GPU を Kubernetes ノードとして機能する別の仮想マシンに割り当てることができるためです。唯一の制限として、Kubernetes ノードがノードと同レベルで GPU タイプのセットを持つ必要があります。
以下のいずれかの方法で、コンテナー化された GPU にアクセスできます。
- 仮想マシン内の GPU ハードウェアにアクセスして使用するための GPU パススルー
- すべての GPU が必要でない場合の GPU (vGPU) タイムスライス
vGPU 機能を有効にするには、特別なドライバーをホストレベルでインストールする必要があります。このドライバーは RPM パッケージとして提供されます。このホストドライバーは、GPU パススルーの割り当てにはまったく必要ありません。
2.2.5. GPU と CSP リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Container Platform は、主要なクラウドサービスプロバイダー (CSP) である Amazon Web Services (AWS)、Google Cloud Platform (GCP)、Microsoft Azure のいずれかにデプロイできます。
フルマネージドデプロイメントとセルフマネージドデプロイメントの 2 つのオペレーションモードを使用できます。
- フルマネージドデプロイメントでは、Red Hat が CSP と連携してすべてを自動化します。お客様は CSP の Web コンソールを使用して OpenShift インスタンスを要求できます。クラスターは自動的に作成され、Red Hat によって完全に管理されます。この環境内では、ノードの障害やエラーを心配する必要はありません。クラスターの稼働時間を維持する責任は Red Hat がすべて負います。フルマネージドサービスは、AWS、Azure、GCP で利用できます。AWS の場合、OpenShift サービスは ROSA (Red Hat OpenShift Service on AWS) と呼ばれます。Azure の場合、このサービスは Azure Red Hat OpenShift と呼ばれます。GCP の場合、このサービスは OpenShift Dedicated on GCP と呼ばれます。
- セルフマネージドデプロイメントでは、お客様が OpenShift クラスターのインスタンス化と維持を行う必要があります。この場合、Red Hat は OpenShift クラスターのデプロイを支援するために、OpenShift-install ユーティリティーを提供します。セルフマネージドサービスは、世界中のすべての CSP で利用できます。
このコンピュートインスタンスが GPU により高速化されたコンピュートインスタンスであること、および GPU タイプが NVIDIA AI Enterprise でサポートされている GPU のリストと一致することが重要です。たとえば、T4、V100、A100 はこのリストに含まれます。
以下のいずれかの方法で、コンテナー化された GPU にアクセスできます。
- 仮想マシン内の GPU ハードウェアにアクセスして使用するための GPU パススルー。
- GPU 全体を必要としない場合 GPU (vGPU) タイムスライス。
2.2.6. GPU と Red Hat Device Edge リンクのコピーリンクがクリップボードにコピーされました!
Red Hat Device Edge は MicroShift へのアクセスを提供します。MicroShift は、シングルノードデプロイメントのシンプルさと、リソースに制約のある (エッジ) コンピューティング求められる機能とサービスを備えています。Red Hat Device Edge は、リソースに制約のある環境にデプロイされるベアメタル、仮想、コンテナー化された、または Kubernetes のワークロードのニーズを満たします。
Red Hat Device Edge 環境のコンテナー上で NVIDIA GPU を有効にできます。
コンテナー化された GPU へのアクセスには、GPU パススルーを使用します。
2.3. GPU の共有方法 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat と NVIDIA は、エンタープライズレベルの OpenShift Container Platform クラスター上で、GPU 加速コンピューティングを簡略化するための GPU 同時実行性と共有メカニズムを開発しました。
通常、アプリケーションにはさまざまなコンピューティング要件があり、GPU が十分に活用されていない可能性があります。デプロイメントコストを削減し、GPU 使用率を最大化するには、ワークロードごとに適切な量のコンピュートリソースを提供することが重要です。
GPU 使用率を改善するための同時実行メカニズムは、プログラミングモデル API からシステムソフトウェアやハードウェアパーティショニングまで、仮想化を含めて幅広く存在します。次のリストは、GPU 同時実行メカニズムを示しています。
- Compute Unified Device Architecture (CUDA) ストリーム
- タイムスライス
- CUDA マルチプロセスサービス (MPS)
- マルチインスタンス GPU (MIG)
- vGPU による仮想化
さまざまな OpenShift Container Platform シナリオで GPU 同時実行メカニズムを使用する場合は、次の GPU 共有に関する推奨事項を考慮してください。
- ベアメタル
- vGPU は使用できません。MIG 対応カードの使用を検討してください。
- 仮想マシン
- vGPU が最良の選択です。
- ベアメタル上の MIG を持たない古い NVIDIA カード
- タイムスライスの使用を検討してください。
- 複数の GPU を搭載し、パススルーと vGPU が必要な仮想マシン
- 個別の仮想マシンの使用を検討してください。
- OpenShift Virtualization と複数の GPU を備えたベアメタル
- ホストされた仮想マシンにはパススルー、コンテナーにはタイムスライスの使用を検討してください。
関連情報
2.3.1. CUDA ストリーム リンクのコピーリンクがクリップボードにコピーされました!
Compute Unified Device Architecture (CUDA) は、GPU での計算全般のために NVIDIA が開発した並列コンピューティングプラットフォームおよびプログラミングモデルです。
ストリームは、GPU 上で発行順に実行される一連の操作です。CUDA コマンドは通常、デフォルトストリームで順次実行され、前のタスクが完了するまでタスクは開始されません。
ストリームをまたいだ操作の非同期処理により、タスクの並列実行が可能になります。あるストリームで発行されたタスクは、別のタスクが別のストリームで発行される前、実行中、または発行された後に実行されます。これにより、GPU は指定された順序に関係なく複数のタスクを同時に実行できるようになり、パフォーマンスの向上につながります。
2.3.2. タイムスライス リンクのコピーリンクがクリップボードにコピーされました!
GPU タイムスライスは、複数の CUDA アプリケーションを実行しているときに、過負荷になった GPU でスケジュールされたワークロードをインターリーブします。
Kubernetes で GPU のタイムスライスを有効にするには、GPU のレプリカセットを定義し、それを個別に Pod に配分してワークロードを実行できるようにしっます。マルチインスタンス GPU (MIG) とは異なり、メモリーや障害はレプリカ間で分離されませんが、一部のワークロードでは一切共有しないより、こちらの方が適切です。内部的には、GPU タイムスライスを使用して、基礎である同じ GPU のレプリカからのワークロードを多重化します。
クラスター全体のデフォルト設定をタイムスライスに適用できます。ノード固有の設定を適用することもできます。たとえば、タイムスライス設定を Tesla T4 GPU を備えたノードにのみ適用し、他の GPU モデルを備えたノードは変更しないようにできます。
クラスター全体のデフォルト設定を適用し、ノードにラベルを付けて、それらのノードにノード固有の設定が適用されるようにすることで、2 つのアプローチを組み合わせることができます。
2.3.3. CUDA マルチプロセスサービス リンクのコピーリンクがクリップボードにコピーされました!
CUDA マルチプロセスサービス (MPS) を使用すると、単一の GPU で複数の CUDA プロセスを使用できます。プロセスは GPU 上で並行して実行されるため、GPU コンピュートリソースの飽和が発生しなくなります。MPS を使用すると、カーネル操作や、別のプロセスからのメモリーコピーの同時実行または重複も可能になり、使用率が向上します。
関連情報
2.3.4. マルチインスタンス GPU リンクのコピーリンクがクリップボードにコピーされました!
マルチインスタンス GPU (MIG) を使用すると、GPU コンピュートユニットとメモリーを複数の MIG インスタンスに分割できます。これらの各インスタンスは、システムの観点からはスタンドアロン GPU デバイスであり、ノード上で実行されている任意のアプリケーション、コンテナー、または仮想マシンに接続できます。GPU を使用するソフトウェアは、これらの各 MIG インスタンスを個別の GPU として扱います。
MIG は、GPU 全体のフルパワーを必要としないアプリケーションがある場合に役立ちます。新しい NVIDIA Ampere アーキテクチャーの MIG 機能を使用すると、ハードウェアリソースを複数の GPU インスタンスに分割できます。各インスタンスは、オペレーティングシステムで独立した CUDA 対応 GPU として利用できます。
NVIDIA GPU Operator バージョン 1.7.0 以降では、A100 および A30 Ampere カードの MIG サポートを提供しています。これらの GPU インスタンスは、最大 7 つの独立した CUDA アプリケーションをサポートするように設計されており、専用のハードウェアリソースをしようしてそれぞれ完全に分離された状態で稼働します。
2.3.5. vGPU による仮想化 リンクのコピーリンクがクリップボードにコピーされました!
仮想マシンは、NVIDIA vGPU を使用して単一の物理 GPU に直接アクセスできます。企業全体の仮想マシンで共有され、他のデバイスからアクセスできる仮想 GPU を作成できます。
この機能は、GPU パフォーマンスのパワーと、vGPU がもたらす管理およびセキュリティーの利点を組み合わせたものです。vGPU には他にも、仮想環境のプロアクティブな管理と監視、混合 VDI とコンピュートワークロードのワークロードバランシング、複数の仮想マシン間でのリソース共有などの利点があります。
関連情報
2.4. OpenShift Container Platform の NVIDIA GPU 機能 リンクのコピーリンクがクリップボードにコピーされました!
- NVIDIA Container Toolkit
- NVIDIA Container Toolkit を使用すると、GPU で高速化されたコンテナーを作成して実行できます。ツールキットには、コンテナーが NVIDIA GPU を使用するように自動的に設定するためのコンテナーランタイムライブラリーとユーティリティーが含まれています。
- NVIDIA AI Enterprise
NVIDIA AI Enterprise は、NVIDIA 認定システムで最適化、認定、サポートされている AI およびデータ分析ソフトウェアのエンドツーエンドのクラウドネイティブスイートです。
NVIDIA AI Enterprise には、Red Hat OpenShift Container Platform のサポートが含まれています。サポートされているインストール方法は以下のとおりです。
- GPU パススルーを使用するベアメタルまたは VMware vSphere 上の OpenShift Container Platform。
- NVIDIA vGPU を使用する VMware vSphere 上の OpenShift Container Platform。
- GPU Feature Discovery
NVIDIA GPU Feature Discovery for Kubernetes は、ノード上で使用可能な GPU のラベルを自動的に生成できるソフトウェアコンポーネントです。GPU Feature Discovery は、Node Feature Discovery (NFD) を使用してこのラベル付けを実行します。
Node Feature Discovery (NFD) Operator は、ハードウェア固有の情報でノードにラベル付けを行うことで、OpenShift Container Platform クラスターのハードウェア機能と設定の検出を管理します。NFD は、PCI カード、カーネル、OS バージョンなどのノード固有の属性で、ホストにラベル付けを行います。
Operator Hub で NFD Operator を見つけるには、"Node Feature Discovery" で検索してください。
- NVIDIA GPU Operator with OpenShift Virtualization
これまで、GPU Operator は、GPU で高速化されたコンテナーを実行するためにワーカーノードのみをプロビジョニングしていました。現在は、GPU Operator を使用して、GPU で高速化された仮想マシンを実行するためのワーカーノードもプロビジョニングできます。
GPU Operator を、どの GPU ワークロードがそのワーカーノード上で実行するように設定されたかに応じて、異なるソフトウェアコンポーネントをワーカーノードにデプロイするように設定できます。
- GPU モニタリングダッシュボード
- モニタリングダッシュボードをインストールして、OpenShift Container Platform Web コンソールのクラスターの Observe ページに、GPU の使用状況に関する情報を表示できます。GPU 使用状況に関する情報には、使用可能な GPU の数、消費電力 (ワット単位)、温度 (摂氏)、使用率 (パーセント)、および各 GPU のその他のメトリクスが含まれます。
第3章 AMD GPU Operator リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Container Platform クラスター内で AMD Instinct GPU アクセラレーターと AMD GPU Operator を併用することで、機械学習、生成 AI、および GPU アクセラレーションアプリケーション向けのコンピューティング能力をシームレスに活用できます。
このドキュメントでは、AMD GPU Operator を有効化、設定、テストするために必要な情報を提供します。詳細は、AMD Instinct™ Accelerators を参照してください。
3.1. AMD GPU Operator について リンクのコピーリンクがクリップボードにコピーされました!
AMD GPU Operator のハードウェアアクセラレーション機能は、Red Hat OpenShift AI を使用して人工知能および機械学習 (AI/ML) アプリケーションを作成するデータサイエンティストや開発者に、高いパフォーマンスとコスト効率を提供します。GPU 機能の特定の領域を高速化すると、CPU 処理とメモリー使用量を最小限に抑え、全体的なアプリケーション速度、メモリー消費、帯域幅の制約を改善できます。
3.2. AMD GPU Operator のインストール リンクのコピーリンクがクリップボードにコピーされました!
クラスター管理者は、OpenShift CLI と Web コンソールを使用して AMD GPU Operator をインストールできます。これは複数のステップから成る手順であり、Node Feature Discovery Operator、Kernel Module Management Operator、AMD GPU Operator のインストールが必要です。Operator の AMD コミュニティー版リリースをインストールするには、次の手順を順に実行します。
次のステップ
- Node Feature Discovery Operator をインストールします。
- Kernel Module Management Operator をインストールします。
- AMD GPU Operator をインストールして設定します。
3.3. AMD GPU Operator のテスト リンクのコピーリンクがクリップボードにコピーされました!
ROCmInfo のインストールをテストし、AMD MI210 GPU のログを表示するには、次の手順を使用します。
手順
ROCmInfo をテストする YAML ファイルを作成します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow rocminfo
Pod を作成します。oc create -f rocminfo.yaml
$ oc create -f rocminfo.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
apiVersion: v1 pod/rocminfo created
apiVersion: v1 pod/rocminfo created
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 1 つの MI210 GPU を含む
rocmnfo
ログを確認します。oc logs rocminfo | grep -A5 "Agent"
$ oc logs rocminfo | grep -A5 "Agent"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Pod を削除します。
oc delete -f rocminfo.yaml
$ oc delete -f rocminfo.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
pod "rocminfo" deleted
pod "rocminfo" deleted
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第4章 Intel Gaudi AI アクセラレーター リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Container Platform の生成 AI および機械学習 (AI/ML) アプリケーションに Intel Gaudi AI アクセラレーターを使用できます。Intel Gaudi AI アクセラレーターは、コスト効率が高く、柔軟性と拡張性に優れたソリューションを提供し、最適化されたディープラーニングワークロードを実現します。
Red Hat は Intel Gaudi 2 および Intel Gaudi 3 デバイスをサポートしています。Intel Gaudi 3 デバイスは、トレーニング速度とエネルギー効率を大幅に向上させます。
4.1. Intel Gaudi AI アクセラレーターの前提条件 リンクのコピーリンクがクリップボードにコピーされました!
- 少なくとも 1 つの GPU ワーカーノードを備えた OpenShift Container Platform クラスターが動作している。
- 必要な手順を実行できるように、cluster-admin として OpenShift Container Platform クラスターにアクセスできる。
-
OpenShift CLI (
oc
) がインストールされている。 -
Node Feature Discovery (NFD) Operator をインストールし、
NodeFeatureDiscovery
インスタンスを作成した。
第5章 NVIDIA GPUDirect Remote Direct Memory Access (RDMA) リンクのコピーリンクがクリップボードにコピーされました!
NVIDIA GPUDirect Remote Direct Memory Access (RDMA) を使用すると、オペレーティングシステムを介さずに、1 台のコンピューターのアプリケーションから別のコンピューターのメモリーに直接アクセスできます。これにより、プロセスにおけるカーネルの介入を回避できるため、リソースが解放され、ネットワーク通信の処理に通常必要な CPU オーバーヘッドが大幅に削減されます。これは、GPU で高速化されたワークロードをクラスター全体に分散するのに役立ちます。RDMA は高帯域幅と低レイテンシーのアプリケーションに非常に適しているため、ビッグデータや機械学習のアプリケーションに最適です。
現在、NVIDIA GPUDirect RDMA には 3 つの設定方法があります。
- 共有デバイス
- この方法では、NVIDIA GPUDirect RDMA デバイスを、デバイスが公開されている OpenShift Container Platform ワーカーノード上の複数の Pod 間で共有できます。
- ホストデバイス
- この方法では、Pod に追加のホストネットワークを作成することにより、ワーカーノード上で直接の物理イーサネットアクセスを提供します。プラグインを使用すると、ネットワークデバイスをホストのネットワーク namespace から Pod 上のネットワーク namespace に移動できます。
- SR-IOV レガシーデバイス
- Single Root IO Virtualization (SR-IOV) 方式では、イーサネットアダプターなどの単一のネットワークデバイスを複数の Pod と共有できます。SR-IOV は、ホストノード上で Physical Function (PF) として認識されるデバイスを、複数の Virtual Function (VF) に分割します。VF は他のネットワークデバイスと同様に使用されます。
これらの各方法は、NVIDIA GPUDirect RDMA over Converged Ethernet (RoCE) または Infiniband インフラストラクチャーで使用できます。そのため、設定方法は合計で 6 つあります。
5.1. NVIDIA GPUDirect RDMA の前提条件 リンクのコピーリンクがクリップボードにコピーされました!
NVIDIA GPUDirect RDMA のどの設定方法でも、特定の Operator のインストールが必要です。Operator をインストールするには、次の手順を実行します。
- Node Feature Discovery Operator をインストールします。
- SR-IOV Operator をインストールします。
- NVIDIA Network Operator をインストールします (NVIDIA ドキュメントを参照)。
- NVIDIA GPU Operator をインストールします (NVIDIA ドキュメントを参照)。
5.2. IRDMA カーネルモジュールの無効化 リンクのコピーリンクがクリップボードにコピーされました!
一部のシステム (DellR750xa など) では、DOCA ドライバーをアンロードおよびロードするときに、IRDMA カーネルモジュールによって NVIDIA Network Operator の問題が発生します。モジュールを無効にするには、次の手順を実行します。
手順
次のコマンドを実行して、次のマシン設定ファイルを生成します。
cat <<EOF > 99-machine-config-blacklist-irdma.yaml
$ cat <<EOF > 99-machine-config-blacklist-irdma.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、クラスターにマシン設定を作成し、ノードが再起動するのを待ちます。
oc create -f 99-machine-config-blacklist-irdma.yaml
$ oc create -f 99-machine-config-blacklist-irdma.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
machineconfig.machineconfiguration.openshift.io/99-worker-blacklist-irdma created
machineconfig.machineconfiguration.openshift.io/99-worker-blacklist-irdma created
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、各ノードのデバッグ Pod でモジュールがロードされていないことを確認します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.3. 永続的な命名規則の作成 リンクのコピーリンクがクリップボードにコピーされました!
場合によっては、再起動後にデバイス名が保持されないことがあります。たとえば、R760xa システムでは、再起動後に Mellanox デバイスの名前が変更される可能性があります。この問題は、MachineConfig
を使用して永続性を設定することで回避できます。
手順
ノードのワーカーノードから MAC アドレス名をファイルに収集し、永続化する必要があるインターフェイスの名前を指定します。この例では、ファイル
70-persistent-net.rules
を使用し、その中に詳細を保存します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow このファイルを改行なしの base64 文字列に変換し、出力を変数
PERSIST
に設定します。PERSIST=`cat 70-persistent-net.rules| base64 -w 0` echo $PERSIST U1VCU1lTVEVNPT0ibmV0IixBQ1RJT049PSJhZGQiLEFUVFJ7YWRkcmVzc309PSJiODozZjpkMjozYjo1MToyOCIsQVRUUnt0eXBlfT09IjEiLE5BTUU9ImliczJmMCIKU1VCU1lTVEVNPT0ibmV0IixBQ1RJT049PSJhZGQiLEFUVFJ7YWRkcmVzc309PSJiODozZjpkMjozYjo1MToyOSIsQVRUUnt0eXBlfT09IjEiLE5BTUU9ImVuczhmMG5wMCIKU1VCU1lTVEVNPT0ibmV0IixBQ1RJT049PSJhZGQiLEFUVFJ7YWRkcmVzc309PSJiODozZjpkMjpmMDozNjpkMCIsQVRUUnt0eXBlfT09IjEiLE5BTUU9ImliczJmMCIKU1VCU1lTVEVNPT0ibmV0IixBQ1RJT049PSJhZGQiLEFUVFJ7YWRkcmVzc309PSJiODozZjpkMjpmMDozNjpkMSIsQVRUUnt0eXBlfT09IjEiLE5BTUU9ImVuczhmMG5wMCIK
$ PERSIST=`cat 70-persistent-net.rules| base64 -w 0` $ echo $PERSIST U1VCU1lTVEVNPT0ibmV0IixBQ1RJT049PSJhZGQiLEFUVFJ7YWRkcmVzc309PSJiODozZjpkMjozYjo1MToyOCIsQVRUUnt0eXBlfT09IjEiLE5BTUU9ImliczJmMCIKU1VCU1lTVEVNPT0ibmV0IixBQ1RJT049PSJhZGQiLEFUVFJ7YWRkcmVzc309PSJiODozZjpkMjozYjo1MToyOSIsQVRUUnt0eXBlfT09IjEiLE5BTUU9ImVuczhmMG5wMCIKU1VCU1lTVEVNPT0ibmV0IixBQ1RJT049PSJhZGQiLEFUVFJ7YWRkcmVzc309PSJiODozZjpkMjpmMDozNjpkMCIsQVRUUnt0eXBlfT09IjEiLE5BTUU9ImliczJmMCIKU1VCU1lTVEVNPT0ibmV0IixBQ1RJT049PSJhZGQiLEFUVFJ7YWRkcmVzc309PSJiODozZjpkMjpmMDozNjpkMSIsQVRUUnt0eXBlfT09IjEiLE5BTUU9ImVuczhmMG5wMCIK
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、マシン設定を作成し、カスタムリソースファイルで base64 エンコードを設定します。
cat <<EOF > 99-machine-config-udev-network.yaml
$ cat <<EOF > 99-machine-config-udev-network.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、クラスターにマシン設定を作成します。
oc create -f 99-machine-config-udev-network.yaml
$ oc create -f 99-machine-config-udev-network.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
machineconfig.machineconfiguration.openshift.io/99-machine-config-udev-network created
machineconfig.machineconfiguration.openshift.io/99-machine-config-udev-network created
Copy to Clipboard Copied! Toggle word wrap Toggle overflow get mcp
コマンドを使用して、マシン設定のステータスを表示します。oc get mcp
$ oc get mcp
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
NAME CONFIG UPDATED UPDATING DEGRADED MACHINECOUNT READYMACHINECOUNT UPDATEDMACHINECOUNT DEGRADEDMACHINECOUNT AGE master rendered-master-9adfe851c2c14d9598eea5ec3df6c187 True False False 1 1 1 0 6h21m worker rendered-worker-4568f1b174066b4b1a4de794cf538fee False True False 2 0 0 0 6h21m
NAME CONFIG UPDATED UPDATING DEGRADED MACHINECOUNT READYMACHINECOUNT UPDATEDMACHINECOUNT DEGRADEDMACHINECOUNT AGE master rendered-master-9adfe851c2c14d9598eea5ec3df6c187 True False False 1 1 1 0 6h21m worker rendered-worker-4568f1b174066b4b1a4de794cf538fee False True False 2 0 0 0 6h21m
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
ノードが再起動し、更新フィールドが false
に戻ったら、デバッグ Pod でデバイスを調べてノードを検証できます。
5.4. NFD Operator の設定 リンクのコピーリンクがクリップボードにコピーされました!
Node Feature Discovery (NFD) Operator は、ノードにハードウェア固有の情報をラベル付けすることで、OpenShift Container Platform クラスター内のハードウェア機能と設定の検出を管理します。NFD は、PCI カード、カーネル、オペレーティングシステムのバージョンなど、ノード固有の属性でホストにラベルを付けます。
前提条件
- NFD Operator がインストールされている。
手順
次のコマンドを実行して、
openshift-nfd
namespace 内の Pod を確認し、Operator がインストールされ、実行されていることを確認します。oc get pods -n openshift-nfd
$ oc get pods -n openshift-nfd
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
NAME READY STATUS RESTARTS AGE nfd-controller-manager-8698c88cdd-t8gbc 2/2 Running 0 2m
NAME READY STATUS RESTARTS AGE nfd-controller-manager-8698c88cdd-t8gbc 2/2 Running 0 2m
Copy to Clipboard Copied! Toggle word wrap Toggle overflow NFD コントローラーを実行している状態で、
NodeFeatureDiscovery
インスタンスを生成し、クラスターに追加します。NFD Operator の
ClusterServiceVersion
仕様では、Operator ペイロードの一部である NFD オペランドイメージなどのデフォルト値が指定されています。次のコマンドを実行してその値を取得します。NFD_OPERAND_IMAGE=`echo $(oc get csv -n openshift-nfd -o json | jq -r '.items[0].metadata.annotations["alm-examples"]') | jq -r '.[] | select(.kind == "NodeFeatureDiscovery") | .spec.operand.image'`
$ NFD_OPERAND_IMAGE=`echo $(oc get csv -n openshift-nfd -o json | jq -r '.items[0].metadata.annotations["alm-examples"]') | jq -r '.[] | select(.kind == "NodeFeatureDiscovery") | .spec.operand.image'`
Copy to Clipboard Copied! Toggle word wrap Toggle overflow オプション: より多くのネットワークアダプター (NVIDIA BlueField DPU など) をサポートするには、デフォルトの
deviceClassWhiteList
フィールドにエントリーを追加します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、'NodeFeatureDiscovery` のインスタンスを作成します。
oc create -f nfd-instance.yaml
$ oc create -f nfd-instance.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
nodefeaturediscovery.nfd.openshift.io/nfd-instance created
nodefeaturediscovery.nfd.openshift.io/nfd-instance created
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
openshift-nfd
namespace 配下の Pod を確認し、インスタンスが起動して実行されていることを確認します。oc get pods -n openshift-nfd
$ oc get pods -n openshift-nfd
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow しばらく待ってから、NFD によってノードにラベルが追加されたことを確認します。NFD のラベルには
feature.node.kubernetes.io
という接頭辞が付いているため、簡単にフィルタリングできます。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 検出されたネットワークデバイスがあることを確認します。
oc describe node | grep -E 'Roles|pci' | grep pci-15b3
$ oc describe node | grep -E 'Roles|pci' | grep pci-15b3 feature.node.kubernetes.io/pci-15b3.present=true feature.node.kubernetes.io/pci-15b3.sriov.capable=true feature.node.kubernetes.io/pci-15b3.present=true feature.node.kubernetes.io/pci-15b3.sriov.capable=true
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.5. SR-IOV Operator の設定 リンクのコピーリンクがクリップボードにコピーされました!
Single Root I/O Virtualization (SR-IOV) は、単一のデバイスを複数の Pod 間で共有できるようにすることで、NVIDIA GPUDirect RDMA のパフォーマンスを向上させます。
前提条件
- SR-IOV Operator がインストールされている。
手順
次のコマンドを実行して、
openshift-sriov-network-operator
namespace 内の Pod を確認し、Operator がインストールされ、実行されていることを確認します。oc get pods -n openshift-sriov-network-operator
$ oc get pods -n openshift-sriov-network-operator
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
NAME READY STATUS RESTARTS AGE sriov-network-operator-7cb6c49868-89486 1/1 Running 0 22s
NAME READY STATUS RESTARTS AGE sriov-network-operator-7cb6c49868-89486 1/1 Running 0 22s
Copy to Clipboard Copied! Toggle word wrap Toggle overflow デフォルトの
SriovOperatorConfig
CR を MLNX_OFED コンテナーで動作させるために、次のコマンドを実行して次の値を更新します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、クラスターにリソースを作成します。
oc create -f sriov-operator-config.yaml
$ oc create -f sriov-operator-config.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
sriovoperatorconfig.sriovnetwork.openshift.io/default created
sriovoperatorconfig.sriovnetwork.openshift.io/default created
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、sriov-operator にパッチを適用し、MOFED コンテナーと連携できるようにします。
oc patch sriovoperatorconfig default --type=merge -n openshift-sriov-network-operator --patch '{ "spec": { "configDaemonNodeSelector": { "network.nvidia.com/operator.mofed.wait": "false", "node-role.kubernetes.io/worker": "", "feature.node.kubernetes.io/pci-15b3.sriov.capable": "true" } } }'
$ oc patch sriovoperatorconfig default --type=merge -n openshift-sriov-network-operator --patch '{ "spec": { "configDaemonNodeSelector": { "network.nvidia.com/operator.mofed.wait": "false", "node-role.kubernetes.io/worker": "", "feature.node.kubernetes.io/pci-15b3.sriov.capable": "true" } } }'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
sriovoperatorconfig.sriovnetwork.openshift.io/default patched
sriovoperatorconfig.sriovnetwork.openshift.io/default patched
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.6. NVIDIA Network Operator の設定 リンクのコピーリンクがクリップボードにコピーされました!
NVIDIA Network Operator は、NVIDIA GPUDirect RDMA ワークロードを有効にするために、NVIDIA ネットワークリソースと、ドライバーやデバイスプラグインなどのネットワーク関連コンポーネントを管理します。
前提条件
- NVIDIA Network Operator がインストールされている。
手順
次のコマンドを実行して、コントローラーが
nvidia-network-operator
namespace で実行されていることを確認し、Network Operator がインストールされ、実行されていることを確認します。oc get pods -n nvidia-network-operator
$ oc get pods -n nvidia-network-operator
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
NAME READY STATUS RESTARTS AGE nvidia-network-operator-controller-manager-6f7d6956cd-fw5wg 1/1 Running 0 5m
NAME READY STATUS RESTARTS AGE nvidia-network-operator-controller-manager-6f7d6956cd-fw5wg 1/1 Running 0 5m
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Operator を実行している状態で、
NicClusterPolicy
カスタムリソースファイルを作成します。実際に選択するデバイスはシステム構成によって異なります。この例では、Infiniband インターフェイスibs2f0
がハードコードされており、共有 NVIDIA GPUDirect RDMA デバイスとして使用されます。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、クラスターに
NicClusterPolicy
カスタムリソースを作成します。oc create -f network-sharedrdma-nic-cluster-policy.yaml
$ oc create -f network-sharedrdma-nic-cluster-policy.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
nicclusterpolicy.mellanox.com/nic-cluster-policy created
nicclusterpolicy.mellanox.com/nic-cluster-policy created
Copy to Clipboard Copied! Toggle word wrap Toggle overflow DOCA/MOFED コンテナーで次のコマンドを実行して、
NicClusterPolicy
を検証します。oc get pods -n nvidia-network-operator
$ oc get pods -n nvidia-network-operator
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow mofed
コンテナーにrsh
で接続し、次のコマンドを実行してステータスを確認します。MOFED_POD=$(oc get pods -n nvidia-network-operator -o name | grep mofed) oc rsh -n nvidia-network-operator -c mofed-container ${MOFED_POD}
$ MOFED_POD=$(oc get pods -n nvidia-network-operator -o name | grep mofed) $ oc rsh -n nvidia-network-operator -c mofed-container ${MOFED_POD} sh-5.1# ofed_info -s
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
OFED-internal-24.07-0.6.1:
OFED-internal-24.07-0.6.1:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ibdev2netdev -v
sh-5.1# ibdev2netdev -v
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
0000:0d:00.0 mlx5_0 (MT41692 - 900-9D3B4-00EN-EA0) BlueField-3 E-series SuperNIC 400GbE/NDR single port QSFP112, PCIe Gen5.0 x16 FHHL, Crypto Enabled, 16GB DDR5, BMC, Tall Bracket fw 32.42.1000 port 1 (ACTIVE) ==> ibs2f0 (Up) 0000:a0:00.0 mlx5_1 (MT41692 - 900-9D3B4-00EN-EA0) BlueField-3 E-series SuperNIC 400GbE/NDR single port QSFP112, PCIe Gen5.0 x16 FHHL, Crypto Enabled, 16GB DDR5, BMC, Tall Bracket fw 32.42.1000 port 1 (ACTIVE) ==> ens8f0np0 (Up)
0000:0d:00.0 mlx5_0 (MT41692 - 900-9D3B4-00EN-EA0) BlueField-3 E-series SuperNIC 400GbE/NDR single port QSFP112, PCIe Gen5.0 x16 FHHL, Crypto Enabled, 16GB DDR5, BMC, Tall Bracket fw 32.42.1000 port 1 (ACTIVE) ==> ibs2f0 (Up) 0000:a0:00.0 mlx5_1 (MT41692 - 900-9D3B4-00EN-EA0) BlueField-3 E-series SuperNIC 400GbE/NDR single port QSFP112, PCIe Gen5.0 x16 FHHL, Crypto Enabled, 16GB DDR5, BMC, Tall Bracket fw 32.42.1000 port 1 (ACTIVE) ==> ens8f0np0 (Up)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow IPoIBNetwork
カスタムリソースファイルを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、クラスターに
IPoIBNetwork
リソースを作成します。oc create -f ipoib-network.yaml
$ oc create -f ipoib-network.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
ipoibnetwork.mellanox.com/example-ipoibnetwork created
ipoibnetwork.mellanox.com/example-ipoibnetwork created
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 他のインターフェイス用に
MacvlanNetwork
カスタムリソースファイルを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、クラスターにリソースを作成します。
oc create -f macvlan-network.yaml
$ oc create -f macvlan-network.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
macvlannetwork.mellanox.com/rdmashared-net created
macvlannetwork.mellanox.com/rdmashared-net created
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.7. GPU Operator の設定 リンクのコピーリンクがクリップボードにコピーされました!
GPU Operator は、NVIDIA ドライバー、GPU のデバイスプラグイン、NVIDIA Container Toolkit、および GPU プロビジョニングに必要なその他のコンポーネントの管理を自動化します。
前提条件
- GPU Operator がインストールされている。
手順
次のコマンドを実行して、Operator Pod が実行されていることを確認し、namespace 配下の Pod を確認します。
oc get pods -n nvidia-gpu-operator
$ oc get pods -n nvidia-gpu-operator
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
NAME READY STATUS RESTARTS AGE gpu-operator-b4cb7d74-zxpwq 1/1 Running 0 32s
NAME READY STATUS RESTARTS AGE gpu-operator-b4cb7d74-zxpwq 1/1 Running 0 32s
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次の例のような GPU クラスターポリシーのカスタムリソースファイルを作成します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow GPU
ClusterPolicy
カスタムリソースが生成されたら、次のコマンドを実行してクラスターにリソースを作成します。oc create -f gpu-cluster-policy.yaml
$ oc create -f gpu-cluster-policy.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
clusterpolicy.nvidia.com/gpu-cluster-policy created
clusterpolicy.nvidia.com/gpu-cluster-policy created
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、Operator がインストールされ、実行されていることを確認します。
oc get pods -n nvidia-gpu-operator
$ oc get pods -n nvidia-gpu-operator
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow オプション: Pod が実行中であることを確認したら、NVIDIA ドライバーの daemonset Pod でリモートシェルを起動し、NVIDIA モジュールがロードされていることを確認します。具体的には、
nvidia_peermem
がロードされていることを確認します。oc rsh -n nvidia-gpu-operator $(oc -n nvidia-gpu-operator get pod -o name -l app.kubernetes.io/component=nvidia-driver)
$ oc rsh -n nvidia-gpu-operator $(oc -n nvidia-gpu-operator get pod -o name -l app.kubernetes.io/component=nvidia-driver) sh-4.4# lsmod|grep nvidia
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
オプション:
nvidia-smi
ユーティリティーを実行して、ドライバーとハードウェアの詳細を表示します。
nvidia-smi
sh-4.4# nvidia-smi
+ 出力例
ドライバーの Pod に接続したまま、
nvidia-smi
コマンドを使用して GPU クロックを最大に設定します。oc rsh -n nvidia-gpu-operator nvidia-driver-daemonset-416.94.202410172137-0-ndhzc
$ oc rsh -n nvidia-gpu-operator nvidia-driver-daemonset-416.94.202410172137-0-ndhzc sh-4.4# nvidia-smi -i 0 -lgc $(nvidia-smi -i 0 --query-supported-clocks=graphics --format=csv,noheader,nounits | sort -h | tail -n 1)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
GPU clocks set to "(gpuClkMin 1740, gpuClkMax 1740)" for GPU 00000000:61:00.0 All done.
GPU clocks set to "(gpuClkMin 1740, gpuClkMax 1740)" for GPU 00000000:61:00.0 All done.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow nvidia-smi -i 1 -lgc $(nvidia-smi -i 1 --query-supported-clocks=graphics --format=csv,noheader,nounits | sort -h | tail -n 1)
sh-4.4# nvidia-smi -i 1 -lgc $(nvidia-smi -i 1 --query-supported-clocks=graphics --format=csv,noheader,nounits | sort -h | tail -n 1)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
GPU clocks set to "(gpuClkMin 1740, gpuClkMax 1740)" for GPU 00000000:E1:00.0 All done.
GPU clocks set to "(gpuClkMin 1740, gpuClkMax 1740)" for GPU 00000000:E1:00.0 All done.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、リソースが利用可能であることをノードの詳細情報で確認します。
oc describe node -l node-role.kubernetes.io/worker=| grep -E 'Capacity:|Allocatable:' -A9
$ oc describe node -l node-role.kubernetes.io/worker=| grep -E 'Capacity:|Allocatable:' -A9
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.8. マシン設定の作成 リンクのコピーリンクがクリップボードにコピーされました!
リソース Pod を作成する前に、ユーザー特権を必要とせずに GPU およびネットワークリソースへのアクセスを提供する machineconfig.yaml
カスタムリソース (CR) を作成する必要があります。
手順
Machineconfig
CR を生成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.9. ワークロード Pod の作成 リンクのコピーリンクがクリップボードにコピーされました!
共有デバイスとホストデバイス用のワークロード Pod を作成するには、このセクションの手順を使用します。
5.9.2. RoCE 上でのホストデバイス RDMA の作成 リンクのコピーリンクがクリップボードにコピーされました!
NVIDIA Network Operator のために、ホストデバイスの Remote Direct Memory Access (RDMA) 用のワークロード Pod を作成し、Pod の設定をテストします。
前提条件
- Operator が実行されていることを確認する。
-
NicClusterPolicy
カスタムリソース (CR) が存在する場合は削除する。
手順
以下に示すように、新しいホストデバイス
NicClusterPolicy
(CR) を生成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを使用して、クラスターに
NicClusterPolicy
CR を作成します。oc create -f network-hostdev-nic-cluster-policy.yaml
$ oc create -f network-hostdev-nic-cluster-policy.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
nicclusterpolicy.mellanox.com/nic-cluster-policy created
nicclusterpolicy.mellanox.com/nic-cluster-policy created
Copy to Clipboard Copied! Toggle word wrap Toggle overflow DOCA/MOFED コンテナーで次のコマンドを使用して、ホストデバイスの
NicClusterPolicy
CR を確認します。oc get pods -n nvidia-network-operator
$ oc get pods -n nvidia-network-operator
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを使用して、リソースがクラスターの
oc describe node
セクションに表示されることを確認します。oc describe node -l node-role.kubernetes.io/worker=| grep -E 'Capacity:|Allocatable:' -A7
$ oc describe node -l node-role.kubernetes.io/worker=| grep -E 'Capacity:|Allocatable:' -A7
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow HostDeviceNetwork
CR ファイルを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを使用して、クラスターに
HostDeviceNetwork
リソースを作成します。oc create -f hostdev-network.yaml
$ oc create -f hostdev-network.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
hostdevicenetwork.mellanox.com/hostdev-net created
hostdevicenetwork.mellanox.com/hostdev-net created
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを使用して、リソースがクラスターの
oc describe node
セクションに表示されることを確認します。oc describe node -l node-role.kubernetes.io/worker=| grep -E 'Capacity:|Allocatable:' -A8
$ oc describe node -l node-role.kubernetes.io/worker=| grep -E 'Capacity:|Allocatable:' -A8
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.9.3. RoCE 上での SR-IOV レガシーモード RDMA の作成 リンクのコピーリンクがクリップボードにコピーされました!
RoCE 上で Single Root I/O Virtualization (SR-IOV) レガシーモードホストデバイス RDMA を設定します。
手順
新しいホストデバイスの
NicClusterPolicy
カスタムリソース (CR) を生成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを使用して、クラスターにポリシーを作成します。
oc create -f network-sriovleg-nic-cluster-policy.yaml
$ oc create -f network-sriovleg-nic-cluster-policy.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
nicclusterpolicy.mellanox.com/nic-cluster-policy created
nicclusterpolicy.mellanox.com/nic-cluster-policy created
Copy to Clipboard Copied! Toggle word wrap Toggle overflow DOCA/MOFED コンテナーで次のコマンドを使用して Pod を検証します。
oc get pods -n nvidia-network-operator
$ oc get pods -n nvidia-network-operator
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
NAME READY STATUS RESTARTS AGE mofed-rhcos4.16-696886fcb4-ds-4mb42 2/2 Running 0 40s mofed-rhcos4.16-696886fcb4-ds-8knwq 2/2 Running 0 40s nvidia-network-operator-controller-manager-68d547dbbd-qsdkf 1/1 Running 13 (4d ago) 4d21h
NAME READY STATUS RESTARTS AGE mofed-rhcos4.16-696886fcb4-ds-4mb42 2/2 Running 0 40s mofed-rhcos4.16-696886fcb4-ds-8knwq 2/2 Running 0 40s nvidia-network-operator-controller-manager-68d547dbbd-qsdkf 1/1 Running 13 (4d ago) 4d21h
Copy to Clipboard Copied! Toggle word wrap Toggle overflow SR-IOV レガシーモードで動作させる必要があるデバイス用の Virtual Function (VF) を生成する
SriovNetworkNodePolicy
CR を作成します。以下の例を参照してください。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを使用して、クラスターに CR を作成します。
注記SR-IOV Global Enable が有効になっていることを確認してください。詳細は、Unable to enable SR-IOV and receiving the message "not enough MMIO resources for SR-IOV" in Red Hat Enterprise Linux を参照してください。
oc create -f sriov-network-node-policy.yaml
$ oc create -f sriov-network-node-policy.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
sriovnetworknodepolicy.sriovnetwork.openshift.io/sriov-legacy-policy created
sriovnetworknodepolicy.sriovnetwork.openshift.io/sriov-legacy-policy created
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 各ノードのスケジューリングが無効になっています。設定を適用するためにノードが再起動します。次のコマンドを使用してノードを表示できます。
oc get nodes
$ oc get nodes
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
NAME STATUS ROLES AGE VERSION edge-19.edge.lab.eng.rdu2.redhat.com Ready control-plane,master,worker 5d v1.29.8+632b078 nvd-srv-32.nvidia.eng.rdu2.dc.redhat.com Ready worker 4d22h v1.29.8+632b078 nvd-srv-33.nvidia.eng.rdu2.dc.redhat.com NotReady,SchedulingDisabled worker 4d22h v1.29.8+632b078
NAME STATUS ROLES AGE VERSION edge-19.edge.lab.eng.rdu2.redhat.com Ready control-plane,master,worker 5d v1.29.8+632b078 nvd-srv-32.nvidia.eng.rdu2.dc.redhat.com Ready worker 4d22h v1.29.8+632b078 nvd-srv-33.nvidia.eng.rdu2.dc.redhat.com NotReady,SchedulingDisabled worker 4d22h v1.29.8+632b078
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ノードが再起動したら、各ノードでデバッグ Pod を開いて、VF インターフェイスが存在することを確認します。以下のコマンドを実行します。
a$ oc debug node/nvd-srv-33.nvidia.eng.rdu2.dc.redhat.com
a$ oc debug node/nvd-srv-33.nvidia.eng.rdu2.dc.redhat.com
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 必要に応じて、2 番目のノードで前のステップを繰り返します。
オプション: 次のコマンドを使用して、リソースがクラスターの
oc describe node
セクションに表示されることを確認します。oc describe node -l node-role.kubernetes.io/worker=| grep -E 'Capacity:|Allocatable:' -A8
$ oc describe node -l node-role.kubernetes.io/worker=| grep -E 'Capacity:|Allocatable:' -A8
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow SR-IOV レガシーモード用の VF の準備が整ったら、
SriovNetwork
CR ファイルを生成します。以下の例を参照してください。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを使用して、クラスターにカスタムリソースを作成します。
oc create -f sriov-network.yaml
$ oc create -f sriov-network.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
sriovnetwork.sriovnetwork.openshift.io/sriov-network created
sriovnetwork.sriovnetwork.openshift.io/sriov-network created
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.10. RDMA 接続の検証 リンクのコピーリンクがクリップボードにコピーされました!
システム間で、特にレガシー Single Root I/O Virtualization (SR-IOV) イーサネットに関して、Remote Direct Memory Access (RDMA) 接続が機能していることを確認します。
手順
次のコマンドを使用して、各
rdma-workload-client
Pod に接続します。oc rsh -n default rdma-sriov-32-workload
$ oc rsh -n default rdma-sriov-32-workload
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
sh-5.1#
sh-5.1#
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを使用して、最初のワークロード Pod に割り当てられた IP アドレスを確認します。この例では、最初のワークロード Pod は RDMA テストサーバーです。
ip a
sh-5.1# ip a
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow この Pod に割り当てられた RDMA サーバーの IP アドレスは、
net1
インターフェイスです。この例では、IP アドレスは192.168.4.225
です。ibstatus
コマンドを実行して、各 RDMA デバイスmlx5_x
に関連付けられているlink_layer
タイプ (Ethernet または Infiniband) を取得します。出力でstate
フィールドを確認することで、すべての RDMA デバイスのステータスもわかります。フィールドにはACTIVE
またはDOWN
のいずれかが表示されます。ibstatus
sh-5.1# ibstatus
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ワーカーノード上の各 RDMA
mlx5
デバイスのlink_layer
を取得するために、ibstat
コマンドを実行します。ibstat | egrep "Port|Base|Link"
sh-5.1# ibstat | egrep "Port|Base|Link"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow RDMA 共有デバイスまたはホストデバイス用のワークロード Pod では、
mlx5_x
という名前の RDMA デバイスがすでに認識されており、通常はmlx5_0
またはmlx5_1
です。RDMA レガシー SR-IOV ワークロード Pod では、どの RDMA デバイスがどの Virtual Function (VF) サブインターフェイスに関連付けられているかを確認する必要があります。この情報は次のコマンドを使用して表示します。rdma link show
sh-5.1# rdma link show
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow この例では、RDMA デバイス名
mlx5_7
がnet1
インターフェイスに関連付けられています。この出力は、次のコマンドで RDMA 帯域幅テストを実行するために使用します。このテストでは、ワーカーノード間の RDMA 接続も検証します。次の
ib_write_bw
RDMA 帯域幅テストコマンドを実行します。/root/perftest/ib_write_bw -R -T 41 -s 65536 -F -x 3 -m 4096 --report_gbits -q 16 -D 60 -d mlx5_7 -p 10000 --source_ip 192.168.4.225 --use_cuda=0 --use_cuda_dmabuf
sh-5.1# /root/perftest/ib_write_bw -R -T 41 -s 65536 -F -x 3 -m 4096 --report_gbits -q 16 -D 60 -d mlx5_7 -p 10000 --source_ip 192.168.4.225 --use_cuda=0 --use_cuda_dmabuf
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ここでは、以下のようになります。
-
mlx5_7
RDMA デバイスを-d
スイッチで渡します。 -
RDMA サーバーを起動するための送信元 IP アドレスは
192.168.4.225
です。 -
--use_cuda=0
、--use_cuda_dmabuf
スイッチは、GPUDirect RDMA の使用を示します。
出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
別のターミナルウィンドウを開き、RDMA テストクライアント Pod として機能する 2 番目のワークロード Pod で、
oc rsh
コマンドを実行します。oc rsh -n default rdma-sriov-33-workload
$ oc rsh -n default rdma-sriov-33-workload
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
sh-5.1#
sh-5.1#
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを使用して、
net1
インターフェイスから RDMA テストクライアント Pod の IP アドレスを取得します。ip a
sh-5.1# ip a
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを使用して、各 RDMA デバイス
mlx5_x
に関連付けられているlink_layer
タイプを取得します。ibstatus
sh-5.1# ibstatus
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow オプション:
ibstat
コマンドを使用して、Mellanox カードのファームウェアバージョンを取得します。ibstat
sh-5.1# ibstat
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow クライアントワークロード Pod が使用する Virtual Function サブインターフェイスに関連付けられている RDMA デバイスを特定するために、次のコマンドを実行します。この例では、
net1
インターフェイスは RDMA デバイスmlx5_2
を使用しています。rdma link show
sh-5.1# rdma link show
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次の
ib_write_bw
RDMA 帯域幅テストコマンドを実行します。/root/perftest/ib_write_bw -R -T 41 -s 65536 -F -x 3 -m 4096 --report_gbits -q 16 -D 60 -d mlx5_2 -p 10000 --source_ip 192.168.4.226 --use_cuda=0 --use_cuda_dmabuf 192.168.4.225
sh-5.1# /root/perftest/ib_write_bw -R -T 41 -s 65536 -F -x 3 -m 4096 --report_gbits -q 16 -D 60 -d mlx5_2 -p 10000 --source_ip 192.168.4.226 --use_cuda=0 --use_cuda_dmabuf 192.168.4.225
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ここでは、以下のようになります。
-
mlx5_2
RDMA デバイスを-d
スイッチで渡します。 -
送信元 IP アドレスは
192.168.4.226
で、RDMA サーバーの送信先 IP アドレスは192.168.4.225
です。 --use_cuda=0
、--use_cuda_dmabuf
スイッチは、GPUDirect RDMA の使用を示します。出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow テストが正常な場合は、期待される BW average と Mpps 単位の MsgRate が表示されます。
ib_write_bw
コマンドが完了すると、サーバー側の出力もサーバー Pod に表示されます。以下の例を参照してください。出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
-
Legal Notice
リンクのコピーリンクがクリップボードにコピーされました!
Copyright © 2025 Red Hat
OpenShift documentation is licensed under the Apache License 2.0 (https://www.apache.org/licenses/LICENSE-2.0).
Modified versions must remove all Red Hat trademarks.
Portions adapted from https://github.com/kubernetes-incubator/service-catalog/ with modifications by Red Hat.
Red Hat, Red Hat Enterprise Linux, the Red Hat logo, the Shadowman logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat Software Collections is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation’s permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.