Amazon Web Services ブログ
Amazon EKS Hybrid Nodes を活用し、様々な環境にわたって生成 AI 推論を実行する
この記事は Run GenAI inference across environments with Amazon EKS Hybrid Nodes (記事公開日: 2024 年 3 月 19 日) を翻訳したものです。
この記事は、Principal Container Specialist SA である Robert Northard、EKS の Senior Product Manager である Eric Chapman、Senior Specialist Partner SA である Elamaran Shanmugam が執筆しました。
イントロダクション
Amazon Elastic Kubernetes Service (Amazon EKS) Hybrid Nodes は、クラウドとオンプレミスにわたって生成 AI 推論ワークロードを実行する方法を変革します。EKS クラスターをオンプレミスのインフラストラクチャに拡張することで、管理の一貫性と運用の複雑さの軽減を実現しながら AI アプリケーションをデプロイできます。Amazon EKS はマネージドな Kubernetes コントロールプレーンを提供し、EKS Hybrid Nodes を使用すると、オンプレミスのインフラストラクチャをワーカーノードとして Amazon EKS コントロールプレーンに参加させることができます。これにより、オンプレミスで Kubernetes コントロールプレーンを管理する必要がなくなります。EKS Hybrid Nodes を使用すると、単一の EKS クラスター内でクラウドとオンプレミスの両方のキャパシティを活用できます。
EKS Hybrid Nodes は、次に挙げるような多くの AI/ML のユースケースとアーキテクチャを実現できます。
- レイテンシーの影響を受けやすいワークロードをサポートするための、エッジでのリアルタイム推論を含むユーザに近い場所でのサービス実行
- データレジデンシーに関する要件のためにオンプレミスに留まらなければならないデータを使用したモデルのトレーニング
- ナレッジベースを使用した RAG アプリケーションのような、ソースとなるデータに近い場所での推論ワークロードの実行
- ピーク需要時に多くのコンピュートリソースを利用するために AWS クラウドの弾力性を利用
- 既存のオンプレミスハードウェアの利用
本記事では、単一の EKS クラスターを使用し、EKS Hybrid Nodes を活用してオンプレミスで AI 推論を実行し、さらには Amazon EKS Auto Mode を活用して AWS クラウドでも実行する概念実証 (PoC) について説明します。EKS Auto Mode は、コンピューティング、ストレージ、ネットワーキングなどの Kubernetes クラスターの管理を自動化します。EKS Auto Mode の詳細については、Amazon EKS ユーザーガイドをご覧ください。
ソリューション概要
本記事の例における推論ワークロードのため、NVIDIA NIM を通じてモデルをデプロイします。NVIDIA NIM は、GPU を使って AI モデルを実行するために NVIDIA によって最適化されたマイクロサービスです。EKS Hybrid Nodes と EKS Auto Mode の両方を有効化した EKS クラスターを作成し、オンプレミスのマシンをハイブリッドノードとしてクラスターに参加させます。オンプレミスへのデプロイでは、モデルを EKS Hybrid Nodes にデプロイする前に、NVIDIA ドライバーと Kubernetes 用の NVIDIA デバイスプラグインをインストールします。最後に、NVIDIA GPU と AWS Neuron インスタンスに必要なドライバーが事前構成されている EKS Auto Mode のノードにモデルをデプロイします。このウォークスルーには、EKS Hybrid Nodes を実行するためのハイブリッドネットワークと認証の前提条件を確立する手順は含まれていません。これらは Amazon EKS ユーザーガイドに記載されています。
図 1: EKS Hybrid Nodes と AWS リージョンにおける EKS ノードの両方を含む EKS クラスターの概要
上記は、このウォークスルーで使用するアーキテクチャのハイレベルな図を示しています。Amazon Virtual Private Cloud (VPC) には、EKS Auto Mode のワーカーノードをホストする 2 つのパブリックサブネットと 2 つのプライベートサブネットがあります。コントロールプレーンとハイブリッドノード間の通信は、VPC を経由してトランジットゲートウェイまたは仮想プライベートゲートウェイの出入り口を通過し、プライベートなネットワーク接続経由でルーティングされます。EKS Hybrid Nodes は、オンプレミス環境と AWS リージョン間の信頼できるネットワーク接続を必要とします。これは、AWS Site-to-Site VPN、AWS Direct Connect、またはユーザー管理の VPN ソリューションを使用して確立できます。 ルーティングテーブル、セキュリティグループ、ファイアウォールルールを設定して、各環境間の双方向通信を可能にする必要があります。
前提条件
このソリューションを完了するために必要な前提条件は以下のとおりです。
- インターネットへのルートを持つ 2 つのプライベートサブネットと 2 つのパブリックサブネットを備えた Amazon VPC
- オンプレミスネットワークと Amazon VPC 間の AWS Site-to-Site VPN
- オンプレミスノードの場合、VPC CIDR レンジや Kubernetes Service の IPv4 CIDR と重複しない IPv4 RFC-1918 に準拠した CIDR ブロック
- Amazon EKS ユーザーガイドに詳細が記載されている、ファイアウォールルール、ルーティングテーブル、セキュリティグループといった Hybrid Nodes のネットワーキング要件
- マシンイメージに含まれる NVIDIA ドライバーと NVIDIA Container Toolkit と EKS Hybrid Nodes に対応するオペレーティングシステムを実行するオンプレミスのマシン
- NIM へのアクセスに必要な NVIDIA NGC アカウントとAPI キー (NVIDIA のドキュメントを参照してください)
- 以下のツール
ウォークスルー
次のステップでは、このソリューションの概要を説明します。
EKS Hybrid Nodes と EKS Auto Mode を有効化したEKS クラスターの作成
Amazon EKS クラスターの作成および管理のための CLI ツールである eksctl を使用して、EKS Hybrid Nodes と EKS Auto Mode が有効化された EKS クラスターを作成します。
- ClusterConfig ファイルとして
cluster-configuration.yaml
を作成します。このファイルには EKS Auto Mode を有効にするautoModeConfig
と EKS Hybrid Nodes を有効にするremoteNetworkConfig
が含まれています。有効なremoteNetworkConfig
の値については、EKS Hybrid Nodes のドキュメントを参照してください。
- ClusterConfig ファイルを作成した後、以下のコマンドを実行して EKS クラスターを作成します。
- クラスターの状態が
Active
になるのを待ちます。
ハイブリッドノードの準備
- EKS Hybrid Nodes は kube-proxy と CoreDNS を必要とします。以下の
eksctl
コマンドを実行してアドオンをインストールしてください。ハイブリッドノードには自動的に 「eks.amazonaws.com/compute-type: hybrid」というラベルが付与されます。このラベルを使用してハイブリッドノード向け、あるいは別のノードをワークロードのデプロイ対象にすることができます。EKS Hybrid Nodes で Amazon EKS アドオンをデプロイする方法の詳細は「ハイブリッドノードのアドオンを構成する」をご覧ください。
AWS クラウドで少なくとも 1 つの CoreDNS レプリカを実行する場合は、CoreDNS が実行されている VPC およびノードへの DNS トラフィックを許可する必要があります。さらには、オンプレミスのリモート Pod CIDR へは、Amazon VPC のノードからルーティング可能でなければなりません。mixed モードの EKS クラスターの実行に関するガイダンスについては、EKS Hybrid Nodes ユーザーガイドを参照してください。
- オンプレミスのノードを Amazon EKS コントロールプレーンに EKS ハイブリッドノードとして登録できます。そのためには、
nodeadm
という EKS Hybrid Nodes CLI をインストールします。nodeadm によって、マシンを EKS ワーカーノードに変換するために必要なコンポーネントをインストールできます。これらのコンポーネントには kubelet、containerd、aws-iam-authenticator が含まれます。マシンに nodeadm をインストールしてノードをクラスタに接続するには、EKS Hybrid Nodes のドキュメント「ハイブリッドノードを接続する」にある手順に従ってください。 ハイブリッドノードでワークロードを実行する前に、互換性のある Container Network Interface (CNI)ドライバーをインストールしてください。EKS ハイブリッドノードで CNI を設定する手順は「ハイブリッドノードの CNI を設定する」を参照してください。
ノード登録時に、ハイブリッドノードが属するゾーンを指定するために、たとえば topology.kubernetes.io/zone
のようなノードのラベルや Taints を追加するように kubelet の設定を変更できます。ワークロードのスケジューリングのために、接続されている GPU のさまざまな機能を表すラベルを追加することもできます。 GPU と非 GPU のキャパシティが混在する場合、GPU ノードに --register-with-taints=nvidia.com/gpu=Exists:NoSchedule
というTaints を追加することをお勧めします。これにより、GPU ノード上に非 GPU ワークロード (CoreDNS など) がスケジュールされなくなります。nodeadm
を使用する場合の kubelet 構成の変更方法については、EKS Hybrid Nodes のドキュメントをご確認ください。
- 以下の kubectl コマンドを実行して、ノードが接続され
Ready
状態にあることを検証してください。 ハイブリッドノードがReady
になるには、CNI をインストールする必要があります。
Kubernetes 用 NVIDIA デバイスプラグインのインストール
本セクションでは、オンプレミスの EKS ハイブリッドノードに必要な NVIDIA ドライバーと NVIDIA Container Toolkit が設定されていることを前提としています。Kubernetes デバイスプラグインを使用すると、GPU などのシステムハードウェアを kubelet に通信できます。このウォークスルーでは NVIDIA GPU を使用するため、Kubernetes スケジューラーが GPU デバイスを公開できるように、NVIDIA デバイスプラグインをインストールする必要があります。NVIDIA ドライバと NVIDIA Container Toolkit がマシンイメージに含まれておらず、containerd が NVIDIA Container ランタイムを使用できるように設定されていない場合は、代わりに NVIDIA GPU Operator をデプロイできます。この Operator は、NVIDIA デバイスプラグインとともに、これらのコンポーネントを実行時にインストールします。
kubectl
を使用して NVIDIAデバイスプラグインをインストールするには、まずデプロイメントマニフェストをダウンロードします。
最新バージョンについては、NVIDIA デバイスプラグインの GitHub リポジトリを確認してください。
- EKS Auto Mode では、NVIDIA デバイスプラグインをインストールする必要はありません。デバイスプラグインの DaemonSet は、GPU を搭載したハイブリッドノードでのみ実行する必要があります。ラベル
eks.amazonaws.com/compute-type: hybrid
を使用して、.spec.template.spec.nodeSelector
の一部として NVIDIA デバイスプラグインをハイブリッドノードを対象に更新するとともに、GPU ワーカーノードと非 GPU ワーカーノードの混在している場合は、必要に応じて追加のラベルを追加してください。
- マニフェストを適用して NVIDIA デバイスプラグインをインストールします。
- 以下のコマンドを使用して、NVIDIA デバイスプラグインの Pod が実行されていることを確認します。
NVIDIA デバイスプラグインの確認のため kube-system
内の Pod を一覧表示したとき、以下の出力が期待されます。DaemonSet は GPU を搭載したノード上でのみスケジュールされる必要があります。
- GPU ステータスが割り当て可能なノードに表示されているかどうか検証することで、GPU が kubelet に公開されているかどうかを確認できます。
GPU が接続されたノードをリスト表示した場合に予想される割り当て可能なノードの出力以下に示します。
EKS Hybrid Nodes 上での推論のために NVIDIA NIM をデプロイ
- NVIDIA NIM をデプロイする前に、前提条件としてコンテナレジストリと NVIDIA API キーを設定する必要があります。
NGC_API_KEY
をご自身の API キーに置き換えてください。
- 以下のコマンドを実行して NIM Helm チャートをクローンします。
- Helm チャートのオーバーライドを作成します。nodeSelector でハイブリッドノードにデプロイするように設定します。
values.yaml
ファイルのイメージリポジトリを変更することで、異なるモデルをデプロイできます。
このデプロイではモデルキャッシュは使用されていません。スケーリングイベント中のアプリケーションの初期化を高速化するために、モデルキャッシュの使用を検討することをおすすめします。モデルキャッシュを実装するには、適切な CSI ドライバーの構成とストレージインフラストラクチャが必要になります。
サンプルプロンプトを使用したNIM のテスト
- NIM マイクロサービスをテストするには、NIM の Sercice への Kubernetes ポートフォワーディングを構成します。
- 以下の curl コマンドを実行し、出力を確認してください。
期待される応答は以下です。
EKS Hybrid Nodes へのモデルのデプロイが成功しました。 次に、同じ EKS クラスターで実行されている EKS Auto Mode のノードでモデルをデプロイします。
EKS Auto Mode へのデプロイ
EKS ハイブリッドノードで実行する必要のないワークロードをデプロイできます。EKS Auto Mode の組み込みNodePool には GPU ベースのインスタンスが設定されていないため、GPU を持つ NodePool を定義する必要があります。EKS Auto Mode は、NVIDIA GPU と Neuron デバイスとの統合を提供するので、ドライバやデバイスプラグインをインストールする必要がありません。
- 次のコマンドを実行して、
g6
インスタンスファミリーを使用した NodePool を作成します。
ワークロードに特定のネットワーク帯域幅やインスタンス GPU 要件がある場合は、EKS Auto Mode でサポートされている他の Well-Known ラベルを設定することを検討してください。
- 以下のファイルを作成することで、EKS Auto Mode へのデプロイ用に NVIDIA NIM の値を更新します。
- 以下のコマンドを実行して、NIM Helm リリースを新しいバージョンにアップグレードします。
NodeClaims
をリスト表示して、EKS Auto Mode が NVIDIA NIM を提供するためにg6.xlarge
をそのリージョンに起動したことを確認します。
テストするには、前のステップを繰り返し、サンプルのプロンプトで NIM をテストします。
クリーンアップ
本記事で作成したすべての AWS リソースをクリーンアップして長期的なコストを発生させないようにするには、以下のコマンドを実行してください。
前提条件の一部として作成したその他のリソースが不要になった場合は、それらについてもクリーンアップしてください。
結論
本記事では、Amazon EKS Hybrid Nodes が AI ワークロードを実行する方法の例を紹介しました。Amazon EKS Hybrid Nodes は Kubernetes フットプリントを Amazon EKS に統合し、Kubernetes コントロールプレーンの管理の必要性をなくし、運用オーバーヘッドを削減します。
EKS Hybrid Nodes の詳細と使用方法については、EKS Hybrid Nodes ユーザーガイドを参照してください。また、ハイブリッドノードの仕組み、機能、ベストプラクティスについて説明している re:Invent 2024 のセッション (KUB205) もご覧ください。Amazon EKS での AI/ML ワークロードの実行に関するその他のガイダンスは、Data on EKS プロジェクトも参考にできます。
翻訳はソリューションアーキテクトの後藤が担当しました。原文はこちらです。