このチュートリアルでは、 Google Cloud上のマルチホスト、マルチ GPU Google Kubernetes Engine(GKE)Autopilot クラスタで Gemma 4 31B 大規模言語モデル(google/gemma-4-31b-it)をファインチューニングする方法について説明します。このクラスタは、合計 16 個の NVIDIA B200 GPU を搭載した 2 つの A4(a4-highgpu-8g)仮想マシン(VM)インスタンスを使用します。
このチュートリアルで説明する主なプロセスは次の 3 つです。
- Autopilot モードでマルチホスト GKE クラスタをデプロイします。
- Cloud Build を使用して、必要なファインチューニングの依存関係を含むカスタム コンテナ イメージをビルドします。
- Kubernetes JobSet と Hugging Face Accelerate ライブラリ(Fully Sharded Data Parallel v2(FSDP v2)を使用)を使用して、16 個の GPU すべてで分散マルチホスト ファインチューニング ワークロードをオーケストレートし、チェックポイントを Hugging Face Hub に push します。
このチュートリアルは、 Google Cloud に GKE クラスタをデプロイして複数のホストで LLM をファインチューニングする機械学習(ML)エンジニア、研究者、プラットフォーム管理者、オペレーター、データおよび AI スペシャリストを対象としています。
目標
Hugging Face を使用して Gemma 4 モデルにアクセスします。
環境を準備します。
マルチホスト A4 GKE クラスタを作成してデプロイします。
Kubernetes
JobSetと Hugging Face Accelerate(FSDP v2)を使用して、16 個の GPU で Gemma 4 31B モデルをファインチューニングする。ジョブをモニタリングします。
ファインチューニングされたアダプタの重みを Hugging Face Hub で確認します。
クリーンアップする。
費用
このドキュメントでは、課金対象である次の Google Cloudコンポーネントを使用します。
料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを生成できます。
始める前に
このチュートリアルを完了するために必要な権限を取得するには、プロジェクトに対する次の IAM ロールを付与するよう管理者に依頼してください。
- Kubernetes Engine 管理者(
roles/container.admin) - Compute 管理者(
roles/compute.admin) - ストレージ管理者 (
roles/storage.admin) - Artifact Registry 管理者(
roles/artifactregistry.admin) - Cloud Build 編集者 (
roles/cloudbuild.builds.editor) - サービス アカウント ユーザー(
roles/iam.serviceAccountUser) - サービス アカウント管理者 (
roles/iam.serviceAccountAdmin) - プロジェクト IAM 管理者 (
roles/resourcemanager.projectIamAdmin) - Service Usage 管理者(
roles/serviceusage.serviceUsageAdmin)
ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。
必要な権限は、カスタムロールや他の事前定義ロールから取得することもできます。
必要な API がまだ有効になっていない場合は、有効にします。
API を有効にするために必要なロール
API を有効にするには、
serviceusage.services.enable権限が必要です。プロジェクトを作成した場合は、オーナーロール(roles/owner)を通じてこの権限がすでに付与されている可能性があります。それ以外の場合は、Service Usage 管理者ロール(roles/serviceusage.serviceUsageAdmin)を通じてこの権限を取得できます。ロールを付与する方法を確認する。gcloud services enable compute.googleapis.com
container.googleapis.com artifactregistry.googleapis.com cloudbuild.googleapis.com logging.googleapis.com cloudresourcemanager.googleapis.com servicenetworking.googleapis.com Google Cloud プロジェクトのデフォルトの Compute Engine サービス アカウントを有効にします。
export PROJECT_NUMBER="$(gcloud projects describe "YOUR_PROJECT_ID" --format "value(project_number)")" gcloud iam service-accounts enable "${PROJECT_NUMBER}-compute@developer.gserviceaccount.com" \ --project=YOUR_PROJECT_IDデフォルトの Compute Engine サービス アカウントがコンテナ イメージをビルドしてファインチューニング ワークロードを実行するために必要な最小権限の IAM ロールを付与します。
ROLES=( "roles/artifactregistry.writer" "roles/cloudbuild.builds.builder" "roles/logging.logWriter" "roles/monitoring.metricWriter" "roles/monitoring.viewer" "roles/stackdriver.resourceMetadata.writer" "roles/storage.objectViewer" ) for role in "${ROLES[@]}"; do gcloud projects add-iam-policy-binding YOUR_PROJECT_ID \ --member="serviceAccount:${PROJECT_NUMBER}-compute@developer.gserviceaccount.com" \ --role="${role}" 1>/dev/null done unset ROLESロールがデフォルトの Compute Engine サービス アカウントに付与されていることを確認します。
echo "Displaying roles for ${PROJECT_NUMBER}-compute@developer.gserviceaccount.com:" gcloud projects get-iam-policy YOUR_PROJECT_ID \ --flatten="bindings[].members" \ --filter="bindings.members:serviceAccount:${PROJECT_NUMBER}-compute@developer.gserviceaccount.com" \ --format="table(bindings.role)"ユーザー アカウントのローカル認証情報を作成します。
gcloud auth application-default login
プロジェクトで OS Login を有効にします。
gcloud compute project-info add-metadata \ --metadata=enable-oslogin=TRUE \ --project=YOUR_PROJECT_ID
Hugging Face を使用して Gemma 4 にアクセスする
Hugging Face を使用して Gemma 4 にアクセスする手順は次のとおりです。
- Hugging Face にログインし、Gemma 4 ライセンス契約に同意します。
- Hugging Face
writeアクセス トークンを作成します。
[Your Profile] > [Settings] > [Access tokens] > [+Create new token] の順にクリックします。 writeアクセス トークンの値をコピーして保存します。このトークンを使用して、GKE が GPU ノードをスケールダウンする前に、ベースモデルをダウンロードし、ファインチューニングされたアダプタ チェックポイントを Hugging Face Hub に push します。
環境を準備する
環境を準備するには、次の環境変数を設定します。
次のように置き換えます。
YOUR_PROJECT_ID: GKE クラスタを作成する Google Cloud プロジェクトの ID。
YOUR_CLUSTER_NAME: 作成する GKE クラスタの名前。
YOUR_REGION: GKE クラスタを作成するリージョン。クラスタは、予約が存在するリージョンでのみ作成できます。
YOUR_RESERVATION_NAME: 予約済み容量の識別子。
YOUR_HF_TOKEN: 前のセクションで作成した Hugging Face
writeアクセス トークン。YOUR_ARTIFACT_REGISTRY_LOCATION: Artifact Registry リポジトリを作成する Google Cloud リージョン(例:
us-central1)。イメージの pull レイテンシを最小限に抑えるには、YOUR_REGION で指定したのと同じリージョンを使用します。YOUR_NUMBER_OF_NODES: ファインチューニング ジョブの A4 VM ノードの数。このマルチホスト チュートリアルでは、2 つの
a4-highgpu-8gインスタンスに 16 個の NVIDIA B200 GPU があるため、この値を2に設定します。
Autopilot モードでマルチホスト GKE クラスタを作成する
Autopilot モードでマルチホスト GKE クラスタを作成します。
GKE クラスタの作成が完了するまでに数分かかることがあります。 Google Cloud がクラスタの作成を完了したことを確認するには、 Google Cloud コンソールの [Kubernetes クラスタ] に移動します。
GKE クラスタと通信するように kubectl を構成する
GKE クラスタと通信するように kubectl を構成します。
Hugging Face の認証情報用の Kubernetes Secret を作成する
Hugging Face トークンを保存する Kubernetes Secret を作成します。
ワークロードを準備する
ワークロードを準備する手順は次のとおりです。
ワークロード スクリプトを作成する
ファインチューニング ワークロードで使用する構成ファイルとスクリプトを作成する手順は次のとおりです。
ワークロード スクリプト用のディレクトリを作成します。このディレクトリを作業ディレクトリとして使用します。
cloudbuild.yamlファイルを作成して、Cloud Build でワークロード コンテナ イメージをビルドし、Artifact Registry に push します。Dockerfileファイルを作成して環境を定義し、ファインチューニング ジョブの完了に必要な依存関係をインストールします。accel_fsdp_gemma4_config.yamlファイルを作成します。この構成では、FSDP v2 を使用して、2 台のホストの 16 個の GPU にGemma4TextDecoderLayerをシャーディングするように Hugging Face Accelerate に指示します。finetune.yamlKubernetesJobSetマニフェストを作成します。finetune.py教師ありファインチューニング スクリプトを作成します。
Docker と Cloud Build を使用してファインチューニング コンテナを作成する
Artifact Registry Docker リポジトリを作成します。
マルチホスト ワークロードのオーケストレーションに必要な
JobSetカスタム リソース定義(CRD)をインストールします。前の手順で作成した
llm-finetuning-gemmaディレクトリで、コンテナビルドを Cloud Build に送信します。マルチホスト コンテナ イメージの URL をエクスポートします。この値は、このチュートリアルの後半で
JobSetマニフェストをデプロイするときに使用します。
ファインチューニング ワークロードを開始する
分散ファインチューニング ワークロードをデプロイしてモニタリングする手順は次のとおりです。
ファインチューニング マニフェストに環境変数を代入して、ファインチューニング ジョブを作成します。
クラスタは GKE Autopilot モードで実行されるため、2 つの GPU 対応 A4 ノードのプロビジョニングとコンテナ イメージの pull に数分かかることがあります。
両方の Pod が
Runningステータスに移行するまで、ワーカー Pod を監視します。ワーカー Pod が
Runningに移行したら、トレーニング ログをストリーミングします。
ワークロードをモニタリングする
GKE クラスタ全体の GPU 使用率をモニタリングして、両方の A4 ホストの 16 個の GPU がすべてトレーニング ステップをアクティブに処理していることを確認できます。オブザーバビリティ リンクを生成してブラウザで開きます。
ワークロードをモニタリングすると、次の動作が想定されます。
- GPU 使用率: 分散型ファインチューニング ジョブが正常に実行されている場合、トレーニング ステップ中に 16 個の NVIDIA B200 GPU すべてで GPU 使用率が上昇し、95 ~ 100% 近くで安定することが予想されます。
- ジョブの所要時間: 2 つの
a4-highgpu-8gノード(16 個の B200 GPU)で、3 エポックのファインチューニング ジョブが完了するまでに約 2 時間半かかります。
ファインチューニングされたアダプタの重みを表示する
トレーニングが完了したら、ファインチューニングされた LoRA アダプタの重みとチェックポイントを Hugging Face Hub(https://huggingface.co/YOUR_HF_USERNAME/gemma-31b-text-to-sql)で確認します。
クリーンアップ
追加料金が発生しないようにするには、このチュートリアルで作成したリソースを削除します。
リソースを削除する
ファインチューニング
JobSetを削除します。GKE クラスタを削除します。
Artifact Registry リポジトリを削除します。