本教程介绍如何在多节点 Slurm 集群上微调 Gemma 3 大语言模型 (LLM),该集群使用两个 A4 虚拟机 (VM) 实例。在本教程中,您将执行以下操作:
创建一个自定义映像
配置 RDMA 网络。
运行分布式微调作业。为了实现高效的多节点训练,您可以使用具有完全分片数据并行 (FSDP) 功能的 Hugging Face Accelerate 库。
本教程适用于机器学习 (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 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 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:您的用户 个账号。如需查看示例,请参阅 在 IAM 政策中表示员工池用户。ROLE:您向用户账号授予的 IAM 角色。
- 为您的 Google Cloud 项目启用默认服务账号:
gcloud iam service-accounts enable PROJECT_NUMBER-compute@ \ --project=PROJECT_ID
将 PROJECT_NUMBER 替换为您的项目编号。如需查看项目编号,请参阅 获取现有项目。
- 向默认服务账号授予 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
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)的使用率在整个训练过程中上升并稳定在特定水平。
作业时长:此作业大约需要 1 小时才能完成。
清理
为避免因本教程中使用的资源导致您的 Google Cloud 账号产生费用,请删除包含这些资源的项目,或者保留项目但删除各个资源。
删除 Slurm 集群
如需删除 Slurm 集群,请执行以下操作:
如果您需要删除与项目关联的所有 VPC 网络、防火墙规则、路由器、IP 和子网,请执行以下操作:
删除项目
删除 Google Cloud 项目:
gcloud projects delete PROJECT_ID