本教學課程說明如何在Google Cloud的 Google Kubernetes Engine (GKE) 上,部署及提供 Qwen3.8-2.4T (nvidia/Qwen3.8-2.4T-A95B-NVFP4)。這個專家混合模型有 2.4 兆個參數,其中 950 億個有效參數已量化為 NVFP4。部署作業會使用 Cluster Toolkit、四個多主機 A4 (a4-highgpu-8g) 虛擬機器 (VM) 執行個體 (共 32 個 NVIDIA B200 GPU)、NVIDIA Dynamo,以及採用預填解碼 (PD) 分解技術的 SGLang 服務架構。
在本教學課程所述的部署設定中,您會使用 Cluster Toolkit,以標準模式佈建 GKE 叢集。叢集包含四個 a4-highgpu-8g 節點,透過 GPUDirect 遠端直接記憶體存取 (RDMA) 網路連線。接著,您會安裝 KAI 排程器和 NVIDIA Dynamo 平台,並使用 Grove Gang 排程,然後在 Cloud Storage 中暫存模型權重。接著,您將部署 DynamoGraphDeployment 自訂資源,使用 Cloud Storage FUSE 掛接 bucket,並將預填和解碼作業分開,交由兩個 16 GPU 多主機 worker 集區處理,並採用張量平行處理、專家平行處理和 FP8 KV 快取。
目標
- 安裝 Cluster Toolkit,並以標準模式佈建多主機 A4 GKE 叢集。
- 在叢集上安裝 KAI 排程器和 NVIDIA Dynamo 平台,並使用 Grove 群組排程。
- 將 Qwen3.8-2.4T 模型權重暫存至 Cloud Storage bucket。
- 在四個 A4 節點上部署多主機、PD 分離式 SGLang 推論伺服器,共使用 32 個 NVIDIA B200 GPU。
- 傳送對話完成要求至 Dynamo 前端路由器。
- 執行基準測試工作負載。
- 清除已部署的資源。
費用
在本文件中,您會使用下列Google Cloud計費元件:
您可以使用 Pricing Calculator 根據預測用量估算費用。
事前準備
為教學課程設定環境:
- 安裝並初始化 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 註冊免費帳戶。擁有帳戶後,請產生存取權杖:
- 在「Welcome to Hugging Face」頁面,點選帳戶顯示圖片,然後選取「存取權杖」。
- 在「存取權杖」頁面,按一下「建立新權杖」。
- 選取「Read」權杖類型,並輸入權杖名稱。
- 系統會顯示存取權杖。將權杖儲存在安全的地方。
必要的角色
如要取得完成本教學課程所需的權限,請要求管理員在專案中授予您下列 IAM 角色:
- Kubernetes Engine 管理員 (
roles/container.admin) - Compute 管理員 (
roles/compute.admin) - 儲存空間管理員 (
roles/storage.admin) - 專案 IAM 管理員 (
roles/resourcemanager.projectIamAdmin) - 服務帳戶管理員 (
roles/iam.serviceAccountAdmin) - 服務帳戶使用者 (
roles/iam.serviceAccountUser) - 服務使用情形消費者 (
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) 不會超過 Identity and Access Management (IAM) 的 30 個字元限制。YOUR_RESERVATION_NAME:A4 預留項目的名稱,或格式為RESERVATION_NAME/reservationBlocks/RESERVATION_BLOCK_NAME的擴充預留區塊路徑。YOUR_BUCKET_NAME:Cloud Storage bucket 的全域不重複名稱,用於儲存 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 套件,版本請依
CLUSTER_TOOLKIT_VERSION(v1.104.0) 指定:如果您在 macOS 或
arm64工作站上執行這個指令,請將OS="mac"或ARCH="arm64"設為與平台相符。如要儲存 Cluster Toolkit 部署作業的 Terraform 狀態和暫存的模型權重,請在 A4 預留項目所在區域建立 Cloud Storage bucket,並啟用統一 bucket 層級存取權和物件版本管理功能:
為四個
a4-highgpu-8g節點建立cluster-toolkit/examples/gke-a4/gke-a4-deployment.yaml部署設定檔:根據預設,部署檔案會設為使用特定預留項目。如果沒有特定預留項目,請先更新
cluster-toolkit/examples/gke-a4/gke-a4-deployment.yaml,改用其他消耗選項 (例如 Spot VM 或彈性啟動型 VM),再部署叢集。如需設定操作說明,請參閱「GKE 消耗選項」。切換至
cluster-toolkit目錄,使用gcluster deploy指令部署 GKE 叢集,然後返回目前使用的目錄:建立叢集約需 20 到 30 分鐘。如果您執行
./gcluster deploy時未使用--auto-approve旗標,請在系統提示時輸入a,套用建議的變更。設定
kubectl憑證,以便與叢集通訊:
安裝 KAI Scheduler 和 NVIDIA Dynamo
建立 Hugging Face Secret,並安裝 KAI 排程器和 NVIDIA Dynamo 平台 (採用 Grove Gang 排程),為叢集做好準備:
建立名為
hf-secret的 Kubernetes Secret,用於儲存 Hugging Face 存取權杖:下載 NVIDIA Dynamo 平台 Helm 圖表 (
v1.5.0),安裝 KAI 排程器,並安裝已啟用 Grove 的 Dynamo 平台:
將模型權重暫存至 Cloud Storage
將 nvidia/Qwen3.8-2.4T-A95B-NVFP4 檢查點暫存至區域內 Cloud Storage bucket (gs://${GCS_BUCKET}),這樣推論 worker Pod 就能使用 Cloud Storage FUSE 掛接權重,不必在每次冷啟動時從 Hugging Face 下載:
在建立 GKE 叢集時建立的
gs://${GCS_BUCKET}bucket,將 Storage 物件使用者角色 (roles/storage.objectUser) 授予繫結至workload-identity-k8s-saKubernetes 服務帳戶的 Google 服務帳戶:下載
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 bucket 名稱代入
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 服務帳戶的角色和 RoleBinding 資源,以及啟用 Grove Gang 排程的 NVIDIA Dynamo DynamoGraphDeployment (qwen3-8-2-4t-a4-disagg),分配節點的多 NIC RDMA 裝置 (mrdma.google.com)。部署作業包含下列項目:
前端 (
Frontend):執行一個路由器副本,接受用戶端要求、探索已註冊的預先填入和解碼 worker,並協調分散式要求轉送。預先填入 worker (
Prefill):在兩個a4-highgpu-8g節點上執行雙節點 worker 集區,共有 16 個 NVIDIA B200 GPU。每個 Pod 都會使用 Cloud Storage FUSE CSI 驅動程式 (gcsfuse.csi.storage.gke.io) 搭配本機 NVMe SSD 檔案快取,從 Cloud Storage bucket 的/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
解碼 worker (
Decode):在剩餘的兩個a4-highgpu-8g節點上執行雙節點 worker 集區,共有 16 個 NVIDIA B200 GPU。每個 Pod 都會透過 Cloud Storage FUSE CSI 驅動程式,從 Cloud Storage 的/model-weights掛接暫存的模型權重,並使用下列旗標在--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 bucket 名稱替換為
qwen3.8-2.4t-nvfp4-multihost-a4-gcsfuse.yaml,並將工作負載資訊清單套用至叢集:如要監控權重載入和伺服器初始化作業,請列出叢集中的 Pod,並串流預先填入前導 Pod 和解碼前導 Pod 的記錄:
將
YOUR_POD_NAME替換為kubectl get pods輸出內容中的預先填補前導 Pod 或解碼前導 Pod 名稱。冷啟動時,系統需要約 4 到 5 分鐘,才能透過 Cloud Storage FUSE 從 Cloud Storage 串流 2,400,000,000,000 個 NVFP4 模型權重 (200 個 shard 約 1.44 TB),並初始化多主機 SGLang 伺服器。請先確認前端 Pod 顯示
1/1,且預填和解碼 Pod 在kubectl get pods的READY欄中顯示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 bucket:
刪除 DynamoGraphDeployment 和 ResourceClaimTemplate 資源:
解除安裝 NVIDIA Dynamo 平台和 KAI Scheduler Helm 版本:
刪除 Hugging Face Kubernetes Secret:
使用
gcluster destroy指令,從cluster-toolkit目錄刪除 GKE 叢集和相關聯的基礎架構:刪除儲存暫存模型權重和 Terraform 狀態的 Cloud Storage bucket:
gcloud storage rm --recursive "gs://${GCS_BUCKET}"
後續步驟
- 進一步瞭解 NVIDIA Dynamo。
- 進一步瞭解 SGLang。
- 進一步瞭解搭載 NVIDIA B200 GPU 的 A4 VM。
- 進一步瞭解 Cluster Toolkit。
- 進一步瞭解如何管理 AI 最佳化 GKE 叢集。