本教學課程說明如何在 Google Kubernetes Engine (GKE) 部署及提供 Qwen3-Coder-480B (Qwen/Qwen3-Coder-480B-A35B-Instruct-FP8),這是一種專家混合編碼模型。部署作業會使用多主機 TPU7x (Ironwood) 加速器和 SGLang 服務架構,並搭配 TorchTPU (torchtpu) 和預填解碼 (PD) 分解。
在本教學課程說明的部署設定中,您會佈建兩個多主機 tpu7x-standard-4t 節點集區,每個集區都以 2x2x2 拓撲排列 (每個節點集區有兩個節點,共八個 TPU7x 晶片,總計 16 個 TPU7x 晶片)。您將使用 Kubernetes LeaderWorkerSet API 執行下列操作:
- 在不同的 TPU7x 切片上執行分散式多主機預填和解碼伺服器,並啟用張量平行處理和專家平行處理。
- 透過 SGLang 解構路由器轉送與 OpenAI 相容的要求。
目標
- 設定 GKE 叢集和多主機 TPU7x 節點集區。
- 設定憑證並安裝 LeaderWorkerSet 控制器。
- 部署多主機 SGLang 預先填入、解碼和路由器工作負載。
- 向 SGLang 路由器服務傳送推論要求。
- 執行推論基準測試工作負載。
- 清除所用資源。
費用
在本文件中,您會使用下列Google Cloud計費元件:
您可以使用 [Pricing Calculator](https://cloud.google.com/products/calculator),根據預測用量估算費用。
完成本文所述工作後,您可以刪除建立的資源,避免繼續計費,詳情請參閱「清除所用資源」一節。
事前準備
您需要 Hugging Face 存取權杖,才能使用本教學課程。您可以前往 Hugging Face 註冊免費帳戶。擁有帳戶後,請產生存取權杖:
在 Google Cloud 專案中啟用 Kubernetes Engine API、Compute Engine API、Cloud TPU API 和 Artifact Registry API:
確認專案在 TPU 容量所在區域有足夠的磁碟配額和外部 IP 位址配額:
在 Google Cloud 控制台,前往「Quotas & System Limits」(配額與系統限制) 頁面。
確認您至少有 2,800 GiB 的可用 Google Cloud Hyperdisk Balanced 配額,可供預先填入和解碼 Pod 用於模型快取的四個 700 GiB 臨時磁碟區使用。
依「使用中的區域性外部 IPv4 位址」篩選,確認目標區域有足夠的 IP 位址配額。
如要取得完成本教學課程所需的權限,請要求管理員在專案中授予您下列 IAM 角色:
- Kubernetes Engine 管理員 (
roles/container.admin) - Compute 管理員 (
roles/compute.admin) - 服務帳戶使用者 (
roles/iam.serviceAccountUser)
如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。
確認您的 Compute Engine 預設服務帳戶在專案中具備下列 Identity and Access Management (IAM) 角色:
- Kubernetes Engine 預設節點服務帳戶 (
roles/container.defaultNodeServiceAccount) - Artifact Registry 讀取者 (
roles/artifactregistry.reader)
設定環境變數
匯出本教學課程中使用的環境變數:
更改下列內容:
YOUR_CLUSTER_NAME:GKE 叢集名稱。YOUR_PROJECT_ID: Google Cloud專案的 ID。YOUR_REGION:要部署叢集的區域,例如us-central1。YOUR_ZONE:要部署 TPU7x 節點集區的可用區,例如us-central1-c。YOUR_RESERVATION_NAME:如果使用預留項目,請提供 TPU7x 預留項目的名稱。YOUR_HF_TOKEN:您的 Hugging Face 存取權杖。YOUR_SGLANG_TPU_IMAGE:如果使用自訂 SGLang TorchTPU 容器映像檔,請提供映像檔的 URI;否則,請使用預設 SGLang TorchTPU 映像檔。
建立 GKE 叢集
如要以標準模式建立 GKE 叢集,並連接兩個多主機 TPU7x 節點集區,用於預先填入和解碼拆解,請完成下列步驟:
建立區域性 GKE 叢集,並在預設節點集區使用
e2-standard-4節點,為 LeaderWorkerSet 控制器和 SGLang 分解路由器提供充足的 CPU 和記憶體資源:建立高處理量工作負載配置政策,並採用
2x2x2加速器拓撲,這是多主機 TPU7x 節點集區的必要條件:建立兩個多主機 TPU7x 節點集區 (
tpu7x-pool-0和tpu7x-pool-1),每個集區包含兩個tpu7x-standard-4t節點 (每個節點集區有八個 TPU7x 晶片,採用2x2x2拓撲,總共 16 個 TPU7x 晶片):除了使用特定預留項目,您也可以傳遞下列旗標,透過 Spot 容量或彈性啟動型 VM 建立節點集區:
- Spot VM:將
--reservation-affinity=specific和--reservation=${RESERVATION}替換為--spot,即可使用 Spot 容量。建立節點集區後,使用 Spot 容量的執行個體可能需要一段時間才能建立,且在工作負載執行期間可能會遭到先占。 - 彈性啟動型 VM:將
--num-nodes=2、--reservation-affinity=specific和--reservation=${RESERVATION}替換為--flex-start、--enable-autoscaling、--num-nodes=0、--min-nodes=0和--max-nodes=2,即可使用彈性啟動消耗選項佈建節點集區。詳情請參閱「使用 TPU 和彈性啟動型 VM 執行小型批次工作負載」。
- Spot VM:將
設定
kubectl憑證,以便與叢集通訊:
設定憑證並安裝 LeaderWorkerSet
如要準備叢集,以便部署多主機 SGLang,請完成下列步驟:
建立名為
hf-secret的 Kubernetes Secret,用於儲存 Hugging Face 存取權杖:在叢集上安裝 LeaderWorkerSet CustomResourceDefinition 和控制器:
部署多主機 SGLang 伺服器
工作負載資訊清單 (qwen3-coder-480b-multihost-disagg-v7x.yaml) 定義下列資源,用於協調兩個 2x2x2 TPU7x 節點集區中,分散式預先填入和解碼服務:
- StorageClass (
hyperdisk-balanced-tpu):佈建由 Google Cloud Hyperdisk Balanced 儲存空間支援的暫時性 700 GiB ReadWriteOnce 磁碟區。四個預先填入和解碼 Pod 各自會在/data掛接自己的磁碟區,以便在本機儲存下載的Qwen/Qwen3-Coder-480B-A35B-Instruct-FP8檢查點。 - 預先填入集區 (
sglang-prefill-service和sglang-tpu-prefill):執行size: 2的 LeaderWorkerSet (一個領導者 Pod 和一個工作站 Pod),專門固定至一個2x2x2TPU7x 節點集區 (八個 TPU 晶片,提供 16 個 TensorCore)。LeaderWorkerSet 會使用設為"cloud.google.com/gke-nodepool"的leaderworkerset.sigs.k8s.io/exclusive-topology註解。Pod 會使用--disaggregation-mode=prefill、--tensor-parallel-size=16和--ep-size=16旗標啟動sglang.launch_server,並公開 HTTP 通訊埠8000和啟動程序通訊埠8998。 - 解碼集區 (
sglang-decode-service和sglang-tpu-decode):執行size: 2的 LeaderWorkerSet,並固定至第二個2x2x2TPU7x 節點集區 (八個 TPU 晶片,提供 16 個 TensorCore)。LeaderWorkerSet 會使用--disaggregation-mode=decode、--tensor-parallel-size=16和--ep-size=16旗標啟動sglang.launch_server。 - 分解路由器 (
sglang-router和sglang-service):執行 CPU Deployment,該 Deployment 會使用--pd-disaggregation旗標執行sglang_router.launch_router模組,並在通訊埠8000公開 ClusterIP Service。路由器會導向提示,並協調sglang-prefill-service和sglang-decode-service服務之間的 KV 快取移轉。
如要部署及監控多主機 SGLang 伺服器,請完成下列步驟:
下載工作負載資訊清單:
或者,您也可以建立名為
qwen3-coder-480b-multihost-disagg-v7x.yaml的檔案,並在當中加入下列內容:將工作負載資訊清單套用至叢集:
確認路由器、預先填入和解碼 Pod 已建立:
所有 Pod 都準備就緒後,輸出內容會類似如下:
NAME READY STATUS RESTARTS AGE sglang-router-6d87cb8c7d-gv4wr 1/1 Running 0 39m sglang-tpu-decode-0 1/1 Running 0 40m sglang-tpu-decode-0-1 1/1 Running 0 40m sglang-tpu-prefill-0 1/1 Running 0 40m sglang-tpu-prefill-0-1 1/1 Running 0 40m監控預先填入和解碼前導 Pod 記錄,直到啟動完成:
首次執行時,初始模型下載、權重載入和編譯作業約需 15 到 30 分鐘。
如果您使用 Spot 容量或彈性啟動型 VM 等先占容量,建立節點集區後,可能需要較長時間才能建立 TPU 切片節點,而且這些節點可能會在工作負載執行期間遭到先占。詳情請參閱「先占 VM 執行個體」。如要確認 TPU 切片節點是否已建立,請參閱「檢查節點的狀態和條件」。
等待預先填入和解碼 Leader Pod 記錄輸出下列訊息,且
kubectl get pods在所有 Pod 的READY欄中顯示1/1:The server is fired up and ready to roll!開啟第二個終端機工作階段,並將本機通訊埠
8000轉送至sglang-service:在這個終端機工作階段中,讓通訊埠轉送功能保持運作。
傳送推論要求
返回第一個終端機工作階段,並將對話完成要求傳送至 SGLang 路由器公開的 /v1/chat/completions 端點:
執行基準工作負載
如要使用 sglang-router Pod 的 1,024 個權杖輸入和 1,024 個權杖輸出 (1k/1k) 工作負載,對部署的 Qwen3-Coder 模型進行基準測試,請執行下列指令:
清除所用資源
如要避免系統向您的 Google Cloud 帳戶收取本教學課程所用資源的額外費用,請刪除下列資源:
刪除 SGLang 預先填入、解碼和路由器工作負載:
刪除 TPU7x 節點集區、工作負載配置政策和 GKE 叢集:
後續步驟
- 進一步瞭解 SGLang。
- 進一步瞭解 TPU7x (Ironwood)。
- 進一步瞭解 Cloud TPU。