本教學課程說明如何在 Google Kubernetes Engine (GKE) 部署及提供 Qwen3-Coder-30B-A3B (Qwen/Qwen3-Coder-30B-A3B-Instruct-FP8),這是一種混合專家編碼模型。部署作業會使用多主機 TPU v6e (Trillium) 加速器和 SGLang 服務架構,並搭配 TorchTPU (torchtpu) 和預先填入解碼 (PD) 分解。
在本教學課程說明的部署設定中,您會佈建兩個多主機 ct6e-standard-4t 節點集區,每個集區都以 2x4 拓撲排列 (每個節點集區有兩個節點,共八個 TPU v6e 晶片,總計 16 個 TPU v6e 晶片)。您可以使用 Kubernetes LeaderWorkerSet API 執行下列操作:
- 在不同的 TPU v6e 配量上,執行分散式多主機預填和解碼伺服器,並啟用張量平行處理和專家平行處理。
- 透過 SGLang 解構路由器轉送要求。
如要在 TPU7x (Ironwood) 加速器上,使用較大的 Qwen3-Coder-480B 模型執行類似的多主機 SGLang TorchTPU 服務工作流程,請參閱「在 GKE 上使用多主機 SGLang TorchTPU 和 TPU7x 加速器上的 PD 分解功能提供 Qwen3-Coder-480B」。
目標
- 設定 GKE 叢集和多主機 TPU v6e 節點集區。
- 設定憑證並安裝 LeaderWorkerSet 控制器。
- 部署多主機 SGLang 預先填入、解碼和路由器工作負載。
- 向 SGLang 路由器服務傳送推論要求。
- 執行基準測試工作負載。
- 清除所用資源。
費用
在本文件中,您會使用下列Google Cloud計費元件:
您可以使用 Pricing Calculator 根據預測用量估算費用。
完成本文所述工作後,您可以刪除建立的資源,避免繼續計費,詳情請參閱「清除所用資源」一節。
事前準備
為教學課程設定環境:
安裝並初始化 Google Cloud CLI,然後安裝
kubectl。如果使用 Cloud Shell,這兩項工具都已預先安裝。在 Google Cloud 專案中啟用 Kubernetes Engine API、Compute Engine API、Cloud TPU API 和 Artifact Registry API:
確認專案在 TPU 容量所在區域有足夠的磁碟配額和外部 IP 位址配額:
在 Google Cloud 控制台,前往「Quotas & System Limits」(配額與系統限制) 頁面。
確認您至少有 400 GiB 的可用 Google Cloud Hyperdisk Balanced 配額,可供預先填入和解碼 Pod 用於模型快取的四個 100 GiB 臨時磁碟區使用。
依「使用中的區域性外部 IPv4 位址」篩選,確認目標區域有足夠的 IP 位址配額。
取得 Hugging Face 存取權杖
您需要 Hugging Face 存取權杖,才能使用本教學課程。您可以在 Hugging Face 註冊免費帳戶。擁有帳戶後,請產生存取權杖:
- 在「Welcome to Hugging Face」頁面,點選帳戶顯示圖片,然後選取「存取權杖」。
- 在「存取權杖」頁面,點選「建立新權杖」。
- 選取「Read」權杖類型,並輸入權杖名稱。
- 系統會顯示存取權杖。將權杖儲存在安全的地方。
必要的角色
如要取得完成本教學課程所需的權限,請要求管理員在專案中授予您下列 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:要部署 TPU v6e 節點集區的可用區,例如us-central1-b。YOUR_RESERVATION_NAME:如果使用預留項目,請提供 TPU v6e 預留項目的名稱。YOUR_HF_TOKEN:您的 Hugging Face 存取權杖。
如果您使用自訂 SGLang TorchTPU 容器映像檔,請將 SGLANG_IMAGE 變數中的 lmsysorg/sglang:v0.1.0-tpu 替換為映像檔的 URI。
建立 GKE 叢集
如要以 Standard 模式建立 GKE 叢集,並連結兩個多主機 TPU v6e 節點集區,用於預先填入和解碼拆解,請完成下列步驟:
建立區域性 GKE 叢集,並在預設節點集區使用
e2-standard-4節點,為 LeaderWorkerSet 控制器和 SGLang 分解路由器提供充足的 CPU 和記憶體資源:建立兩個多主機 TPU v6e 節點集區,每個集區包含兩個
ct6e-standard-4t節點 (每個節點集區有八個 TPU v6e 晶片,採用2x4拓撲,共 16 個 TPU v6e 晶片):除了使用特定預留項目,您也可以使用 Spot 運算資源或彈性啟動型 VM 建立節點集區:
Spot VM
將
--reservation-affinity=specific和--reservation="${RESERVATION}"旗標替換為--spot旗標,使用 Spot 容量佈建節點集區:節點集區建立後,使用 Spot 容量的執行個體可能需要一段時間才能建立,且在工作負載執行期間可能會遭到先占。
彈性啟動型 VM
使用彈性啟動用量方案佈建節點集區:
詳情請參閱「使用 TPU 和彈性啟動 VM 執行小型批次工作負載」。
設定
kubectl憑證,以便與叢集通訊:
設定憑證並安裝 LeaderWorkerSet
如要準備叢集,以便部署多主機 SGLang,請完成下列步驟:
建立名為
hf-secret的 Kubernetes Secret,用於儲存 Hugging Face 存取權杖:在叢集上安裝 LeaderWorkerSet CustomResourceDefinition 和控制器:
部署多主機 SGLang 伺服器
工作負載資訊清單 (qwen3-coder-30b-multihost-disagg-v6e-2x4.yaml) 定義下列資源,用於協調兩個 2x4 TPU v6e 節點集區中,分散式預先填入和解碼服務:
StorageClass (
hyperdisk-balanced-tpu):佈建由 Google Cloud Hyperdisk Balanced 儲存空間支援的臨時 100 GiB ReadWriteOnce 磁碟區。四個預先填入和解碼 Pod 各自會在/data掛接磁碟區,將下載的Qwen/Qwen3-Coder-30B-A3B-Instruct-FP8檢查點儲存在本機。預先填入集區 (
sglang-prefill-service和sglang-tpu-prefill):執行 LeaderWorkerSet,其中包含一個 leader Pod 和一個 worker Pod,專門固定至一個2x4TPU v6e 節點集區。這個節點集區有八個 TPU 晶片,可提供八個 TensorCore。LeaderWorkerSet 會使用設為"cloud.google.com/gke-nodepool"的leaderworkerset.sigs.k8s.io/exclusive-topology註解。Pod 會使用下列旗標啟動sglang.launch_server,並公開通訊埠8000和啟動程序通訊埠8998:--disaggregation-mode=prefill--tensor-parallel-size=8--ep-size=8
解碼集區 (
sglang-decode-service和sglang-tpu-decode):執行size: 2的 LeaderWorkerSet,固定至第二個2x4TPU v6e 節點集區 (八個 TPU 晶片,提供八個 TensorCore)。LeaderWorkerSet 會使用下列旗標啟動sglang.launch_server:--disaggregation-mode=decode--tensor-parallel-size=8--ep-size=8
分解路由器 (
sglang-router和sglang-service):執行 CPU 部署作業,以--pd-disaggregation旗標執行sglang_router.launch_router模組,並在通訊埠8000公開 ClusterIP 服務。路由器會導向提示,並協調sglang-prefill-service和sglang-decode-service服務之間的 KV 快取移轉。
如要部署及監控多主機 SGLang 伺服器,請完成下列步驟:
下載工作負載資訊清單:
或者,您也可以建立名為
qwen3-coder-30b-multihost-disagg-v6e-2x4.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監控預先填入和解碼 Leader Pod 記錄,直到啟動完成:
首次執行時,初始模型下載、權重載入和編譯作業約需七到十分鐘。
如果您使用 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-30B-A3B 模型進行基準測試,請執行下列指令:
基準測試完成後,請尋找包含下列指標的輸出內容:
Output token throughput
Total token throughput
TTFT
TPOT
清除所用資源
為避免系統持續向您的 Google Cloud 帳戶收取本教學課程所用資源的額外費用,請刪除下列資源:
刪除 SGLang 預先填入、解碼和路由器工作負載:
刪除 TPU v6e 節點集區和 GKE 叢集:
後續步驟
- 進一步瞭解 SGLang。
- 進一步瞭解 TPU v6e (Trillium)。
- 進一步瞭解 Cloud TPU。
除非另有註明,否則本頁面中的內容是採用創用 CC 姓名標示 4.0 授權,程式碼範例則為阿帕契 2.0 授權。詳情請參閱《Google Developers 網站政策》。Java 是 Oracle 和/或其關聯企業的註冊商標。
上次更新時間:2026-11-03 (世界標準時間)。