本教學課程說明如何在 Google Kubernetes Engine (GKE) 部署及提供 Qwen3.5-397B (Qwen/Qwen3.5-397B-A17B-FP8),這是一種專家混合模型。這項部署作業會使用多主機 TPU7x (Ironwood) 加速器和 vLLM TPU 服務架構,並搭配 TorchTPU (torchtpu) 和預填解碼 (PD) 分解。
在這個設定中,您會佈建兩個多主機 tpu7x-standard-4t 節點集區,每個集區都採用 2x2x2 拓撲 (每個節點集區有兩個節點,共八個 TPU7x 晶片,總計 16 個 TPU7x 晶片)。您可以使用 Kubernetes JobSet API 和 Ray,在不同的 TPU7x 磁碟區上執行分散式多主機預填和解碼伺服器,並啟用資料平行處理和專家平行處理,然後透過分散式 Proxy 轉送要求。
目標
- 設定 GKE 叢集和多主機 TPU7x 節點集區。
- 將模型權重暫存至 Cloud Storage bucket。
- 使用 JobSet 部署多主機 vLLM TorchTPU 預先填入、解碼和 Proxy 伺服器。
- 執行基準測試工作負載,並分析結果。
- 清除所用資源。
費用
在本文件中,您會使用下列Google Cloud計費元件:
您可以使用 Pricing Calculator 根據預測用量估算費用。
完成本文所述工作後,您可以刪除建立的資源,避免繼續計費,詳情請參閱「清除所用資源」一節。
事前準備
您需要 Hugging Face 存取權杖,才能使用本教學課程。您可以前往 Hugging Face 註冊免費帳戶。擁有帳戶後,請產生存取權杖:
在 Google Cloud 專案中啟用 Kubernetes Engine API:
安裝並初始化 Google Cloud CLI,然後安裝
kubectl。如果使用 Cloud Shell,這兩項工具都已預先安裝。確認專案在 TPU 容量所在區域有足夠的 SSD 配額和外部 IP 位址配額:
在 Google Cloud 控制台,前往「Quotas & System Limits」(配額與系統限制) 頁面。
依「Persistent Disk SSD (GB)」篩選,確認目標區域有足夠的可用 SSD 配額。
依「使用中的區域性外部 IPv4 位址」篩選,確認目標區域有足夠的 IP 位址配額。
如要取得完成本教學課程所需的權限,請要求管理員在專案中授予您下列 IAM 角色:
- Kubernetes Engine 管理員 (
roles/container.admin) - Compute 管理員 (
roles/compute.admin) - 儲存空間管理員 (
roles/storage.admin) - 服務帳戶使用者 (
roles/iam.serviceAccountUser)
如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。
設定環境變數
設定驗證機制:
匯出本教學課程中使用的環境變數:
更改下列內容:
YOUR_PROJECT_ID:Google Cloud 專案的 ID。YOUR_REGION:要部署叢集的區域,例如us-central1。YOUR_ZONE:要部署 TPU7x 節點集區的可用區,例如us-central1-c。YOUR_CLUSTER_NAME:GKE 叢集名稱。YOUR_RESERVATION_NAME:TPU 預留項目名稱 (如有使用預留項目)。YOUR_GCS_BUCKET:用於暫存模型權重的 Cloud Storage bucket 名稱。YOUR_HF_TOKEN:您的 Hugging Face 存取權杖。YOUR_VLLM_IMAGE:要使用的 vLLM TorchTPU 映像檔。如要查看公開映像檔,請參閱 vLLM TorchTPU 存放區。
建立 GKE 叢集
如要以標準模式建立 GKE 叢集,並連接兩個多主機 TPU7x 節點集區,用於預先填入和解碼拆解,請完成下列步驟:
建立區域性 GKE 叢集,並啟用 Workload Identity Federation for GKE:
輸出結果會與下列內容相似:
NAME LOCATION MASTER_VERSION MASTER_IP MACHINE_TYPE NODE_VERSION NUM_NODES STATUS STACK_TYPE asq-v7x us-central1 1.35.7-gke.1027000 35.226.172.84 e2-standard-4 1.35.7-gke.1027000 3 RUNNING IPV4建立高處理量工作負載配置政策,並採用
2x2x2加速器拓撲,這是多主機 TPU7x 節點集區的必要條件:建立兩個多主機 TPU7x 節點集區 (
np-0和np-1),每個集區包含兩個tpu7x-standard-4t節點 (每個節點集區有八個 TPU7x 晶片,採用2x2x2拓撲,總共 16 個 TPU7x 晶片):本教學課程使用 Spot 容量 (
--spot)。建立節點集區後,使用 Spot 容量的執行個體可能需要一段時間才能建立,且在執行工作負載時可能會遭到先占。您也可以使用預留項目或彈性啟動型 VM 建立節點集區,方法是傳遞下列旗標:- 特定預留項目:將
--spot旗標替換為--reservation-affinity=specific和--reservation=RESERVATION_NAME旗標,其中RESERVATION_NAME是 GKE 建立節點集區時使用的預留項目名稱。如要進一步瞭解 TPU 預留項目,請參閱「關於 Cloud TPU 預留項目」。 - 彈性啟動型 VM:將
--spot和--num-nodes=2旗標替換為--flex-start、--reservation-affinity=none、--enable-autoscaling、--num-nodes=0、--min-nodes=0和--max-nodes=2旗標,使用彈性啟動消耗選項佈建節點集區。詳情請參閱「使用 TPU 和彈性啟動型 VM 執行小型批次工作負載」。
每個節點集區的輸出內容大致如下:
NAME MACHINE_TYPE DISK_SIZE_GB NODE_VERSION np-0 tpu7x-standard-4t 100 1.35.7-gke.1027000- 特定預留項目:將
設定
kubectl憑證,以便與叢集通訊:
將模型權重暫存至 Cloud Storage
將模型權重暫存至 Cloud Storage bucket,以便執行工作負載:
建立 Cloud Storage bucket,並啟用統一 bucket 層級存取權:
將 bucket 的 Identity and Access Management (IAM) 權限授予預設 Compute Engine 服務帳戶和預設 Kubernetes 服務帳戶:
建立名為
hf-secret的 Kubernetes Secret,用於儲存 Hugging Face 存取權杖:擷取
download_model.yaml設定:或者,您也可以選擇建立名為
download_model.yaml的檔案,並加入下列內容:將模型權重下載至暫存磁碟區,並轉移至 Cloud Storage bucket:
這個步驟大約需要 30 到 40 分鐘才能完成。
工作完成後,請確認所有 163 個
.safetensorsshard 都位於 Cloud Storage bucket 中:刪除已完成的暫存工作:
等待 Pod 啟動,並監控下載工作的記錄:
部署多主機 vLLM TorchTPU 伺服器
工作負載資訊清單 (v7x_qwen3_5_server_multihost_slice.yaml) 定義了 Kubernetes JobSet 資源 (vllm-qwen3-5-397b-pd-disagg-v7x),其中包含三個複製工作,可協調兩個 2x2x2 TPU7x 節點集區中,分散的預填和解碼服務:
- 預先填入伺服器 (
prefill):在一個2x2x2TPU7x 節點集區中執行兩個副本 (兩個tpu7x-standard-4t節點,每部主機有四個雙核心晶片,共 16 個 TPU 核心)。Pod 會形成雙節點 Ray 叢集,並在通訊埠8000上啟動Qwen/Qwen3.5-397B-A17B-FP8的 vLLM TorchTPU,其中--data-parallel-size=16、--tensor-parallel-size=1、--enable-expert-parallel、--load-format=runai_streamer和TPURaidenConnector設定為kv_producer。 - 解碼伺服器 (
decode):在第二個2x2x2TPU7x 節點集區 (共 16 個 TPU 核心) 執行兩個副本,並在cloud.google.com/gke-nodepool使用 Pod 親和性和反親和性規則,將預先填入和解碼作業隔離至不同的節點集區。Pod 會形成雙節點 Ray 叢集,並在通訊埠7200啟動 vLLM TorchTPU,TPURaidenConnector 則設為kv_consumer。 - 分解 Proxy (
proxy):在通訊埠10000上執行toy_proxy_server.py,協調預先填入伺服器 (通訊埠8000) 和解碼伺服器 (通訊埠7200) 之間的要求轉送和 KV 快取移轉。
如要部署及監控解構式 vLLM 伺服器,請完成下列步驟:
在叢集上安裝 Kubernetes JobSet CustomResourceDefinition 和控制器:
擷取伺服器資訊清單:
或者,您也可以建立名為
v7x_qwen3_5_server_multihost_slice.yaml的檔案,並在其中加入下列內容:將 Cloud Storage bucket 名稱替換為
v7x_qwen3_5_server_multihost_slice.yaml,然後套用資訊清單:這項設定會使用一個
2x2x2TPU7x 切片 (兩個節點) 進行預填,並使用一個2x2x2TPU7x 切片 (兩個節點) 進行解碼。如要調整任一集區中的節點數量,請更新replicas欄位 (replicas: NUM_NODES)。監控預先填入和解碼 Pod 記錄,直到應用程式啟動完成:
首次執行時,初始模型載入和編譯作業約需 30 到 45 分鐘。
如果您使用 Spot 或彈性啟動型 VM 等先占容量,建立節點集區後,可能需要較長時間才能建立 TPU 磁碟分割節點,且這些節點可能會在工作負載執行期間遭到先占。詳情請參閱「先占 VM 執行個體」。如要確認 TPU 切片節點是否已建立,請參閱「檢查節點的狀態和條件」。
請等待預先填入和解碼伺服器記錄都回報
Application startup complete,再執行基準測試:(APIServer pid=1) INFO: Started server process [1] (APIServer pid=1) INFO: Waiting for application startup. (APIServer pid=1) INFO: Application startup complete.
執行基準工作負載
如要使用 8,192 個詞元的輸入和 1,024 個詞元的輸出 (8k/1k) 工作負載,對已部署的 Qwen3.5-397B 模型進行基準測試,請完成下列步驟:
擷取基準測試資訊清單:
或者,您也可以建立名為
v7x_qwen3_5_benchmark_multihost_slice.yaml的檔案,並在其中加入下列內容:套用基準測試工作資訊清單,並等待基準測試 Pod 準備就緒:
監控基準測試工作記錄:
清除所用資源
如要避免系統向您的 Google Cloud 帳戶收取本教學課程所用資源的費用,請刪除 Kubernetes 工作負載、TPU7x 節點集區、GKE 叢集和 Cloud Storage bucket:
刪除 Kubernetes 工作負載:
刪除 TPU7x 節點集區、工作負載配置政策和 GKE 叢集:
(選用) 刪除儲存暫存模型權重的 Cloud Storage bucket:
後續步驟
- 進一步瞭解 Cloud TPU 上的 vLLM。
- 進一步瞭解 TPU7x (Ironwood)。
- 進一步瞭解 Cloud TPU。