本教學課程說明如何在 Google Cloud的 Google Kubernetes Engine (GKE) 上,部署及提供 Llama 3.1 405B (nvidia/Llama-3.1-405B-Instruct-FP8)。這個模型有 4,050 億個參數,經過指令微調,並量化為 FP8。部署作業會使用 Cluster Toolkit、兩個 A4 (a4-highgpu-8g) 虛擬機器 (VM) 執行個體 (共 16 個 NVIDIA B200 GPU)、NVIDIA Dynamo,以及 SGLang 服務架構 (採用單一主機預填解碼 (PD) 分解)。
在本教學課程所述的部署設定中,您會使用 Cluster Toolkit,以標準模式佈建 GKE 叢集。叢集包含兩個 a4-highgpu-8g 節點,透過 GPUDirect 遠端直接記憶體存取 (RDMA) 網路連線。接著,您會安裝 KAI 排程器和 NVIDIA Dynamo 平台,並使用 Grove 幫派排程。最後,您會部署 DynamoGraphDeployment 自訂資源,將預先填入和解碼作業,分開交由兩個單一主機八 GPU worker 執行,並採用張量平行處理和 FP8 KV 快取。
目標
- 安裝 Cluster Toolkit,並在標準模式中佈建雙節點 A4 GKE 叢集。
- 在叢集上安裝 KAI 排程器和 NVIDIA Dynamo 平台,並使用 Grove 群組排程。
- 部署 PD 分離式 SGLang 推論伺服器,其中包含一個單一主機 A4 預填 worker 和一個單一主機 A4 解碼 worker。
- 傳送對話完成要求至 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 預留項目的名稱。YOUR_BUCKET_NAME:Cloud Storage bucket 的全域不重複名稱,用於儲存 Cluster Toolkit 的 Terraform 狀態。YOUR_HF_TOKEN:您的 Hugging Face 存取權杖。
建立 GKE 叢集
下載 Cluster Toolkit,並以標準模式佈建 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 狀態,請建立 Cloud Storage 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 平台:
部署單一主機解構式 SGLang 伺服器
工作負載資訊清單 (llama3.1-405b-singlehost-a4.yaml) 定義了 Kubernetes ResourceClaimTemplate (all-mrdma),透過 DRA 分配節點的多 NIC RDMA 裝置 (mrdma.google.com),以及啟用 Grove 群組排程的 NVIDIA Dynamo DynamoGraphDeployment (llama3-405b-a4-disagg)。部署作業包含下列項目:
- 前端 (
Frontend):執行一個路由器副本,接受用戶端要求、探索已註冊的預先填入和解碼 worker,並協調分散式要求轉送。 - 預先填入 worker (
Prefill):在一個a4-highgpu-8g節點上執行單一主機 worker,並配備八個 NVIDIA B200 GPU。啟動時,Pod 會取得 NCCL/gIB 環境、從 Hugging Face Hub 下載nvidia/Llama-3.1-405B-Instruct-FP8檢查點至節點的本機 NVMe SSD,並使用下列旗標在--disaggregation-mode prefill中啟動python3 -m dynamo.sglang:--tensor-parallel-size 8--kv-cache-dtype fp8_e4m3--context-length 16384--mem-fraction-static 0.85
- 解碼 worker (
Decode):在第二個a4-highgpu-8g節點上執行單一主機 worker,並配備八個 NVIDIA B200 GPU。啟動時,Pod 會將模型權重快取至節點的本機 NVMe SSD,並在--disaggregation-mode decode中啟動python3 -m dynamo.sglang,並使用下列旗標:--tensor-parallel-size 8--kv-cache-dtype fp8_e4m3--context-length 16384--mem-fraction-static 0.85
部署及監控分解推論伺服器:
下載
llama3.1-405b-singlehost-a4.yaml工作負載資訊清單:或者,您也可以建立名為
llama3.1-405b-singlehost-a4.yaml的檔案,並加入下列內容:將工作負載資訊清單套用至叢集:
如要監控權重下載和伺服器初始化作業,請列出叢集中的 Pod,並串流預先填入和解碼 Pod 的記錄:
將
YOUR_POD_NAME替換為kubectl get pods輸出內容中的預先填入 Pod 或解碼 Pod 名稱。首次執行時,大約需要 10 到 20 分鐘,才能下載 405B FP8 模型權重並初始化 SGLang 伺服器。請等到前端、預先填入和解碼 Pod 的
kubectl get podsREADY欄顯示1/1,再傳送要求:NAME READY STATUS RESTARTS AGE llama3-405b-a4-disagg-0-decode-tgl7q 1/1 Running 0 15m llama3-405b-a4-disagg-0-frontend-wrxq5 1/1 Running 0 15m llama3-405b-a4-disagg-0-prefill-67h5s 1/1 Running 0 15m
傳送推論要求
向已部署的 Llama 3.1 405B 服務傳送對話完成要求:
將本機通訊埠
8000轉送至llama3-405b-a4-disagg-frontend服務:請讓通訊埠轉送功能在這個終端機工作階段中執行,或在背景執行指令。
在第二個終端機工作階段中,將對話完成要求傳送至
/v1/chat/completions端點:
執行基準工作負載
使用 sglang.bench_serving,從 Dynamo 前端 Pod 基準測試已部署的 Llama 3.1 405B 伺服器。將基準測試設為 1,024 個輸入詞元、1,024 個輸出詞元 (1k/1k)、2,048 個提示,並將並行數量上限設為 512:
基準測試完成後,請查看包含下列指標的輸出內容:
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指令:gcloud storage rm --recursive "gs://${GCS_BUCKET}"
後續步驟
- 進一步瞭解 NVIDIA Dynamo。
- 進一步瞭解 SGLang。
- 進一步瞭解搭載 NVIDIA B200 GPU 的 A4 VM。
- 進一步瞭解 Cluster Toolkit。
- 進一步瞭解如何管理 AI 最佳化 GKE 叢集。