本教學課程說明如何在Google Cloud的 Google Kubernetes Engine (GKE) 上部署及提供 DeepSeek-R1 (deepseek-ai/DeepSeek-R1),這是一種混合專家模型,具有 6,710 億個參數,其中 370 億個為有效參數。部署作業會使用 Cluster Toolkit、兩個多主機 A4 (a4-highgpu-8g) 虛擬機器 (VM) 執行個體 (共 16 個 NVIDIA B200 GPU),以及 vLLM 服務架構。
在本教學課程所述的部署設定中,您會使用 Cluster Toolkit,以標準模式佈建 GKE 叢集。叢集有兩個 a4-highgpu-8g 節點,透過 GPUDirect 遠端直接記憶體存取 (RDMA) 網路連線。接著,您會將模型權重暫存至 Cloud Storage,並使用 Kubernetes JobSet API 和 Ray,透過張量平行處理、專家平行處理和 FP8 KV 快取,在所有 16 個 NVIDIA B200 GPU 上提供模型。
目標
- 安裝 Cluster Toolkit,並以標準模式佈建多主機 A4 GKE 叢集。
- 將 DeepSeek-R1 模型權重暫存至 Cloud Storage bucket。
- 使用 JobSet 和 Ray,在兩個 A4 節點部署多主機 vLLM 推論伺服器,總共使用 16 個 NVIDIA B200 GPU。
- 向 vLLM 伺服器傳送對話完成要求。
- 執行基準測試工作負載。
- 清除已部署的資源。
費用
在本文件中,您會使用下列Google Cloud計費元件:
您可以使用 Pricing Calculator 根據預測用量估算費用。
事前準備
為教學課程設定環境:
- 安裝並初始化 Google Cloud CLI,然後安裝
kubectl。如果使用 Cloud Shell,這兩項工具都已預先安裝。 - 如果您是透過 Linux 或 macOS 工作站 (而非 Cloud Shell) 執行本教學課程,請安裝必要的 Cluster Toolkit 依附元件 (例如 Terraform 和 Git)。
在 Google Cloud 專案中啟用 Kubernetes Engine API、Compute Engine API、Cloud Storage API、Artifact Registry 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_HF_TOKEN:您的 Hugging Face 存取權杖。YOUR_GCS_BUCKET:Cloud Storage bucket 的全域不重複名稱,用於暫存模型權重。指令碼也會將TERRAFORM_BUCKET設為YOUR_GCS_BUCKET-tf-state,以儲存 Cluster Toolkit 的 Terraform 狀態。
指令碼也會將
CLUSTER_TOOLKIT_VERSION設為v1.104.0,指定要安裝的 Cluster Toolkit 版本。Cluster Toolkitv1.104.0以上版本內建examples/gke-a4/gke-a4-deployment.yaml的容量消耗選項。在v1.104.0之前的版本中,您必須手動新增這些容量選項。
建立 GKE 叢集
下載 Cluster Toolkit,並以 Standard 模式佈建 GKE 叢集,其中包含兩個 a4-highgpu-8g 節點、GPUDirect RDMA 網路和 JobSet 控制器:
下載並解壓縮
CLUSTER_TOOLKIT_VERSION(v1.104.0) 中指定版本的預先建構 Cluster Toolkit 套件,將目前使用的目錄變更為cluster-toolkit目錄,然後驗證二進位檔版本:(選用) 查看 Cluster Toolkit 中的可用指令和旗標:
建立 Cloud Storage bucket,用於儲存 Cluster Toolkit 部署作業的 Terraform 狀態:
為兩個
a4-highgpu-8g節點建立examples/gke-a4/gke-a4-deployment.yaml部署設定檔:根據預設,
examples/gke-a4/gke-a4.yaml藍圖會設為使用特定預留項目。如果沒有特定預留項目,可以在部署叢集前編輯examples/gke-a4/gke-a4.yaml,使用下列其中一種消耗選項:- Spot 運算資源:確認專案有足夠的 GPU、磁碟和 CPU 先占配額。在
examples/gke-a4/gke-a4.yaml底部,將--- Option 1: Specific Reservation ---部分註解排除,並取消註解--- Option 4: Spot ---部分。 - 彈性啟動型 VM:確認專案有足夠的 GPU、磁碟和 CPU 先占配額。在
examples/gke-a4/gke-a4.yaml底部,將--- Option 1: Specific Reservation ---部分註解排除,並將--- Option 2: DWS Flex Start ---部分取消註解。
- Spot 運算資源:確認專案有足夠的 GPU、磁碟和 CPU 先占配額。在
使用
gcluster deploy指令部署 GKE 叢集:叢集建立作業約需 30 到 45 分鐘。如果您執行
./gcluster deploy時未使用--auto-approve旗標,請在系統提示時輸入a,套用建議的變更。部署作業完成後,輸出內容結尾會顯示類似以下的訊息:Apply complete! Resources: 80 added, 0 changed, 0 destroyed.設定
kubectl憑證,以便與叢集通訊:
將模型權重暫存至 Cloud Storage
將 DeepSeek-R1 權重下載至其中一個 A4 節點的本機 SSD,並轉移至 Cloud Storage bucket,以便在節點間快速串流:
下載 Kubernetes 資訊清單檔案,用於模型下載工作、vLLM 推論伺服器和基準 Pod:
建立 Cloud Storage bucket,並啟用統一 bucket 層級存取權,用於儲存模型權重:
將 bucket 的 IAM 權限授予預設 Kubernetes 服務帳戶、預設 Compute Engine 服務帳戶,以及叢集節點集區服務帳戶 (
${CLUSTER_NAME}-gke-np-sa):上述指令碼授予的 IAM 權限包括 Storage 舊版 bucket 讀取者角色 (
roles/storage.legacyBucketReader),這是--load-format runai_streamer所需的角色。建立名為
hf-secret的 Kubernetes Secret,用於儲存 Hugging Face 存取權杖:查看
download_model.yaml資訊清單,如果先前未下載,請在本機建立檔案:將 Cloud Storage bucket 名稱代入
download_model.yaml資訊清單,然後啟動模型下載工作:等待下載 Pod 啟動,然後串流工作記錄:
將模型下載至節點的本機 NVMe SSD,並將權重上傳至 Cloud Storage bucket,大約需要 30 到 40 分鐘。
工作完成後,請確認 Cloud Storage bucket 中有全部 163 個
.safetensorsshard:刪除已完成的暫存工作:
部署多主機 vLLM 伺服器
工作負載資訊清單 (deepseek_r1_server.yaml) 定義了 ClusterIP Service (vllm-r1-leader) 和 Kubernetes JobSet (vllm-r1),用於協調兩個 a4-highgpu-8g 節點的多主機服務:
- Leader (
leader):在 A4 節點上執行一個副本,該節點配備八個 NVIDIA B200 GPU、NCCL/gIB 環境 (/usr/local/gib/scripts/set_nccl_env.sh) 來源、在通訊埠6379上啟動 Ray head 節點,用於雙節點叢集,並在 HTTP 通訊埠8080上啟動vllm serve。伺服器會使用--load-format runai_streamer直接從gs://$MODEL_BUCKET/DeepSeek-R1串流權重,並從掛接的 Cloud Storage FUSE 磁碟區/models/DeepSeek-R1載入 tokenizer。支援--tensor-parallel-size 16、--pipeline-parallel-size 1、--distributed-executor-backend ray、--enable-expert-parallel、--kv-cache-dtype fp8_e4m3、--async-scheduling和 CUDA 圖表 (FULL_AND_PIECEWISE)。 - Worker (
worker):在第二個 A4 節點上執行一個無頭副本,該節點配備八個 NVIDIA B200 GPU、設定 NCCL/gIB,並在vllm-r1-leader:6379加入 Leader 的 Ray 叢集。
部署及監控多主機 vLLM 伺服器:
查看
deepseek_r1_server.yaml資訊清單,如果先前未下載,請在本機建立檔案:如要將這項部署作業擴充至更多主機,請更新
deepseek_r1_server.yaml中的參數。舉例來說,如要擴充至四個 A4 節點,總共 32 個 NVIDIA B200 GPU,請在複製的工作下方設定replicas: 3,並按照下列方式更新 leader 引數:worker--ray_cluster_size=4--tensor-parallel-size=16--pipeline-parallel-size=2
將 Cloud Storage bucket 名稱替換為
deepseek_r1_server.yaml,並將資訊清單套用至叢集:監控 leader 和 worker Pod 記錄,直到伺服器啟動完成:
由於
kubectl logs -f會在前台串流記錄,如要同時監控兩個 Pod,請在獨立的終端機工作階段中執行 worker 記錄指令。如要隨時停止串流記錄,請按下 Control+C。初始權重串流、模型載入和 CUDA 圖表擷取作業大約需要 15 到 20 分鐘。請等到 Leader Pod 記錄輸出下列訊息,再傳送要求:
(APIServer pid=1) INFO: Started server process [1] (APIServer pid=1) INFO: Waiting for application startup. (APIServer pid=1) INFO: Application startup complete.
傳送推論要求
傳送對話完成要求至已部署的 vLLM 伺服器:
在背景將本機通訊埠
8080轉送至vllm-r1-leader服務:傳送對話完成要求至
/v1/chat/completions端點:
執行基準工作負載
使用 vllm bench serve 基準測試已部署的 DeepSeek-R1 伺服器,設定為 8,192 個輸入詞元和 1,024 個輸出詞元 (8k/1k):
查看
deepseek_r1_8k_1k.yaml資訊清單,如果先前未下載,請在本機建立檔案:資訊清單指定 8,192 個輸入詞元、1,024 個輸出詞元、1,280 個提示,並行數量上限為 112。
套用
deepseek_r1_8k_1k.yaml資訊清單:等待
vllm-bench-8k-1kPod 啟動,然後串流基準測試記錄:基準測試約需 15 分鐘才能完成。基準測試完成後,請尋找包含下列指標的輸出內容:
Output token throughputTotal token throughputTTFTTPOT
清除所用資源
如要避免系統向您的 Google Cloud 帳戶收取本教學課程所用資源的額外費用,請刪除 Kubernetes 工作負載、GKE 叢集和 Cloud Storage bucket:
刪除基準 Pod、vLLM 伺服器 JobSet 和 Service、模型下載 Job,以及 Hugging Face Secret:
刪除儲存暫存模型權重的 Cloud Storage bucket:
使用
gcluster destroy指令,從cluster-toolkit目錄刪除 GKE 叢集及其相關聯的基礎架構:刪除儲存 Terraform 狀態的 Cloud Storage bucket:
後續步驟
- 進一步瞭解 vLLM。
- 進一步瞭解搭載 NVIDIA B200 GPU 的 A4 VM。
- 進一步瞭解 Cluster Toolkit。
- 進一步瞭解如何管理 AI 最佳化 GKE 叢集。