本教程介绍如何在 Gemma 3 大语言模型 (LLM) 上微调 多节点 Slurm 集群,该集群使用两个 A4 虚拟机 (VM) 实例。在本教程中,您将执行以下操作:
创建一个自定义映像。
配置 RDMA 网络。
运行分布式微调作业。为了实现高效的多节点训练,您将使用 Hugging Face Accelerate 库和完全分片数据并行 (FSDP)。
本教程适用于机器学习 (ML) 工程师、平台管理员和运维人员,以及对使用 Slurm 作业调度功能处理微调工作负载感兴趣的数据和 AI 专家。
目标
使用 Hugging Face 访问 Gemma 3。
准备环境。
创建 A4 Slurm 集群。
准备工作负载。
运行微调作业。
监控作业。
清理。
费用
在本文档中,您将使用的以下收费组件: Google Cloud
- Compute Engine
- Google Kubernetes Engine (GKE) Enterprise edition
- Filestore
- Cloud Storage
- Cloud Logging
您可使用 价格计算器 根据您的预计使用情况来估算费用。
准备工作
- 登录您的 Google Cloud 账号。如果您是新手 Google Cloud, 请创建一个账号来评估我们的产品在 实际场景中的表现。新客户还可获享 $300 赠金,用于 运行、测试和部署工作负载。
-
安装 Google Cloud CLI。
-
如果您使用的是外部身份提供方 (IdP),则必须先使用联合身份登录 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 项目名称。
-
验证是否已为您的 Google Cloud 项目启用结算功能。
启用必需的 API:
启用 API 所需的角色
如需启用 API,您需要拥有
serviceusage.services.enable权限。如果您已创建项目,则可能已通过 Owner 角色 (roles/owner) 拥有此权限。否则,您可以通过 Service Usage Admin 角色 (roles/serviceusage.serviceUsageAdmin) 获得此权限。 了解如何授予角色。gcloud services enable compute.googleapis.com file.googleapis.com logging.googleapis.com cloudresourcemanager.googleapis.com servicenetworking.googleapis.com
-
安装 Google Cloud CLI。
-
如果您使用的是外部身份提供方 (IdP),则必须先使用联合身份登录 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 项目名称。
-
验证是否已为您的 Google Cloud 项目启用结算功能。
启用必需的 API:
启用 API 所需的角色
如需启用 API,您需要拥有
serviceusage.services.enable权限。如果您已创建项目,则可能已通过 Owner 角色 (roles/owner) 拥有此权限。否则,您可以通过 Service Usage Admin 角色 (roles/serviceusage.serviceUsageAdmin) 获得此权限。 了解如何授予角色。gcloud services enable compute.googleapis.com file.googleapis.com logging.googleapis.com cloudresourcemanager.googleapis.com servicenetworking.googleapis.com
-
为您的用户账号授予角色。对以下每个 IAM 角色运行以下命令一次:
roles/compute.admin, roles/iam.serviceAccountUser, roles/file.editor, roles/storage.admin, roles/serviceusage.serviceUsageAdmingcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE
替换以下内容:
PROJECT_ID:您的项目 ID。USER_IDENTIFIER:您的用户账号的标识符。 例如,myemail@example.com。ROLE:您授予用户账号的 IAM 角色。
- 为您的 Google Cloud 项目启用默认服务帐号:
gcloud iam service-accounts enable PROJECT_NUMBER-compute@developer.gserviceaccount.com \ --project=PROJECT_ID
将 PROJECT_NUMBER 替换为您的项目编号。如需查看您的 项目编号,请参阅 获取现有项目。
- 向默认服务账号授予 Editor 角色 (
roles/editor):gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com" \ --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
read访问令牌。 点击您的个人资料 > 设置 > 访问令牌 > +创建新令牌复制并保存
read access令牌值。您将在本教程的后面部分用到该值。
安装 Cluster Toolkit
如需详细了解如何使用 gcluster 和管理集群,请参阅 Cluster Toolkit 概览。
准备 Cluster Toolkit 版本:
下载版本:
定义
gcluster路径:
准备环境
如需准备环境,请按照以下步骤操作:
设置默认环境变量:
替换以下内容:
YOUR_PROJECT_ID:您要在其中创建 Cloud Storage 存储桶的 Google Cloud 项目的 ID。YOUR_ZONE:预留所在的可用区。YOUR_REGION:预留所在的区域。RESERVATION_NAME:您要用于创建 Slurm 集群的预留的网址或名称。YOUR_CLUSTER_NAME:您要创建的 Slurm 集群的名称。YOUR_GCS_BUCKET:Cloud Storage 存储桶的名称,需遵循 存储桶命名要求。YOUR_HF_TOKEN:您在上一个部分中创建的 Hugging Face 访问令牌。
创建 Cloud Storage 存储桶:
创建 A4 Slurm 集群
如需创建 A4 Slurm 集群,请按照以下步骤操作:
创建
a4high-slurm-deployment.yaml文件:准备清单:
创建 Terraform 清单:
修补清单:
部署集群:
gcluster deploy命令是一个包含两个阶段的过程,如下所示:第一阶段构建预先安装了所有软件的自定义映像,此过程最多可能需要 45 分钟才能完成。
第二阶段使用该自定义映像部署集群。此过程通常比第一阶段花费的时间更少。
如果第一阶段成功,但第二阶段失败,您可以尝试跳过第一阶段,再次部署 Slurm 集群:
准备工作负载
如需准备工作负载,请按照以下步骤操作:
创建工作负载脚本
如需创建微调工作负载将使用的脚本,请按照以下步骤操作:
如需设置 Python 虚拟环境,请创建包含以下内容的
install_environment.sh文件:如需为微调作业指定配置,请创建包含以下内容的
accelerate_config.yaml文件:如需为要在 Slurm 集群上运行的作业指定任务,请创建包含以下内容的
submit.slurm文件:如需为微调作业指定依赖项,请创建包含以下内容的
requirements.txt文件:如需为作业指定说明,请创建包含以下内容的
train.py文件:
将脚本上传到 Slurm 集群
如需将您在上一个部分中创建的脚本上传到 Slurm 集群,请按照以下步骤操作:
通过检索集群的登录节点的名称来设置
LOGIN_NODE变量:LOGIN_NODE变量存储的值类似于${CLUSTER_NAME}-login-001。将脚本上传到登录节点的主目录:
连接到 Slurm 集群
连接到登录节点,并将 Hugging Face 令牌传播到新会话:
安装框架和工具
连接到登录节点后,设置包含所需依赖项的 Python 虚拟环境:
启动微调工作负载
如需启动微调工作负载,请按照以下步骤操作:
将作业提交给 Slurm 调度程序并收集任务 ID:
在 Slurm 集群中的登录节点上,您可以通过检查在
home目录中创建的输出文件来监控作业的进度:如果作业成功启动,
.err文件会显示一个进度条,该进度条会随着作业的进度而更新。
监控工作负载
您可以监控 Slurm 集群中 GPU 的使用情况,以验证微调作业是否高效运行。为此,请在浏览器中打开以下链接:
https://console.cloud.google.com/monitoring/metrics-explorer?project=PROJECT_ID&pageState=%7B%22xyChart%22%3A%7B%22dataSets%22%3A%5B%7B%22timeSeriesFilter%22%3A%7B%22filter%22%3A%22metric.type%3D%5C%22agent.googleapis.com%2Fgpu%2Futilization%5C%22%20resource.type%3D%5C%22gce_instance%5C%22%22%2C%22perSeriesAligner%22%3A%22ALIGN_MEAN%22%7D%2C%22plotType%22%3A%22LINE%22%7D%5D%7D%7D
监控工作负载时,您可以看到以下内容:
GPU 使用率:对于运行正常的微调作业,您可以预期在整个训练过程中,所有 16 个 GPU(集群中每个虚拟机有 8 个 GPU)的使用率都会上升并稳定在特定水平。
作业时长:作业大约需要一小时才能完成。
清理
为避免因本教程中使用的资源导致您的 Google Cloud 账号产生费用,请删除包含这些资源的项目,或者保留项目但删除各个资源。
删除 Slurm 集群
如需删除 Slurm 集群,请执行以下操作:
如果您需要删除与项目关联的所有 VPC 网络、防火墙规则、路由器、IP 和子网,请执行以下操作:
删除项目
删除 Google Cloud 项目:
gcloud projects delete PROJECT_ID