本教程将向您展示如何在多主机、多 GPU
Google Kubernetes Engine (GKE) Autopilot 集群上微调
Gemma 4
31B 大语言模型 (google/gemma-4-31b-it)。 Google Cloud此集群使用两个 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) 工程师、研究人员、 平台管理员和运维人员,以及将 GKE 集群部署到 Google Cloud 多个主机上以微调 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)
如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。
您也可以通过自定义 角色或其他预定义 角色来获取所需的权限。
安装并初始化 Google Cloud CLI,然后 安装
kubectl。 如果您使用 Cloud Shell,则这两个工具都已预安装。启用所需的 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 集群 的名称。此名称不得超过 40 个字符,并且只能包含小写字母数字字符和连字符。
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:导出多主机容器映像网址。在本教程的后续步骤中部署
JobSet清单时,您将使用该网址:
启动微调工作负载
如需部署和监控分布式微调工作负载,请完成以下步骤:
将环境变量替换为微调清单,以创建微调作业:
由于您的集群在 GKE Autopilot 模式下运行,因此预配两个启用 GPU 的 A4 节点并提取容器映像可能需要几分钟时间。
观察工作器 Pod,直到两个 Pod 都转换为
Running状态:工作器 Pod 转换为
Running后,流式传输训练日志:
监控工作负载
您可以监控 GKE 集群中的 GPU 利用率,以验证两个 A4 主机中的所有 16 个 GPU 是否都在积极处理训练步骤。在浏览器中生成并打开可观测性链接:
监控工作负载时,您会看到以下行为:
- GPU 利用率:对于运行正常的分布式微调作业,您应该会在训练步骤中看到所有 16 个 NVIDIA B200 GPU 的 GPU 利用率上升并稳定在 95%–100% 附近。
- 作业时长:在两个
a4-highgpu-8g节点(16 个 B200 GPU)上, 3 个周期的微调作业大约需要 2 个半小时才能完成。
查看微调的适配器权重
训练完成后,在 Hugging Face Hub 上查看微调的 LoRA 适配器权重和
检查点,网址为
https://huggingface.co/YOUR_HF_USERNAME/gemma-31b-text-to-sql。
清理
为避免产生额外费用,请删除在本教程中创建的资源。
删除您的资源
删除微调
JobSet:删除 GKE 集群:
删除 Artifact Registry 代码库: