Kubernetes上で人工知能(AI)および機械学習(ML)モデルのトレーニングと推論を実行する場合、動的なスケールアップとスケールダウンが極めて重要になります。AIモデルのトレーニングでは、データの取り込みに高帯域幅のストレージとネットワークが必要なだけでなく、主にGPUやその他の専用プロセッサによる大規模で高コストなコンピューティングリソースも必要です。事前トレーニング済みモデルを活用する場合でも、本番環境でのモデルサービングやファインチューニングなどのタスクには、一般的なエンタープライズワークロードよりも多くのコンピューティングリソースが必要です。
クラウドネイティブなKubernetesは、迅速にスケールアップおよびスケールダウンできるよう設計されています。また、ハイブリッドおよびマルチクラウド環境全体で、動的なワークロードに対する俊敏性の向上と、コスト効率に優れたリソース利用を実現できるよう設計されています。
このブログでは、多様な環境でAI/MLワークロードを動的にスケーリングし、最適なパフォーマンス、コスト削減、適応性を実現できるよう、Kubernetes上でスケーリングする最も一般的な3つの方法をご紹介します。
Kubernetes上のAI/MLワークロードに対応する3つのスケーリング方式
Kubernetesでワークロードをスケーリングする一般的な3つの方法は、Horizontal Pod Autoscaler(HPA)、Vertical Pod Autoscaler(VPA)、Cluster Autoscalerです。
これら3つの方法について詳しく見ていきます。
- HPA – アプリケーションにインスタンスまたはPodレプリカを追加することに相当し、スケール、キャパシティ、スループットを向上させます。
- VPA – Podのサイズを変更し、コンピューティングとメモリを増強して容量を拡大することに相当します。
- Cluster Autoscaler – Podの現在のリソース需要に応じて、Kubernetesクラスター内のノード数を自動的に増減します。
各モダリティには、モデルのトレーニングと推論においてそれぞれ利点があります。詳しくは、以下のユースケースをご覧ください。
HPAのユースケース
多くの場合、分散AIモデルのトレーニングおよび推論ワークロードは、水平方向にスケーリングできます(つまり、Podを追加してトレーニングプロセスやリクエスト処理を高速化できます)。そのため、これらのワークロードではHPAを活用できます。HPAは、CPUやメモリの使用率などのメトリクスに加え、ワークロードに関連するカスタムメトリクスや外部メトリクスに基づいて、Pod数を増やすことができます。ワークロードが時間の経過とともに変動する場合、HPAはPod数を動的に調整し、リソースを最適に利用できるようにします。
KubernetesでAIワークロードを水平スケーリングする際のもう1つの重要な要素が、負荷分散です。最適なパフォーマンスを確保し、リクエストを適時に処理するには、受信リクエストを複数のインスタンスまたはPodに分散する必要があります。そのため、HPAと組み合わせて使用するのに適したツールの1つが、Ingressコントローラーです。
VPAのユースケース
AIモデルのトレーニングタスクでは、多くの場合、大量のCPU、GPU、メモリリソースが必要になります。VPAは、これらのリソース割り当てを動的に調整できます。これにより、各Podにトレーニングワークロードを効率的に処理するための十分なリソースを確保し、割り当てられたすべてのPodに計算を実行するための十分なコンピューティング能力を持たせることができます。また、大規模モデルのトレーニング中は、メモリ要件が大きく変動する場合があります。VPAは、必要に応じてメモリ割り当てを増やすことで、メモリ不足エラーの防止に役立ちます。
HPAとVPAを併用することは技術的には可能ですが、同じワークロードを異なる方法(水平スケーリングと垂直スケーリング)でスケーリングしようとして競合する可能性があるため、競合を避けるには慎重な設定が必要です。各オートスケーラーの適用範囲を明確に定義し、互いに競合するのではなく補完し合うようにすることが重要です。新たなアプローチとして、両者を異なる範囲で使用する方法があります。たとえば、HPAはワークロードに基づいて複数のPodにわたるスケーリングを行い、VPAはHPAが設定した制限内で各Podのリソース割り当てを微調整します。
Cluster Autoscalerのユースケース
Cluster Autoscalerは、AI/MLワークロードの需要に対応できるよう、クラスタ全体で利用可能なコンピューティング、ストレージ、ネットワークインフラストラクチャのリソースプール全体を動的に調整するのに役立ちます。現在の需要に基づいてクラスタ内のノード数を調整することで、組織はマクロレベルで負荷を分散できます。AI/MLワークロードでは、予測不能な形で大量のコンピューティングリソースが必要になる場合があるため、最適なパフォーマンスを確保するには、この調整が必要です。
HPA、VPA、Cluster Autoscalerにはそれぞれ役割がある
要約すると、Kubernetesのオートスケーリングは、次の3つの方法で機能し、AIワークロードにメリットをもたらします。
- HPAは、変動するリクエストレートへの対応が必要なAIモデルサービングエンドポイントをスケーリングします。
- VPAは、AI/MLワークロードのリソース割り当てを最適化し、過剰にプロビジョニングすることなく、効率的な処理に必要なリソースを各podに確保します。
- Cluster Autoscalerは、リソースを大量に消費するAIジョブを処理できるようにクラスタへノードを追加し、コンピューティング需要が低い場合はノードを削除します。
KubernetesでAI/MLワークロードを管理する際、HPA、VPA、Cluster Autoscalerは相互に補完し合います。Cluster Autoscalerはワークロードの需要を満たすのに十分なノード数を確保し、HPAは複数のPodにワークロードを効率的に分散し、VPAは各Podへのリソース割り当てを最適化します。これらを組み合わせることで、Kubernetes環境のAI/MLアプリケーションに包括的なスケーリングおよびリソース管理ソリューションを提供します。
F5とNGINXがAI/MLワークロードのデリバリー、セキュリティ確保、最適化をどのように支援できるかについて、詳しくは「Power and Protect Your AI Journey」ページをご覧ください。
著者について

