この記事では、Azure Kubernetes Service (AKS) クラスターで GPU ノードを使用するワークロードを効率的に実行する方法について説明します。 適切な SKU を選択し、GPU ノードを使用して機械学習モデルをトレーニングし、GPU ノードを使用して AKS で推論を実行する方法について説明します。
シナリオ
GPU ワークロードは、実行にコストがかかる場合があります。 不要なコストを回避するには、AKS クラスターに GPU ベースのノードをデプロイするタイミングを把握してください。
GPU は、グラフィックス、AI、機械学習、特殊なタスク用に構築されており、コンピューティング集中型のワークロードに最適です。 CPU は複雑なロジックと分岐を効果的に管理します。 GPU はスループット用に最適化されています。 単純な算術演算とベクトル演算を効率的に処理できます。
AKS ワークロードに GPU を使用するタイミングを決定するには、GPU の最適化とコンピューティング強度を理解する必要がありますが、他の要因も考慮する必要があります。 AKS ワークロードの GPU 使用率に関するより良い分析情報を得るために、AKS クラスター内の GPU ノードのメリットを得る次のワークロードの例を検討してください。
データ サイエンスと分析
GPU を使用して、データ サイエンス ワークフローでのデータ前処理、特徴エンジニアリング、およびモデル トレーニングを高速化できます。 GPU を効率よく使用するには、RAPIDS、Dask GPU などのフレームワークを、Pandas や Scikit-learn などの一般的なデータ処理ライブラリに拡張します。
オープンソース ソフトウェア (OSS) で高速化された SQL クエリ エンジンと、BlazingSQL と HeavyDB などの列形式データベースでは、GPU を使用して、大規模データセットでクエリや分析を迅速に実行します。
機械学習とディープ ラーニング
TensorFlow、 や PyTorch などの一般的な機械学習とディープ ラーニング フレームワークでは、トレーニングや推論タスクを高速化できるため、GPU のメリットがあります。
ディープ ラーニング モデルには複雑なニューラル ネットワークがあります。 GPU での並列処理により、モデルの計算が高速化されます。 GPU は、ディープ ラーニングの中核となる操作である、非常に効率的な行列の乗算と畳み込みがあります。
GPU を使用して、画像分類、物体検出、自然言語処理、音声認識などのタスクを高速化することもできます。
コンピュータ ビジョンと画像処理
コンピューター ビジョン タスクは、視覚的なデータを解釈して意味のある情報を抽出します。 これらのタスクは、AI を利用したアプリケーション、自律走行車、医療画像、監視システム、拡張現実で急速に普及しています。 GPU は並列処理を使用するため、オブジェクト検出、画像分類、特徴抽出などのタスクの大規模な画像データと複雑な計算を効率的に処理できます。
ビデオ処理とストリーミング
ビデオは企業で急速に普及しているため、組織には CPU ではなく GPU を搭載したハードウェアが必要です。 コード変換、エンコード、ストリーミングなどのビデオ処理ワークロードは、特に高解像度コンテンツまたは 4K コンテンツがある場合、コンピューティング集中型です。 GPU は、スポーツ イベントや企業ビデオのストリーミングなど、さまざまなアプリケーションで高パフォーマンスかつ低遅延の短いビデオ エクスペリエンスを提供する効率的なプラットフォームを提供します。
GPU 対応エージェント ノードは、グラフィックス集中型タスクを GPU にオフロードするため、仮想デスクトップ環境で豊富なカスタマー エクスペリエンスを提供します。 GPU で高速化されたビデオ エンコードとデコード機能は、リアルタイムのビデオ ストリーミング、ビデオコード変換、ビデオ分析の向上に役立ちます。
オブジェクト検出、物体追跡、画像またはビデオ処理などのコンピューター ビジョン タスクを高速化するには、OpenCV、OpenCL、NVIDIA CUDA、NVIDIA cuDNN などのフレームワークを使用できます。
ゲーム プラットフォームとクラウド ゲーム サービスは、高品質のグラフィックスとスムーズなゲームプレイ エクスペリエンスを提供するために GPU に依存しています。
ハイ パフォーマンス コンピューティング
ハイ パフォーマンス コンピューティング (HPC) アプリケーションでは、多くの場合、複雑なシミュレーション、数値分析、科学計算が必要です。 これらのタスクをすばやく実行するには、GPU を使用して複数のコア間でワークロードを並列化できます。 大規模な並列処理能力を必要とする HPC アプリケーションの例としては、科学シミュレーション、天気予報、計算流体力学、分子モデリングなどがあります。 GPU は並列計算に最適であり、HPC ワークロードを大幅に高速化します。 科学的および研究主導型の取り組みには GPU のメリットがあります。
HPC アプリケーションを高速化するために、NVIDIA CUDA、OpenCL、OpenACC などのフレームワークには、GPU 対応の API とライブラリがあります。
ゲノム解析とバイオインフォマティクス
ゲノム分析やバイオインフォマティクス アプリケーションなどの健康と生命科学のワークロードは、ますます一般的になっています。 これらのワークロードには、DNA 配列やタンパク質構造などの遺伝子データの処理が含まれており、配列のアラインメント、バリアント呼び出し、ゲノム データ マイニングには、複雑なアルゴリズムが必要です。 GPU を使用すると、研究者がデータを処理し、分析情報をより迅速に発見できるように、ゲノム分析ワークフローが迅速化されます。
AKS クラスターに GPU ノードをデプロイする前に、コストへの影響を考慮してください。 コンピューター ビジョン、ビデオ処理、HPC、ゲノム分析タスクなどのコンピューティング集中型タスクに対する GPU 最適化について説明します。 GPU リソースと AKS クラスターの CPU リソースを比較する場合は、これらの要因を考慮してください。
生成 AI モデル
OpenAI GPT、Meta Llama、Falcon、Mistral などの大規模な言語モデル (LLM) は、GPU 並列処理機能を利用できます。 これらのモデルで GPU を使用して、パフォーマンスを向上させます。
GPU を使用すると、複雑な計算や大量のデータを含むトレーニング タスクと推論タスクを高速化できます。 GPU には並列処理機能があり、特定のモデルの大規模な計算タスクを、同時に実行される小さなサブタスクに分割します。 このプロセスにより、迅速に結果が得られ、パフォーマンスが向上します。
多くの場合、言語モデルには、複数のレイヤーとパラメーターを持つ複雑なニューラル ネットワークがあり、計算需要が増加する可能性があります。 GPU は、行列の乗算や畳み込みなど、言語処理の主要な操作を高速化し、トレーニングと推論の時間を短縮します。
GPU は、会話インターフェイスとテキスト生成を備える LLM ベースのアプリケーションを処理するのに十分なメモリ容量、帯域幅、処理能力を提供します。 たとえば、GPU の機能強化により、チャットボットや AI アシスタントからの応答速度が加速化されます
すべてのワークロードが GPU 対応エージェント ノードの利点を得られるわけではありません。場合によっては、CPU で十分です。 たとえば、主に入力と出力にバインドされているワークロードや、大量の計算を必要としないワークロードは、GPU では改善されない可能性があります。
顧客事例
多くの Microsoft のお客様は、GPU ワークロードを利用して、お客様のためにイノベーションを起こしています。 次に例を示します。
Mr. Turing という AI 企業は、AI と AKS を使用して会社情報のロックを解除して保持し、検索可能にしています。
OriGen では、Azure AI インフラストラクチャを使用して、エネルギー貯蔵所のシミュレーションを 1,000 倍に高速化しました。
Sensyne Health は、Microsoft HPC と AI テクノロジを使用してコロナの問題に対して国民ヘルス サービスを支援します。
Constellation Clearsight は、Azure Machine Learning からの画像に対する自動機械学習を使用して、電気インフラストラクチャの検査を強化しました。
GPU ワークロードのデプロイのベスト プラクティス
AKS には、GPU 対応の Linux および Windows ノード プールとワークロードをデプロイするためのさまざまなオプションが用意されています。 GPU ワークロードの円滑な運用を確保するには、次のベスト プラクティスに従います。
Linux ワークロード デプロイ
サポートされている GPU 対応仮想マシン (VM) を使用してノード プールを作成し、NVIDIA デバイスプラグインを手動でインストールし、GPU 対応 Linux ノード プールをデプロイします。 このメソッドでは、GPU を追加するための既存のノード プールは更新されません。
Azure でサポートされている GPU 対応 VM を表示します。 AKS ノード プールには、最小サイズである Standard_NC6s_v3 に使用が推奨されます。 AKS は、AMD GPU に基づく NVv4 シリーズはサポートしません。
Azure Linux GPU 対応ノード プールを使用する場合の制限事項について説明します。 自動セキュリティ パッチは適用されず、クラスターのデフォルトの動作はアンマネージドです。
GPU 対応ノード プールでワークロードをスケジュールする場合は、Kubernetes ノード セレクター、Node Affinity、Taints と Tolerations を使用します。
Windows ワークロードのデプロイ
サポートされている GPU 対応 VMでノード プールを作成し、GPU 対応 Windows ノード プールをデプロイします。 AKS は、自動でドライバと必要な NVIDIA コンポーネントをインストールします。 このメソッドでは、GPU を追加するための既存のノード プールは更新されません。
サポートされている GPU 対応 VM が選択されると、AKS は自動で、適切な NVIDIA CUDA または GRID ドライバを自動インストールします。 一部のワークロードは、特定のドライバに依存しており、デプロイに影響を与える場合があります。 NC シリーズと ND シリーズ VM サイズの場合、AKS は、CUDA ドライバをインストールします。 NV シリーズ VM サイズの場合、AKS は GRID ドライバをインストールします。
Azure でサポートされている GPU 対応 VM を表示します。 AKS ノード プールには、最小サイズである Standard_NC6s_v3 に使用が推奨されます。 AKS は、AMD GPU に基づく NVv4 シリーズはサポートしません。
Windows ノード プールを使用する場合の制限事項について説明します。 Kubernetes バージョン 1.28 以降では、Windows GPU はサポートされていません。
GPU 対応ノード プールでワークロードをスケジュールする場合は、Kubernetes ノード セレクター、Node Affinity、Taints と Tolerations を使用します。
Note
Windows GPU はプレビュー機能です。 WindowsGPUPreview
機能フラグを 登録する必要があります。
NVIDIA GPU 演算子
NVIDIA GPU 演算子は、Kubernetes クラスター内の GPU リソースを効率的にデプロイおよび管理するために使用できるツールです。 演算子を使用して、ソフトウェア コンポーネントのインストール、構成、およびメンテナンスを自動化できます。 このアプローチにより、AI や機械学習のワークロードなど、要求の厳しいワークロードに NVIDIA GPU を最適に使用できます。
NVIDIA GPU 演算子は、Kubernetes 用の NVIDIA デバイス プラグイン や NVIDIAコンテナ ランタイムなど GPU デプロイに必要なすべての NVIDIA ソフトウェア コンポーネントを自動管理します。 演算子がドライバを自動的にインストールします。 詳細については、「NVIDIA の概要」を参照してください。
高度な GPU ワークロードの制御と柔軟性を高める必要がある場合は、AKS 上の GPU 対応ノードで NVIDIA GPU オペレーターを使用します。 NVIDIA GPU 演算子は、Windows GPU をサポートしていません。
次のベスト プラクティスを検討してください。
NVIDIA GPU 演算子を使用して、ドライバのバージョンの選択やタイム スライスなどの高度な GPU 構成を行います。
GPU 演算子を使用する前に、ドライバの自動インストールをスキップします。
クラスター オートスケーラーで GPU 演算子を使用する場合は、最小カウントを 1 に設定します。
Note
GPU 演算子を使用する場合、Microsoft は、ノード イメージのデプロイの一部として NVIDIA ドライバのメンテナンスと互換性をサポートまたは管理しません。
LLM 向け GPU ワークロード デプロイ
Kbernetes AI ツールチェーン オペレーター (KAITO) は、Kubernetes クラスターでオープンソースの LLM (Falcon や Llama2 など) を実行する方法を簡略化する Kubernetes 演算子です。 AKS クラスターには、AKSのマネージド アドオンとして、KAITO をデプロイできます。 KAITO は、Karpenter を使用して、自動プロビジョニングを行い、選択したモデルに用のワークスペース カスタム リソース定義の仕様に基づき GPU ノードをデプロイします。 KAITO は、LLM に対してエンドポイントとして推論サーバーを作成し、全体的なオンボード時間を短縮するため、インフラストラクチャの設定や維持ではなく、機械学習の運用を行えます。
機械学習の運用を改善するために、KAITO には次の機能があります。
コンテナー イメージの管理: コンテナー イメージを使用して LLM を管理します。 KAITO には HTTP サーバーが用意されているため、サポートされているモデル ライブラリを使用して推論を呼び出せます。
GPU ハードウェア構成: KAITO には、モデルの要件に基づいて自動的に適用されるプリセット構成が用意されています。 GPU ハードウェアに合わせてデプロイ パラメーターを手動調整する必要はありません。
GPU ノードの自動プロビジョニング: KAITO はモデルの要件に基づいて GPU ノードを自動的にプロビジョニングし、分散推論を構成するために低コストの GPU VM サイズを推奨します。
Microsoft アーティファクト レジストリとの統合: LLM ライセンスで許可されている場合、KAITO はパブリック アーティファクト レジストリでモデル イメージをホストできます。 この方法により、サポートされているモデルへのアクセスとデプロイが簡略化されます。 KAITO リポジトリでサポートされていない MIT または Apache2 ライセンスを持つオープン ソース モデルの場合は、新しいモデルのオンボードのために要求を送信できます。
KAITO の詳細については、次のリソースを参照してください。
- KAITO オープンソース プロジェクトの詳細
- KAITO を使用して AKS に AI モデルをデプロイする
- オープンソース KAITO を使用して言語モデルを微調整する
- Terraform を使用して AKS に KAITO をデプロイする
ワークロードとクラスターのスケーリング
AI と機械学習のシナリオでは、トレーニング ワークロードと事前トレーニング済みモデルを使用した推論を区別する必要があります。 機械学習モデルを構築してトレーニングするには、ディープ ラーニングと AI 計算の並列化用に設計された GPU コンピューティングの使用を検討してください。 トレーニングでは、多くの場合、データの並列処理で高い精度を実現するために、GPU 間で大量のデータを段階的にスケーリングし、分散する必要があります。
モデル シャーディングは、モデル トレーニングのステージを分割するために使用できる一般的で高度な手法です。 GPU を個別のタスクに割り当てて、その使用を最大化できます。 GPU は、Azure 上の NV シリーズまたは ND シリーズの VM など、HPC ワークロードをスケールアップおよびスケールアウトできます。 この機能は、高いリソース使用量を維持し、時間とコストのかかる機械学習トレーニング プロセスのユーザー介入を減らすのに役立ちます。
または、事前トレーニング済みのオープン ソース AI モデルと機械学習モデルを推論にのみ使用することもできます。 LLM をゼロから構築してトレーニングする場合と比較して、Llama、Falcon、Mistral などの一般的なモデルを、より迅速かつコスト効率の高いオプションとして使用されます。 詳細については、「AKS の言語モデル」を参照してください。
推論に事前トレーニング済みモデルを使用すると、処理するデータの量に応じて、動的で変動するリソース使用量が発生する場合があります。 選択したモデルを介してライブ データを実行すると、モデルのサイズと要件に応じてトラフィックの急増する場合があります。 推論プロセス全体を通じて、許容できる低レベルの遅延を維持する必要があります。 GPU を効果的に使用して高パフォーマンスと低遅延を実現するには、KAITO がサポートするモデルを使用して分散推論を実行します。 この方法では、コンピューティング オプションを拡張して、それぞれ 1 つまたは 2 つの GPU を持つ GPU カウントの低い SKU を含め、Azure リージョン間で高可用性を提供し、維持費用を削減します。
GPU ワークロードのコスト管理
GPU によってコストが増加する場合があります。 ワークロードを適切に監視して、GPU コストの原因を理解し、最適化できる項目を特定します。 コストの可視性を高めるには、AKS コスト分析アドオンを使用します。
次のシナリオでは、コストの可視性のメリットがあります。
GPU 対応 VM サイズのコスト
GPU 対応の適切な VM サイズを選択して、GPU の実行コストを最適化します。 日単位のコストは、選択した VM サイズによって異なる場合があります。 A100 GPU はコストがかかります。 ワークロードに特定の要件がない限り、A100 GPU の使用を避ける必要があります。 AKS コスト分析では、各 VM の 1 日あたりのコストが表示され、GPU 対応 VM で実行される各ワークロードの関連コストが内訳されます。 このデータを使用して、適切な VM サイズがあるかどうか、またはコスト効率の高いオプションが必要かどうかを評価します。
アイドル コスト
GPU 対応ノード プールを作成すると、GPU ワークロードを実行しない場合でも、Azure リソースのコストが発生します。 アイドル コストは、ワークロードが使用しない利用可能なリソース容量のコストを表します。 未使用のノードが複数ある場合、このコストはすぐに加算されます。 高いアイドル コストを回避するには、ワークロードの実行時にのみノード プールを作成し、ワークロードを実行しない場合は、クラスター停止機能などの方法を使用します。 AKS コスト分析では、各ノードのアイドル コストが表示されます。
オーバープロビジョニングと過小使用
オーバープロビジョニングは、ポッドに必要以上に多くのリソースを割り当てる場合です。 オーバープロビジョニングは、リソースの無駄と過小使用につながります。 余分なリソースは、使用しない場合でも、ノード用に予約されたままです。 オーバープロビジョニングを減らすには、仮想ポッドオートスケーラーを使用して、以前の使用パターンに基づいて正確な要求と制限を設定します。
ワークロードで GPU が完全に使用されていない場合は、過小使用が発生する場合があります。 高度な GPU 共有とパーティション分割の手法を検討してください。 複数のノードを使用するのではなく、1 つのノードとパーティション分割を使用すると GPU 使用率を最大化できます。 これらの手法は、ワークロードごとに適切な量の GPU アクセラレーションを割り当てるのに役立ちます。これにより、使用を強化し、デプロイの運用コストを削減できます。
AKS での Linux GPU ワークロードのデプロイでは、複数インスタンス GPU がサポートされます。 この機能を使用して、NVIDIA A100 GPU を最大 7 つの独立したインスタンスにパーティション分割します。 各インスタンスには、独自のメモリとストリーム マルチプロセッサがあります。
NVIDIA では、タイムスライスやマルチプロセス サービスの実装など、他のパーティション分割手法がサポートされています。 これらの構成を手動適用するには、NVIDIA GPU 演算子を使用します。
高度なシナリオでは、ノードでのリソース ビンのパッキングを改善できます。 スケジューラの構成を設定し、2 つ目のスケジューラを実行できます。 既定の AKS スケジューラとは異なるワークロード配置戦略を使用するように、セカンダリ スケジューラを構成して維持します。 詳細については、「Kubernetes で複数スケジューラを構成する」を参照してください。
共同作成者
この記事は、Microsoft によって保守されています。 当初の寄稿者は以下のとおりです。
プリンシパル作成者:
- Ayobami Ayodeji | シニア プログラム マネージャー
その他の共同作成者:
- Steve Buchanan | プリンシパル プログラム マネージャー
- Sachi Desai | 製品マネージャー
- Ally Ford | プロダクト マネージャー 2
- Paolo Salvatori | プリンシパル サービス エンジニア
- Erin Schaffer | コンテンツ開発者 2
公開されていない LinkedIn プロフィールを見るには、LinkedIn にサインインしてください。
次のステップ
- KAITO を使用して、独自の AI モデルを AKS 上のインテリジェント アプリに搭載する
- KAITO を使用して AKS に AI モデルをデプロイする
- AKS 上に OpenAI を使用するアプリケーションをデプロイする
- Terraform を使用して AKS に KAITO をデプロイする
- ALK または Arc 対応 Kubernetes クラスターに Azure Machine Learning 拡張機能をデプロイする
- Azure のモデル カタログとコレクションについて確認する
- AKS 上の Windows ノード プールに GPU を使用する
- AKS で GPU を使用する