このチュートリアルでは、MaxText と Cluster Toolkit を使用して、マルチホスト Tensor Processing Unit(TPU)v6e クラスタで教師ありファインチューニング(SFT)を実行する方法について説明します。Cluster Toolkit を使用してマルチホスト トレーニング ワークロードを実行し、結果を Hugging Face 形式にエクスポートしてサービングします。
ワークロードの概要
Cloud TPU と GKE でこの SFT ワークロードを実行するには、次のコンポーネントが必要です。
- モデル: Gemma 4 31B(
google/gemma-4-31b-it)。高度なオープンウェイト モデルです。このチュートリアルでは、モデルの重みを Hugging Face からダウンロードし、MaxText 互換形式に変換して、Cloud TPU v6e(v6e-32)インフラストラクチャを備えた GKE クラスタにデプロイします。 - トレーニング方法: MaxText を使用した SFT。このワークロードは、JAX を使用して Cloud TPU v6e でスケーラブルなファインチューニング パイプラインを実行します。MaxText の組み込み SFT トレーナー(
maxtext.trainers.post_train.sft.train_sft)と指示チューニング データセットを使用して、1,000 ステップにわたってモデル パラメータを最適化します。 - データセットとテンプレート: UltraChat 200k(
HuggingFaceH4/ultrachat_200k)。大規模で高品質なマルチターン ダイアログ データセット。ワークロードは、このデータセットを使用してモデルをファインチューニングし、会話機能と指示に従う機能を改善します。 - インフラストラクチャとフレームワーク: Cloud TPU v6e(
v6e-32、4x8トポロジ)で、Cluster Toolkit を使用して管理される GKE。フレームワークは、JAX バックエンドを備えた MaxText(tpu_post_training:0.2.4)です。
目標
- Cluster Toolkit とその依存関係をインストールします。
- Cluster Toolkit クラスタをデプロイする。
- Hugging Face モデルを MaxText 形式に変換する。
- TPU で SFT トレーニング ワークロードを実行します。
- ファインチューニングされたモデルを Hugging Face 形式に変換してサービングする。
費用
このドキュメントでは、課金対象である次の Google Cloudコンポーネントを使用します。
料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを生成できます。
このドキュメントに記載されているタスクの完了後、作成したリソースを削除すると、それ以上の請求は発生しません。詳細については、クリーンアップをご覧ください。
始める前に
このチュートリアルを使用するには、Hugging Face アクセス トークンが必要です。Hugging Face で無料アカウントに登録できます。アカウントを作成したら、アクセス トークンを生成します。
- [Welcome to Hugging Face] ページで、アカウントのアバターをクリックし、[アクセス トークン] を選択します。
- [アクセス トークン] ページで、[新しいトークンを作成] をクリックします。
- [Read] トークン タイプを選択し、トークンの名前を入力します。
- アクセス トークンが表示されます。トークンを安全な場所に保存します。
- Hugging Face の
google/gemma-4-31b-itモデルカードで、モデルの使用許諾契約に同意します。
このチュートリアルを完了するために必要な権限を取得するには、プロジェクトに対する次の IAM ロールを付与するよう管理者に依頼してください。
-
このチュートリアルを完了するには、次のものが必要です。
- TPU 管理者 (
roles/tpu.admin) - サービス アカウント ユーザー(
roles/iam.serviceAccountUser) - Compute 管理者(
roles/compute.admin) - ストレージ管理者 (
roles/storage.admin) - Kubernetes Engine 管理者(
roles/container.admin) - サービス アカウント管理者 (
roles/iam.serviceAccountAdmin) - プロジェクト IAM 管理者 (
roles/resourcemanager.projectIamAdmin) - Service Usage 管理者(
roles/serviceusage.serviceUsageAdmin)
- TPU 管理者 (
ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。
環境変数を設定する
環境変数を設定します。
次のように置き換えます。
YOUR_PROJECT_ID: 実際の Google Cloudプロジェクトの ID。YOUR_REGION: TPU 予約が配置されているリージョン。クラスタをデプロイするリージョン。YOUR_ZONE: TPU 予約が配置され、クラスタをデプロイするゾーン。YOUR_CLUSTER_NAME: GKE クラスタの名前。名前は、先頭を英小文字にして、英小文字、数字、ハイフンのみで構成される必要があります。長さは 20 文字以下です。これにより、この名前に基づくサービス アカウント ID が 30 文字の制限内に収まります。YOUR_BUCKET_NAME: Cloud Storage バケットのグローバルに一意の名前。YOUR_RESERVATION_NAME: TPU v6e 予約の名前。YOUR_HF_TOKEN: Hugging Face アクセス トークン。
デフォルトでは、スクリプトは MODEL_NAME を gemma4-31b(google/gemma-4-31b-it の MaxText モデル名)に設定します。
Cluster Toolkit の依存関係をインストールする
Linux または macOS のクライアントまたはワークステーションからこのチュートリアルを完了するには、Cluster Toolkit のドキュメントの依存関係をインストールするの手順に沿って操作します。
Cloud Shell を使用している場合は、このセクションをスキップできます。
Cluster Toolkit をインストールする
CLUSTER_TOOLKIT_VERSION(v1.103.0)で定義されている特定のバージョンの Cluster Toolkit のビルド済みバンドルをダウンロードして、現在の作業ディレクトリに展開します。
環境を認証する
Cluster Toolkit がリソースをプロビジョニングし、イメージを Artifact Registry に push できるようにするには、Google Cloud CLI を認証してアプリケーションのデフォルト認証情報を設定します。
Cluster Toolkit クラスタを作成する
32 個の v6e TPU チップを含む Cluster Toolkit クラスタを作成してデプロイするには、次の手順を完了します。
Cloud Storage バケットを作成します。
ブループリント構成をステージングし、サンプルのデプロイ ブループリントを分離された作業ディレクトリにコピーします。
tmp/gke-tpu-v6e-advanced.yamlを更新して、クラスタ ノードプール サービス アカウント(gke-np-sa)に、Cloud Storage バケットにチェックポイントを書き込むためのストレージ管理者ロール(roles/storage.admin)を付与します。システム ノードプールのマシンタイプをe2-standard-8に切り替え、システム ノードプールをターゲット ゾーンに固定して、リージョンのマシンタイプの在庫切れを回避します。gcluster deployコマンドを使用して、ブループリントtmp/gke-tpu-v6e-advanced.yamlを使用して Cluster Toolkit クラスタをデプロイし、--varsフラグを使用して必要な変数を渡します。
モデルを MaxText 形式に変換する
MaxText 形式でモデルをトレーニングするには、Hugging Face 形式から MaxText 形式に変換する必要があります。
以降のコマンドを簡素化するには、
gcluster job configコマンドを使用して、デフォルトのプロジェクト、クラスタ、ロケーションを構成します。gcluster job submitコマンドを使用して、モデルを Hugging Face 形式から MaxText 形式に変換し、Cloud Storage バケットに保存します。このコマンドには
--await-job-completionフラグが含まれています。これは、変換が完了するまで現在のターミナルで待機することを意味します。省略可: ジョブの実行中に変換ログをストリーミングするには、
gclusterを抽出した作業ディレクトリで別のターミナルを開き、gcluster job logsコマンドを実行します。元のターミナルで、変換されたモデルファイルが Cloud Storage バケットで使用可能であることを確認します。
トレーニング ワークロードを開始する
変換プロセスが完了したら、SFT ワークロードを開始します。
このコマンドには
--await-job-completionフラグが含まれています。これは、トレーニング ジョブが完了するまで現在のターミナルで待機することを意味します。省略可: ジョブの実行中にライブ トレーニング ログをストリーミングするには、
gclusterを抽出した作業ディレクトリで別のターミナルを開き、gcluster job logsコマンドを実行します。最初の XLA コンパイルが完了すると、コーディネーターは 1, 000 ステップの実行全体で各ステップの出力の進行状況を
completed step: <step>, seconds: ..., TFLOP/s/device: ..., loss: ...の形式でログに記録します。トレーニング損失は、ステップ 5 の約1.57からステップ 1,000 の約0.82に減少します。次のセクションに進む前に、ステップ 1000 が完了し、./gcluster job listコマンドの出力にsftのステータスがSucceededと表示されるまで待ちます。元のターミナルで、SFT トレーニングのチェックポイントが Cloud Storage バケットに生成されていることを確認します。
トレーニング済みモデルを Hugging Face 形式に変換する
トレーニング ワークロードが完了したら、モデルを Hugging Face 形式に戻します。
このコマンドには
--await-job-completionフラグが含まれています。これは、変換が完了するまで現在のターミナルで待機することを意味します。省略可: ジョブの実行中にライブ変換ログをストリーミングするには、
gclusterを抽出した作業ディレクトリで別のターミナルを開き、gcluster job logsコマンドを実行します。元のターミナルで、最終的な Hugging Face Safetensors の重みが Cloud Storage バケットに生成されていることを確認します。
クリーンアップ
追加料金が発生しないようにするには、gcluster destroy コマンドを使用して、このチュートリアルで作成したリソースを削除します。
次のステップ
- Cloud TPU の詳細については、Cloud TPU の概要をご覧ください。
v6e-32TPU のアーキテクチャと構成の詳細については、TPU v6e をご覧ください。