このチュートリアルでは、マルチホスト Cloud TPU v6e(Trillium)アクセラレータと vLLM TorchTPU を使用して、Google Kubernetes Engine(GKE)にマルチモーダル Mixture of Experts モデル Gemma 4 26B(google/gemma-4-26B-A4B-it)をデプロイして提供する方法について説明します。ワークロードは 2x4 トポロジの複数の TPU ホストにまたがるため、Kubernetes LeaderWorkerSet API と Ray を使用して、8 つの TPU チップに分散されたテンソル並列推論を調整します。
目標
- GKE クラスタとマルチホスト TPU v6e ノードプールを設定します。
- LeaderWorkerSet を使用してマルチホスト vLLM サーバーをデプロイします。
- テキストとマルチモーダルの推論リクエストを送信する。
- サービング ベンチマーク ワークロードを実行します。
- クリーンアップする。
費用
このドキュメントでは、課金対象である次のGoogle Cloudコンポーネントを使用します。
料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを生成できます。
このドキュメントに記載されているタスクの完了後、作成したリソースを削除すると、それ以上の請求は発生しません。詳細については、クリーンアップをご覧ください。
始める前に
このチュートリアルを使用するには、Hugging Face アクセス トークンが必要です。Hugging Face で無料アカウントに登録できます。アカウントを作成したら、アクセス トークンを生成します。
- [Welcome to Hugging Face] ページで、アカウントのアバターをクリックし、[アクセス トークン] を選択します。
- [アクセス トークン] ページで、[新しいトークンを作成] をクリックします。
- [Read] トークン タイプを選択し、トークンの名前を入力します。
- アクセス トークンが表示されます。トークンを安全な場所に保存します。
このチュートリアルを完了するために必要な権限を取得するには、プロジェクトに対する次の IAM ロールを付与するよう管理者に依頼してください。
- Kubernetes Engine 管理者(
roles/container.admin) - Compute 管理者(
roles/compute.admin) - サービス アカウント ユーザー(
roles/iam.serviceAccountUser)
ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。
環境変数を設定する
環境変数を設定します。
次のように置き換えます。
YOUR_PROJECT_ID: 実際の Google Cloudプロジェクトの ID。YOUR_RESERVATION_NAME: 予約の名前。YOUR_REGION: GKE クラスタをデプロイするリージョン。YOUR_ZONE: TPU v6e ノードプールをデプロイするゾーン。YOUR_CLUSTER_NAME: GKE クラスタの名前。YOUR_HF_TOKEN: Hugging Face アクセス トークン。YOUR_VLLM_TPU_IMAGE: 使用する vLLM TPU イメージ。公開イメージについては、vLLM TorchTPU リポジトリをご覧ください。
GKE クラスタを作成する
GKE クラスタを作成してマルチホスト TPU v6e ノードプールを接続する手順は次のとおりです。
デフォルトのノードプールに
e2-standard-4ノードを使用するリージョン GKE クラスタと、2x4トポロジに配置された 2 つのct6e-standard-4tノード(合計 8 つの TPU チップ)を持つ TPU v6e ノードプールを作成します。デフォルトの GKE マシンタイプ(e2-medium)では、LeaderWorkerSet コントローラに十分な CPU リソースが提供されないため、このチュートリアルではe2-standard-4を指定します。特定の予約を使用する代わりに、次のフラグを渡して、Spot 容量または Flex Start VM を使用してノードプールを作成することもできます。
- Spot VM:
--reservation-affinityフラグと--reservationフラグを--spotに置き換えて、Spot 容量を使用します。Spot 容量を使用するインスタンスは、ノードプールの作成後に作成されるまでに時間がかかることがあり、ワークロードの実行中にプリエンプトされる可能性があります。Pod の作成に時間がかかる場合や、ワークロードが実行中に停止する場合は、これが原因である可能性があります。 - Flex Start VM:
--flex-startを渡して、Flex Start 消費オプションを使用してノードプールをプロビジョニングします。詳細については、TPU と Flex Start VM で小規模なバッチ ワークロードを実行するをご覧ください。
- Spot VM:
クラスタと通信するように
kubectl認証情報を構成します。
認証情報を構成して LeaderWorkerSet をインストールする
マルチホスト デプロイ用にクラスタを準備するには、次の手順を完了します。
Hugging Face トークンをエクスポートし、
hf-secretという名前の Kubernetes Secret を作成します。クラスタに LeaderWorkerSet CustomResourceDefinition とコントローラをインストールします。
マルチホスト vLLM サーバーをデプロイする
ワークロード マニフェスト(gemma4-26b-multihost-v6e-2x4.yaml)は、次の 2 つのリソースを定義します。
2x4TPU スライス内の 2 つのct6e-standard-4tノードにスケジュールされたsize: 2(1 つのリーダー Pod と 1 つのワーカー Pod)を含む LeaderWorkerSet リソース(vllm-tpu-gemma4-26b)。各 Pod は、--tensor-parallel-size=8、--kv-cache-dtype=fp8、--max-model-len=5248、--max-num-seqs=128フラグを使用して Ray と vLLM OpenAI API サーバーを起動する前に、Hugging Face からgoogle/gemma-4-26B-A4B-itモデルの重みをプリフェッチしてインメモリ ボリュームに格納する InitContainer を実行します。- リーダー Pod のポート
8000を公開する ClusterIP Service(vllm-service)。
ワークロードをデプロイしてモニタリングするには、次の手順を完了します。
GitHub から LeaderWorkerSet マニフェストを取得します。
または、次の内容の
gemma4-26b-multihost-v6e-2x4.yamlという名前のファイルを作成します。LeaderWorkerSet マニフェストを適用します。
アプリケーションの起動が完了するまで、リーダー Pod のステータスとログをモニタリングします。
Pod がモデルの重みをプリフェッチし、8 つの TPU チップすべてに 2 ノードの Ray クラスタを形成して、モデルをコンパイルする間、最初のサービス起動には約 9 分かかります。トラフィックを送信する前に、ログに
Application startup completeが報告されるまで待ちます。2 番目のターミナル セッションで、ローカルポート
8000をvllm-serviceに転送します。このターミナル セッションでポート転送を実行したままにします。
推論リクエストを送信する
最初のターミナル セッションに戻り、テキストとマルチモーダル チャットの完了リクエストの両方を使用して、デプロイされたモデルをテストします。
/v1/chat/completionsエンドポイントにテキスト チャット完了リクエストを送信します。画像 URL とテキスト プロンプトの両方を含むマルチモーダル リクエストを送信します。
ベンチマーク ワークロードを実行する
デプロイされたモデルをベンチマークするには、次のコマンドを実行します。
クリーンアップ
このチュートリアルで使用したリソースについて Google Cloud アカウントに継続的な料金が発生しないようにするには、Kubernetes ワークロード、TPU ノードプール、GKE クラスタを削除します。
vLLM サーバーのデプロイと Hugging Face シークレットを削除します。
TPU v6e ノードプールと GKE クラスタを削除します。
2 つ目のターミナル セッションに戻り、ポート転送を停止します。
次のステップ
- vLLM TorchTPU の詳細を確認する。
- Cloud TPU の詳細を確認する。