本教程介绍如何在 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 库(采用完全分片的数据并行 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的以下收费组件:
如需根据您的预计使用量来估算费用,请使用价格计算器。
准备工作
如需获得完成本教程所需的权限,请让您的管理员为您授予项目的以下 IAM 角色:
- Kubernetes Engine Admin (
roles/container.admin) - Compute Admin (
roles/compute.admin) - Storage Admin (
roles/storage.admin) - Artifact Registry Administrator (
roles/artifactregistry.admin) - Cloud Build Editor (
roles/cloudbuild.builds.editor) - Service Account User (
roles/iam.serviceAccountUser) - Service Account Admin (
roles/iam.serviceAccountAdmin) - Project IAM Admin (
roles/resourcemanager.projectIamAdmin) - Service Usage Admin (
roles/serviceusage.serviceUsageAdmin)
如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。
启用所需的 API(如果尚未启用):
启用 API 所需的角色
如需启用 API,您需要拥有
serviceusage.services.enable权限。如果您创建了项目,则可能已经通过 Owner 角色 (roles/owner) 拥有此权限。否则,您可以通过 Service Usage Admin 角色 (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访问令牌。
依次点击您的个人资料 > 设置 > 访问令牌 > +创建新令牌。 - 复制并保存
write访问令牌值。您可以使用此令牌下载基础模型,并在 GKE 缩容 GPU 节点之前将微调的适配器检查点推送到 Hugging Face Hub。
准备环境
如需准备环境,请设置以下环境变量:
替换以下内容:
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)。为尽可能缩短映像拉取延迟时间,请使用您为 YOUR_REGION 指定的同一区域。YOUR_NUMBER_OF_NODES:微调作业中的 A4 虚拟机节点数。对于本多主机教程,其中两个
a4-highgpu-8g实例共包含 16 个 NVIDIA B200 GPU,请将此值设置为2。
在 Autopilot 模式下创建多主机 GKE 集群
在 Autopilot 模式下创建多主机 GKE 集群:
创建 GKE 集群可能需要几分钟才能完成。 如需验证 Google Cloud 是否已完成集群创建,请前往 Google Cloud 控制台中的 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 将Gemma4TextDecoderLayer分片到两个主机上的 16 个 GPU 中:创建
finetune.yamlKubernetesJobSet清单:创建
finetune.py监督式微调脚本:
使用 Docker 和 Cloud Build 创建微调容器
创建 Artifact Registry Docker 代码库:
安装编排多主机工作负载所需的
JobSet自定义资源定义 (CRD):在您之前步骤中创建的
llm-finetuning-gemma目录中,向 Cloud Build 提交容器 build:导出多主机容器映像网址。在本教程的后续步骤中,您将在部署
JobSet清单时使用它:
启动微调工作负载
如需部署和监控分布式微调工作负载,请完成以下步骤:
将环境变量替换为微调清单,以创建微调作业:
由于您的集群以 GKE Autopilot 模式运行,因此预配两个启用 GPU 的 A4 节点并拉取容器映像可能需要几分钟时间。
监控工作器 pod,直到两个 pod 都转换为
Running状态:当 worker 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 上查看微调后的 LoRA 适配器权重和检查点,网址为 https://huggingface.co/YOUR_HF_USERNAME/gemma-31b-text-to-sql。
清理
为避免产生额外费用,请删除在本教程中创建的资源。
删除您的资源
删除微调
JobSet:删除 GKE 集群:
删除 Artifact Registry 代码库: