本教學課程會說明如何在 Google Cloud的多主機、多 GPU Google Kubernetes Engine (GKE) Autopilot 叢集上,微調 Gemma 4 31B 大型語言模型 (google/gemma-4-31b-it)。這個叢集使用兩個 A4 (a4-highgpu-8g) 虛擬機器 (VM) 執行個體,總共配備 16 個 NVIDIA B200 GPU。
本教學課程主要說明下列三種程序:
- 在 Autopilot 模式中部署多主機 GKE 叢集。
- 使用 Cloud Build 建構自訂容器映像檔,其中包含微調作業所需的依附元件。
- 使用 Kubernetes JobSet 和 Hugging Face Accelerate 程式庫,透過 Fully Sharded Data Parallel v2 (FSDP v2) 在所有 16 個 GPU 上調度管理分散式多主機微調工作負載,並將檢查點推送至 Hugging Face Hub。
本教學課程適用於機器學習 (ML) 工程師、研究人員、平台管理員和營運人員,以及在 Google Cloud 上部署 GKE 叢集,以跨多個主機微調 LLM 的資料和 AI 專家。
目標
使用 Hugging Face 存取 Gemma 4 模型。
準備環境。
建立及部署多主機 A4 GKE 叢集。
使用 Kubernetes
JobSet和 Hugging Face Accelerate,透過 FSDP v2 在 16 個 GPU 上微調 Gemma 4 31B 模型。監控工作。
在 Hugging Face Hub 上查看微調的轉接器權重。
清除所用資源。
費用
在本文件中,您將使用下列 Google Cloud計費元件:
如要根據預測用量估算費用,請使用 Pricing Calculator。
事前準備
如要取得完成本教學課程所需的權限,請要求管理員在專案中授予您下列 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) - 服務使用情形管理員 (
roles/serviceusage.serviceUsageAdmin)
如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。
如果尚未啟用必要的 API,請啟用:
啟用 API 時所需的角色
如要啟用 API,您必須具備
serviceusage.services.enable權限。如果您建立了專案,可能已透過「擁有者」角色 (roles/owner) 取得這項權限。否則,您可以透過「服務使用管理員」角色 (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 登入功能:
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存取權杖。
依序點按「你的個人資料」>「設定」>「存取權杖」>「+ 建立新權杖」。 - 複製並儲存
write存取權杖值。您可以使用這個權杖下載基礎模型,並在 GKE 縮減 GPU 節點前,將微調的轉接程式檢查點推送至 Hugging Face Hub。
準備環境
如要準備環境,請設定下列環境變數:
更改下列內容:
YOUR_PROJECT_ID:您要在 Google Cloud 專案中建立 GKE 叢集,請輸入該專案的 ID。
YOUR_CLUSTER_NAME:要建立的 GKE 叢集名稱。
YOUR_REGION:要建立 GKE 叢集的區域。您只能在預留項目所在的區域建立叢集。
YOUR_RESERVATION_NAME:預留容量的 ID。
YOUR_HF_TOKEN:您在前一節中建立的 Hugging Face
write存取權杖。YOUR_ARTIFACT_REGISTRY_LOCATION:要建立 Artifact Registry 存放區的 Google Cloud 區域 (例如
us-central1)。如要盡量縮短映像檔提取延遲時間,請使用您為 YOUR_REGION 指定的相同區域。YOUR_NUMBER_OF_NODES:微調作業中的 A4 VM 節點數量。在本多主機教學課程中,兩個
a4-highgpu-8g執行個體共用 16 個 NVIDIA B200 GPU,因此請將這個值設為2。
在 Autopilot 模式中建立多主機 GKE 叢集
在 Autopilot 模式中建立多主機 GKE 叢集:
建立 GKE 叢集可能需要幾分鐘的時間。 如要確認 Google Cloud 已完成叢集建立作業,請前往 Google Cloud 控制台的「Kubernetes clusters」(Kubernetes 叢集)。
設定 kubectl 與 GKE 叢集通訊
設定 kubectl,與 GKE 叢集通訊:
為 Hugging Face 憑證建立 Kubernetes Secret
建立 Kubernetes Secret 來儲存 Hugging Face 權杖:
準備工作負載
如要準備工作負載,請執行下列操作:
建立工作負載指令碼
如要建立微調工作負載使用的設定檔和指令碼,請完成下列步驟:
為工作負載指令碼建立目錄。將這個目錄當做目前使用的目錄。
建立
cloudbuild.yaml檔案,使用 Cloud Build 建構工作負載容器映像檔,並將其推送至 Artifact Registry:建立
Dockerfile檔案來定義環境,並安裝完成微調作業所需的依附元件:建立
accel_fsdp_gemma4_config.yaml檔案。這項設定會指示 Hugging Face Accelerate 使用 FSDP v2,在兩部主機的 16 個 GPU 中分片Gemma4TextDecoderLayer:建立
finetune.yamlKubernetesJobSet資訊清單:建立
finetune.py監督式微調指令碼:
使用 Docker 和 Cloud Build 建立微調容器
建立 Artifact Registry Docker 存放區:
安裝編排多主機工作負載所需的
JobSet自訂資源定義 (CRD):在您先前步驟中建立的
llm-finetuning-gemma目錄中,將容器建構作業提交至 Cloud Build:匯出多主機容器映像檔網址。在本教學課程的後續步驟中,您將部署
JobSet資訊清單時使用:
啟動微調工作負載
如要部署及監控分散式微調工作負載,請完成下列步驟:
將環境變數代入微調資訊清單,建立微調工作:
由於叢集是在 GKE Autopilot 模式下執行,因此佈建兩個啟用 GPU 的 A4 節點,以及提取容器映像檔可能需要幾分鐘的時間。
觀察 worker Pod,直到兩個 Pod 都轉換為
Running狀態:工作站 Pod 轉換為
Running後,請串流訓練記錄:
監控工作負載
您可以監控 GKE 叢集的 GPU 使用率,確認兩個 A4 主機的所有 16 個 GPU 都正在積極處理訓練步驟。產生並在瀏覽器中開啟可觀測性連結:
監控工作負載時,請注意下列行為:
- GPU 使用率:對於運作正常的分散式微調工作,您應該會看到所有 16 個 NVIDIA B200 GPU 的使用率在訓練步驟中上升,並穩定維持在 95% 至 100% 左右。
- 工作時間:在兩個
a4-highgpu-8g節點 (16 個 B200 GPU) 上,3 個訓練週期的微調工作大約需要 2.5 小時才能完成。
查看微調的轉接程式權重
訓練完成後,您可以在 Hugging Face Hub (https://huggingface.co/YOUR_HF_USERNAME/gemma-31b-text-to-sql) 上查看微調的 LoRA 轉接器權重和檢查點。
清除所用資源
為避免產生額外費用,請刪除在本教學課程中建立的資源。
刪除資源
刪除微調作業
JobSet:刪除您的 GKE 叢集:
刪除 Artifact Registry 存放區: