本教程介绍如何在 Google Cloud上的多节点、多 GPU GKE 集群中微调 Gemma 3 大语言模型 (LLM)。此集群使用包含 8 个 NVIDIA B200 GPU 的 A4 虚拟机 (VM) 实例。
本教程中介绍的两个主要流程如下:
- 使用 GKE Autopilot 部署高性能 GKE 集群。在此部署过程中,您将创建一个预先安装了必要软件的自定义虚拟机映像。
- 部署集群后,您可以使用本教程随附的一组脚本来运行分布式微调作业。该作业利用了 Hugging Face Accelerate 库。
本教程适用于机器学习 (ML) 工程师、研究人员、平台管理员和运维人员,以及对在 Google Cloud 上部署 GKE 集群以训练 LLM 感兴趣的数据和 AI 专家。
目标
使用 Hugging Face 访问 Gemma 3 模型。
准备环境。
创建并部署 A4 GKE 集群。
使用 Hugging Face Accelerate 库和完全分片数据并行处理 (FSDP) 来微调 Gemma 3 模型。
监控作业。
清理。
费用
在本文档中,您将使用 Google Cloud的以下收费组件:
如需根据您的预计使用情况来估算费用,请使用价格计算器。
准备工作
-
安装 Google Cloud CLI。
-
配置 gcloud CLI 以使用您的联合身份。
如需了解详情,请参阅使用联合身份登录 gcloud CLI。
-
如需初始化 gcloud CLI,请运行以下命令:
gcloud init -
选择或创建项目所需的角色
- 选择项目:选择项目不需要特定的 IAM 角色,您可以选择已获授角色的任何项目。
-
创建项目:如需创建项目,您需要拥有 Project Creator 角色 (
roles/resourcemanager.projectCreator),该角色包含resourcemanager.projects.create权限。了解如何授予角色。
-
创建 Google Cloud 项目:
gcloud projects create PROJECT_ID
将
PROJECT_ID替换为您要创建的 Google Cloud 项目的名称。 -
选择您创建的 Google Cloud 项目:
gcloud config set project PROJECT_ID
将
PROJECT_ID替换为您的 Google Cloud 项目名称。
启用所需的 API:
启用 API 所需的角色
如需启用 API,您需要拥有
serviceusage.services.enable权限。如果您创建了项目,则可能已经通过 Owner 角色 (roles/owner) 获得了此权限。否则,您可以通过 Service Usage Admin 角色 (roles/serviceusage.serviceUsageAdmin) 获得此权限。了解如何授予角色。gcloud services enable compute.googleapis.com
container.googleapis.com file.googleapis.com logging.googleapis.com cloudresourcemanager.googleapis.com servicenetworking.googleapis.com -
向您的用户账号授予角色。对以下每个 IAM 角色运行以下命令一次:
roles/compute.admin, roles/iam.serviceAccountUser, roles/cloudbuild.builds.editor, roles/artifactregistry.admin, roles/storage.admin, roles/serviceusage.serviceUsageAdmingcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE
替换以下内容:
PROJECT_ID:您的项目 ID。USER_IDENTIFIER:您的用户 个账号。如需查看示例,请参阅 在 IAM 政策中表示员工池用户。ROLE:您向用户账号授予的 IAM 角色。
- 为您的 Google Cloud 项目启用默认服务账号:
export PROJECT_NUMBER="$(gcloud projects describe "PROJECT_ID" --format "value(project_number)")" gcloud iam service-accounts enable "${PROJECT_NUMBER}-compute@ \ --project=PROJECT_ID
- 向默认服务账号授予 Editor 角色 (
roles/editor):gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:PROJECT_NUMBER-compute@" \ --role=roles/editor
- 为您的用户账号创建本地身份验证凭据:
gcloud auth application-default login
- 为项目启用 OS Login:
gcloud compute project-info add-metadata --metadata=enable-oslogin=TRUE
- 登录或创建 Hugging Face 账号。
使用 Hugging Face 访问 Gemma 3
如需使用 Hugging Face 访问 Gemma 3,请执行以下操作:
- 登录 Hugging Face
- 创建 Hugging Face
write访问令牌。
依次点击您的个人资料 > 设置 > 访问令牌 > +创建新令牌 - 复制并保存
write access令牌值。您将在本教程的后面部分使用该地址。
准备环境
如需准备环境,请设置以下内容:
替换以下内容:
PROJECT_ID:您要在其中创建 GKE 集群的 Google Cloud 项目 的名称。RESERVATION:预留容量的标识符。CLUSTER_NAME:要创建的 GKE 集群的名称。CLUSTER_REGION:您要在其中创建 GKE 集群的区域。您只能在预留所在的区域中创建集群。HF_TOKEN:您在上一部分中创建的 Hugging Face 访问令牌。ARTIFACT_REPO_LOCATION:您要在其中创建 Artifact Registry 代码库的位置。
在 Autopilot 模式下创建 GKE 集群
如需在 Autopilot 模式下创建 GKE 集群,请运行以下命令:
创建 GKE 集群可能需要一些时间才能完成。如需验证 Google Cloud 是否已完成集群创建,请前往 Google Cloud 控制台中的 Kubernetes 集群。
为 Hugging Face 凭据创建 Kubernetes Secret
如需为 Hugging Face 凭据创建 Kubernetes Secret,请按以下步骤操作:
配置
kubectl以与您的 GKE 集群通信:创建一个 Kubernetes Secret 来存储您的 Hugging Face 令牌:
准备工作负载
如需准备工作负载,请执行以下操作:
创建工作负载脚本
如需创建微调工作负载使用的脚本,请执行以下操作:
为工作负载脚本创建目录。将此目录用作工作目录。
创建
cloudbuild.yaml文件以使用 Google Cloud Build。此文件会创建工作负载容器并将其存储在 Artifact Registry 中:创建一个
Dockerfile文件来执行微调作业:创建
accel_fsdp_gemma3_config.yaml文件。此配置文件指示 Hugging Face Accelerate 将调节作业拆分到多个 GPU 上。创建
finetune.yaml文件:创建
finetune.py文件:
使用 Docker 和 Cloud Build 创建微调容器
创建 Artifact Registry Docker 代码库:
在您之前创建的
llm-finetuning-gemma目录中,运行以下命令以创建微调映像并将其推送到 Artifact Registry。导出图片网址。您将在本教程的后续步骤中使用它:
启动微调工作负载
如需启动微调工作负载,请执行以下操作:
应用微调清单以创建微调作业:
由于您使用的是 GKE Autopilot 模式下的集群,因此启动启用 GPU 的节点可能需要几分钟时间。
通过运行以下命令来监控作业:
通过运行以下命令来检查作业的日志:
作业资源会下载模型数据,然后在所有 8 个 GPU 上对模型进行微调。下载大约需要 5 分钟才能完成。 下载完成后,微调过程大约需要 2 小时 30 分钟才能完成。
监控工作负载
您可以监控 GKE 集群中 GPU 的使用情况,以验证微调作业是否在高效运行。为此,请在浏览器中打开以下链接:
监控工作负载时,您可以看到以下内容:
- GPU 用量:对于运行良好的微调作业,您应该会看到所有 8 个 GPU 的用量在整个训练过程中上升并稳定在高水平。
- 作业时长:作业大约需要 10 分钟才能在指定的 A4 集群上完成。
清理
为避免因本教程中使用的资源导致您的 Google Cloud 账号产生费用,请删除包含这些资源的项目,或者保留项目但删除各个资源。
删除您的资源
如需删除微调作业,请运行以下命令:
如需删除 GKE 集群,请运行以下命令:
删除项目
删除 Google Cloud 项目:
gcloud projects delete PROJECT_ID