本教程介绍了如何在Google Cloud上的 Google Kubernetes Engine (GKE) 上部署和应用 Qwen3.8-2.4T (nvidia/Qwen3.8-2.4T-A95B-NVFP4),这是一个拥有 2.4 万亿参数的混合专家模型,其中 950 亿个活跃参数已量化为 NVFP4。该部署使用 Cluster Toolkit、4 个多主机 A4 (a4-highgpu-8g) 虚拟机 (VM) 实例(共 32 个 NVIDIA B200 GPU)、NVIDIA Dynamo 以及采用预填充-解码 (PD) 解耦的 SGLang 服务框架。
在本教程中介绍的部署配置中,您将使用 Cluster Toolkit 在标准模式下预配 GKE 集群。该集群包含四个通过 GPUDirect 远程直接内存访问 (RDMA) 网络连接的 a4-highgpu-8g 节点。然后,您需要安装 KAI Scheduler 和 NVIDIA Dynamo 平台(采用 Grove 组调度),并将模型权重暂存在 Cloud Storage 中。接下来,您将部署一个 DynamoGraphDeployment 自定义资源,该资源使用 Cloud Storage FUSE 装载存储桶,并通过张量并行、专家并行和 FP8 KV 缓存,在两个 16 GPU 多主机工作器池中分离预填充和解码。
目标
- 安装 Cluster Toolkit,并以标准模式预配多主机 A4 GKE 集群。
- 在集群上安装 KAI 调度器和 NVIDIA Dynamo 平台,并启用 Grove 组调度。
- 将 Qwen3.8-2.4T 模型权重暂存到 Cloud Storage 存储桶中。
- 在四个 A4 节点上部署多主机、PD 分离式 SGLang 推理服务器,总共使用 32 个 NVIDIA B200 GPU。
- 向 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 预留的名称,或格式为RESERVATION_NAME/reservationBlocks/RESERVATION_BLOCK_NAME的扩展预留块路径。YOUR_BUCKET_NAME:Cloud Storage 存储桶的全球唯一名称,该存储桶用于存储 Cluster Toolkit 的 Terraform 状态和暂存的 Qwen3.8-2.4T 模型权重。YOUR_HF_TOKEN:您的 Hugging Face 访问令牌。
创建 GKE 集群
下载 Cluster Toolkit,并在 Standard 模式下预配一个 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 状态和暂存的模型权重,请在 A4 预留所在的区域中创建一个 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 平台:
在 Cloud Storage 中暂存模型权重
将 nvidia/Qwen3.8-2.4T-A95B-NVFP4 检查点暂存到区域内 Cloud Storage 存储桶 (gs://${GCS_BUCKET}) 中,以便推理工作器 Pod 可以使用 Cloud Storage FUSE 装载权重,而无需在每次冷启动时从 Hugging Face 下载权重:
向与
workload-identity-k8s-saKubernetes 服务账号绑定的 Google 服务账号授予您在创建 GKE 集群中创建的gs://${GCS_BUCKET}存储桶的 Storage Object User 角色 (roles/storage.objectUser):下载
qwen3.8-2.4t-nvfp4-stage-weights-job.yaml和qwen3.8-2.4t-nvfp4-multihost-a4-gcsfuse.yaml清单:或者,创建一个名为
qwen3.8-2.4t-nvfp4-stage-weights-job.yaml的文件,其中包含以下内容。此索引作业在四个 A4 节点上运行四个并行 Pod。每个 Pod 都会将nvidia/Qwen3.8-2.4T-A95B-NVFP4检查点的大小均衡切片下载到节点的本地 NVMe SSD,并使用gcloud storage rsync将其上传到gs://${GCS_BUCKET}/hf_models/models--nvidia--qwen3_8-2_4t-a95b-nvfp4:将 Cloud Storage 存储桶名称替换为
qwen3.8-2.4t-nvfp4-stage-weights-job.yaml,启动暂存作业,等待所有四个 Pod 完成权重上传,然后删除已完成的作业:将模型权重下载到本地 NVMe SSD 并将其上传到 Cloud Storage 大约需要 25 分钟。
可选:在暂存作业运行时,在第二个终端会话中流式传输暂存 Pod 的日志,以监控下载进度:
将
YOUR_POD_NAME替换为kubectl get pods中其中一个qwen3-8-2-4t-stage-weightsPod 的名称。
部署多主机分离式 SGLang 服务器
工作负载清单 (qwen3.8-2.4t-nvfp4-multihost-a4-gcsfuse.yaml) 定义了一个 Kubernetes ResourceClaimTemplate (all-mrdma),该模板通过 DRA 为 workload-identity-k8s-sa 服务账号分配节点的多个 NIC RDMA 设备 (mrdma.google.com),以及 Role 和 RoleBinding 资源,并定义了一个启用了 Grove 组调度的 NVIDIA Dynamo DynamoGraphDeployment (qwen3-8-2-4t-a4-disagg)。部署包括以下内容:
前端 (
Frontend):运行一个路由器副本,用于接受客户端请求、发现已注册的预填充和解码工作器,以及协调解耦请求路由。预填充工作器 (
Prefill):在两个a4-highgpu-8g节点上运行一个双节点工作器池,总共配备 16 个 NVIDIA B200 GPU。每个 Pod 都会使用 Cloud Storage FUSE CSI 驱动程序 (gcsfuse.csi.storage.gke.io) 和本地 NVMe SSD 文件缓存,从 Cloud Storage 存储桶中的/model-weights装载暂存的nvidia/Qwen3.8-2.4T-A95B-NVFP4权重,获取 NCCL/gIB 环境,并使用以下标志在--disaggregation-mode prefill中启动python3 -m dynamo.sglang:--served-model-name "nvidia/Qwen3.8-2.4T-A95B-NVFP4"--tensor-parallel-size 16--ep-size 16--nnodes 2--moe-runner-backend flashinfer_trtllm--attention-backend triton--kv-cache-dtype fp8_e4m3--disable-flashinfer-autotune
解码工作器 (
Decode):在其余两个a4-highgpu-8g节点上运行一个双节点工作器池,总共包含 16 个 NVIDIA B200 GPU。每个 Pod 都会通过 Cloud Storage FUSE CSI 驱动程序在/model-weights处装载 Cloud Storage 中的暂存模型权重,并使用以下标志在--disaggregation-mode decode中启动python3 -m dynamo.sglang:--served-model-name "nvidia/Qwen3.8-2.4T-A95B-NVFP4"--tensor-parallel-size 16--ep-size 16--nnodes 2--moe-runner-backend flashinfer_trtllm--attention-backend triton--kv-cache-dtype fp8_e4m3
部署和监控解耦推理服务器:
查看您之前下载的
qwen3.8-2.4t-nvfp4-multihost-a4-gcsfuse.yaml工作负载清单,或创建一个名为qwen3.8-2.4t-nvfp4-multihost-a4-gcsfuse.yaml的文件,其中包含以下内容:将您的 Cloud Storage 存储桶名称替换为
qwen3.8-2.4t-nvfp4-multihost-a4-gcsfuse.yaml,并将工作负载清单应用于集群:如需监控权重加载和服务器初始化,请列出集群中的 Pod,并流式传输预填充领导者 Pod 和解码领导者 Pod 的日志:
将
YOUR_POD_NAME替换为kubectl get pods输出中的预填充领导者 Pod 或解码领导者 Pod 的名称。在冷启动时,通过 Cloud Storage FUSE 从 Cloud Storage 流式传输 2,400,000,000,000 个 NVFP4 模型权重(200 个分片,约 1.44 TB)并初始化多主机 SGLang 服务器大约需要 4 到 5 分钟。在发送任何请求之前,请等待前端 Pod 在
kubectl get pods的READY列中显示1/1,并且预填充和解码 Pod 显示2/2:NAME READY STATUS RESTARTS AGE qwen3-8-2-4t-a4-disagg-0-decode-0-decode-ldr-wz92h 2/2 Running 0 5m qwen3-8-2-4t-a4-disagg-0-decode-0-decode-wkr-fb8g6 2/2 Running 0 5m qwen3-8-2-4t-a4-disagg-0-frontend-jrx4s 1/1 Running 0 5m qwen3-8-2-4t-a4-disagg-0-prefill-0-prefill-ldr-7nz25 2/2 Running 0 5m qwen3-8-2-4t-a4-disagg-0-prefill-0-prefill-wkr-7d5cw 2/2 Running 0 5m
发送推理请求
向已部署的 Qwen3.8-2.4T 服务发送对话补全请求:
将本地端口
8000转发到qwen3-8-2-4t-a4-disagg-frontend服务:让端口转发在此终端会话中运行,或在后台运行该命令。
在第二个终端会话中,向
/v1/chat/completions端点发送对话补全请求:
运行基准工作负载
使用 sglang.bench_serving,通过 Dynamo 前端 Pod 对已部署的 Qwen3.8-2.4T 服务器进行基准测试,配置为 1,024 个输入词元、1,024 个输出词元 (1k/1k)、256 个提示和 128 个最大并发数:
基准测试完成后,查找包含如下指标的输出:
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 --recursive "gs://${GCS_BUCKET}"
后续步骤
- 详细了解 NVIDIA Dynamo。
- 详细了解 SGLang。
- 详细了解具有 NVIDIA B200 GPU 的 A4 虚拟机。
- 详细了解 Cluster Toolkit。
- 详细了解如何管理 AI 优化型 GKE 集群。