本教程介绍了如何在 Google Cloud上的 Google Kubernetes Engine (GKE) 上部署和应用 Llama 3.1 405B (nvidia/Llama-3.1-405B-Instruct-FP8),这是一个量化为 FP8 的 4050 亿参数指令调优模型。该部署使用 Cluster Toolkit、两个 A4 (a4-highgpu-8g) 虚拟机 (VM) 实例(总共 16 个 NVIDIA B200 GPU)、NVIDIA Dynamo 以及采用单主机预填充解码 (PD) 解耦的 SGLang 服务框架。
在本教程中介绍的部署配置中,您将使用 Cluster Toolkit 在标准模式下预配 GKE 集群。该集群包含两个通过 GPUDirect 远程直接内存访问 (RDMA) 网络连接的 a4-highgpu-8g 节点。然后,您可以使用 Grove 组调度安装 KAI 调度器和 NVIDIA Dynamo 平台。最后,您将部署一个 DynamoGraphDeployment 自定义资源,该资源通过张量并行和 FP8 KV 缓存,将预填充和解码分离到两个单主机八 GPU 工作器中。
目标
- 安装 Cluster Toolkit,并在标准模式下预配一个双节点 A4 GKE 集群。
- 在集群上安装 KAI 调度器和 NVIDIA Dynamo 平台,并启用 Grove 组调度。
- 部署一个 PD 分离式 SGLang 推理服务器,其中包含一个单主机 A4 预填充工作器和一个单主机 A4 解码工作器。
- 向 Dynamo 前端路由器发送对话补全请求。
- 运行服务基准工作负载。
- 清理已部署的资源。
费用
在本文档中,您将使用Google Cloud的以下收费组件:
如需根据您的预计使用量来估算费用,请使用价格计算器。
准备工作
为本教程设置环境:
- 安装并初始化 Google Cloud CLI,然后安装
kubectl和 Helm(3.10 或更高版本)。如果您使用 Cloud Shell,则这些工具已预安装。 - 如果您是在 Linux 或 macOS 工作站(而非 Cloud Shell)中运行本教程,请安装所需的Cluster Toolkit 依赖项,例如 Terraform 和 Git。
在 Google Cloud 项目中启用 Kubernetes Engine API、Compute Engine API、Cloud Storage API、Identity and Access Management API、Cloud Resource Manager API 和 Service Usage API:
获取 Hugging Face 访问令牌
您需要拥有 Hugging Face 访问令牌才能使用本教程。您可以在 Hugging Face 注册免费账号。拥有账号后,生成访问令牌:
- 在欢迎使用 Hugging Face 页面上,点击您的账号头像,然后选择访问令牌。
- 在访问令牌页面上,点击创建新令牌。
- 选择读取令牌类型,然后输入令牌名称。
- 系统会显示您的访问令牌。将令牌保存在安全的位置。
所需的角色
如需获得完成本教程所需的权限,请让您的管理员为您授予项目的以下 IAM 角色:
- Kubernetes Engine Admin (
roles/container.admin) - Compute Admin (
roles/compute.admin) - Storage Admin (
roles/storage.admin) - Project IAM Admin (
roles/resourcemanager.projectIamAdmin) - Service Account Admin (
roles/iam.serviceAccountAdmin) - Service Account User (
roles/iam.serviceAccountUser) - Service Usage Consumer (
roles/serviceusage.serviceUsageConsumer)
如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。
设置环境变量
导出您在本教程中使用的环境变量:
替换以下内容:
YOUR_PROJECT_ID:您的 Google Cloud项目的 ID。YOUR_REGION:A4 容量所在的区域以及您要部署集群的区域,例如us-central1。YOUR_ZONE:A4 容量所在的可用区,例如us-central1-b。YOUR_CLUSTER_NAME:GKE 集群和 Cluster Toolkit 部署的名称。请使用不超过 20 个字符的名称,以便生成的节点池服务账号 ID (YOUR_CLUSTER_NAME-gke-np-sa) 保持在 30 个字符的 Identity and Access Management (IAM) 限制范围内。YOUR_RESERVATION_NAME:A4 预留的名称。YOUR_BUCKET_NAME:存储 Cluster Toolkit 的 Terraform 状态的 Cloud Storage 存储桶的全球唯一名称。YOUR_HF_TOKEN:您的 Hugging Face 访问令牌。
创建 GKE 集群
下载 Cluster Toolkit,并在标准模式下预配一个 GKE 集群,该集群具有两个 a4-highgpu-8g 节点、GPUDirect RDMA 网络和 DRA 支持:
登录 Google Cloud CLI 并为 Terraform 生成应用默认凭证:
下载并解压缩
CLUSTER_TOOLKIT_VERSION(v1.104.0) 中指定的版本的预构建 Cluster Toolkit 软件包:如果您在 macOS 或
arm64工作站上运行此命令,请将OS="mac"或ARCH="arm64"设置为与您的平台匹配。如需存储 Cluster Toolkit 部署的 Terraform 状态,请创建一个启用了对象版本控制的 Cloud Storage 存储桶:
为两个
a4-highgpu-8g节点创建cluster-toolkit/examples/gke-a4/gke-a4-deployment.yaml部署配置文件:默认情况下,部署文件配置为使用特定预留。如果您没有特定预留,则可以在部署集群之前更新
cluster-toolkit/examples/gke-a4/gke-a4-deployment.yaml,以使用其他使用选项,例如 Spot 虚拟机或灵活启动型虚拟机。如需了解配置说明,请参阅 GKE 使用选项。切换到
cluster-toolkit目录,使用gcluster deploy命令部署 GKE 集群,然后返回到工作目录:创建集群大约需要 20 到 30 分钟。如果您在不使用
--auto-approve标志的情况下运行./gcluster deploy,则在系统提示时输入a即可应用建议的更改。配置
kubectl凭据以与您的集群通信:
安装 KAI 调度器和 NVIDIA Dynamo
通过创建 Hugging Face Secret 并安装 KAI 调度器和 NVIDIA Dynamo 平台(采用 Grove 帮派调度)来准备集群:
创建一个名为
hf-secret的 Kubernetes Secret,用于存储您的 Hugging Face 访问令牌:下载 NVIDIA Dynamo 平台 Helm chart (
v1.5.0),安装 KAI 调度器,然后安装启用了 Grove 的 Dynamo 平台:
部署单主机分离式 SGLang 服务器
工作负载清单 (llama3.1-405b-singlehost-a4.yaml) 定义了一个 Kubernetes ResourceClaimTemplate (all-mrdma),该模板通过 DRA 分配节点的**多 NIC** RDMA 设备 (mrdma.google.com),以及一个启用了 Grove 组调度的 NVIDIA Dynamo DynamoGraphDeployment (llama3-405b-a4-disagg)。部署包括以下内容:
- 前端 (
Frontend):运行一个路由器副本,用于接受客户端请求、发现已注册的预填充和解码工作器,以及协调解耦请求路由。 - 预填充工作器 (
Prefill):在一个a4-highgpu-8g节点上运行单主机工作器,该节点配备 8 个 NVIDIA B200 GPU。启动时,Pod 会获取 NCCL/gIB 环境,将nvidia/Llama-3.1-405B-Instruct-FP8检查点从 Hugging Face Hub 下载到节点的本地 NVMe SSD,并使用以下标志在--disaggregation-mode prefill中启动python3 -m dynamo.sglang:--tensor-parallel-size 8--kv-cache-dtype fp8_e4m3--context-length 16384--mem-fraction-static 0.85
- 解码工作器 (
Decode):在第二个a4-highgpu-8g节点上运行单主机工作器,该节点配备 8 个 NVIDIA B200 GPU。启动时,Pod 会将模型权重缓存在节点的本地 NVMe SSD 上,并使用以下标志在--disaggregation-mode decode中启动python3 -m dynamo.sglang:--tensor-parallel-size 8--kv-cache-dtype fp8_e4m3--context-length 16384--mem-fraction-static 0.85
部署和监控解耦推理服务器:
下载
llama3.1-405b-singlehost-a4.yaml工作负载清单:或者,创建一个名为
llama3.1-405b-singlehost-a4.yaml的文件,其中包含以下内容:将工作负载清单应用到您的集群:
如需监控权重下载和服务器初始化,请列出集群中的 Pod,并流式传输预填充和解码 Pod 的日志:
将
YOUR_POD_NAME替换为kubectl get pods输出中的预填充 Pod 或解码 Pod 的名称。首次运行时,下载 405B FP8 模型权重并初始化 SGLang 服务器大约需要 10 到 20 分钟。在发送任何请求之前,请等待前端、预填充和解码 Pod 在
kubectl get pods的READY列中显示1/1:NAME READY STATUS RESTARTS AGE llama3-405b-a4-disagg-0-decode-tgl7q 1/1 Running 0 15m llama3-405b-a4-disagg-0-frontend-wrxq5 1/1 Running 0 15m llama3-405b-a4-disagg-0-prefill-67h5s 1/1 Running 0 15m
发送推理请求
向已部署的 Llama 3.1 405B 服务发送对话补全请求:
将本地端口
8000转发到llama3-405b-a4-disagg-frontend服务:让端口转发在此终端会话中运行,或在后台运行该命令。
在第二个终端会话中,向
/v1/chat/completions端点发送对话补全请求:
运行基准工作负载
使用 sglang.bench_serving,从 Dynamo 前端 Pod 对已部署的 Llama 3.1 405B 服务器进行基准测试。将基准测试配置为 1,024 个输入词元、1,024 个输出词元 (1k/1k)、2,048 个提示和 512 个最大并发数:
基准测试完成后,查找包含如下指标的输出:
Output token throughputTotal token throughputTTFTTPOT
清理
为避免因本教程中使用的资源导致您的 Google Cloud 账号产生额外的持续费用,请删除 Kubernetes 工作负载、GKE 集群和 Cloud Storage 存储桶:
删除 DynamoGraphDeployment 和 ResourceClaimTemplate 资源:
卸载 NVIDIA Dynamo 平台和 KAI Scheduler Helm 版本:
删除 Hugging Face Kubernetes Secret:
在
cluster-toolkit目录中,使用gcluster destroy命令销毁 GKE 集群及其关联的基础设施:如需删除存储 Terraform 状态的 Cloud Storage 存储桶,请使用
gcloud storage rm命令:gcloud storage rm --recursive "gs://${GCS_BUCKET}"
后续步骤
- 详细了解 NVIDIA Dynamo。
- 详细了解 SGLang。
- 详细了解具有 NVIDIA B200 GPU 的 A4 虚拟机。
- 详细了解 Cluster Toolkit。
- 详细了解如何管理 AI 优化型 GKE 集群。