関連するブログ記事
チュートリアル:NGINXを使用してアプリケーション向けにOpenTelemetryを構成する
OpenTelemetryを使用してNGINXサーバーの状態と健全性をより明確に把握することで、問題のトラブルシューティングを行い、Webアプリケーションのパフォーマンスを向上できます。
AkitaのNGINX Plus認定モジュールでAPIエンドポイントの問題を特定・修正
Akita SoftwareのAPIオブザーバビリティ向け新しいNGINX Plus Certified Moduleを活用して、APIエンドポイントの問題をより迅速に特定し、修正できます。
JavaプロジェクトをスキャフォールディングしてKubernetesネイティブアプリを構築する方法
Red HatのシニアプリンシパルデベロッパーアドボケイトであるDaniel Oh氏が、Javaプロジェクトをゼロから構築するためのひな形を作成し、Kubernetesネイティブアプリケーションとしてビルドする方法を解説します。
F5 NGINXaaS for Azureのご紹介:Microsoft Azureでネイティブに利用できるSaaS型ロードバランシング
NGINXaaS for Azureは、NGINX PlusをAzureネイティブのSaaSとして利用できるサービスです。NGINXの設定を容易にリフト&シフトできるため、クラウド導入とモダンアプリの展開を加速できます。

SELinuxでNGINXおよびNGINX Plusを使用する
Red Hat Enterprise Linux(RHEL)および関連ディストリビューションでSecurity-Enhanced Linux(SELinux)を有効にすると、デフォルト設定によりNGINXとNGINX Plusの一部の操作が制限されます。この記事では、すべての機能を利用できるようにSELinuxの設定を変更する方法について説明します。
NGINX PlusによるAWS Auto Scalingグループの負荷分散
新しいnginx-asg-sync統合ソフトウェアにより、NGINX PlusはAWS Auto Scalingグループの負荷を直接分散できるため、クラウドでの負荷分散がさらに柔軟になります