1. 總覽
本實驗室將介紹可用於執行 AI 工作負載的 AI 基礎架構,您將使用下列項目:
Google Kubernetes Engine (GKE):基礎容器調度管理平台。
GKE 管理的 DRANET - 動態資源分配網路,可直接將高速互連結構指派給 TPU Pod。
Tensor Processing Unit (TPU):Google 專為加速 AI 工作負載打造的晶片。
如要設定,您將部署自訂 VPC 和 Autopilot GKE 叢集。如要啟用代管 DRANET,請建立 ComputeClass 和 Resource Claim Template。接著,您會部署使用 vLLM、Hugging Face、ComputeClass 和資源聲明範本 的工作負載。最後,您將測試網路設定,以及與 Gemma 4 模型的連線。
設定會使用 Terraform、gcloud 和 kubectl 的組合。
在本實驗室中,您將瞭解如何執行下列工作:
- 設定虛擬私有雲網路
- 設定 GKE Autopilot 叢集
- 建立 ComputeClass 和 ResourceClaimTemplate。
- 透過 Hugging Face 建立部署作業,執行 TPU、vLLM、監控和 Gemma 4
- 測試與 LLM 的連線
在本實驗室中,您將建立下列模式。
圖 1. 
2. 設定 Google Cloud 服務
自修實驗室環境設定
- 登入 Google Cloud 控制台,然後建立新專案或重複使用現有專案。如果沒有 Gmail 或 Google Workspace 帳戶,請先建立帳戶。



- 專案名稱是這個專案參與者的顯示名稱。這是 Google API 未使用的字元字串。你隨時可以更新。
- 專案 ID 在所有 Google Cloud 專案中都是專屬 ID,而且不可變更 (設定後就無法變更)。Cloud Console 會自動產生專屬字串,通常您不需要在意這個字串。在大多數程式碼研究室中,您需要參照專案 ID (通常會標示為
PROJECT_ID)。如果您不喜歡產生的 ID,可以產生另一個隨機 ID。或者,您也可以嘗試使用自己的 ID,看看是否可用。完成這個步驟後,ID 就無法變更,而且會在專案期間保持不變。 - 請注意,部分 API 會使用第三個值,也就是「專案編號」。如要進一步瞭解這三個值,請參閱說明文件。
- 接著,您需要在 Cloud 控制台中啟用帳單,才能使用 Cloud 資源/API。完成這個程式碼研究室的費用不高,甚至可能完全免費。如要關閉資源,避免在本教學課程結束後繼續產生費用,請刪除您建立的資源或專案。Google Cloud 新使用者可參加價值$300 美元的免費試用計畫。
啟動 Cloud Shell
雖然可以透過筆電遠端操作 Google Cloud,但在本程式碼研究室中,您將使用 Google Cloud Shell,這是可在雲端執行的指令列環境。
在 Google Cloud 控制台中,點選右上角工具列的 Cloud Shell 圖示:

佈建並連線至環境的作業,應該很快就能完成。完成後,您應該會看到如下的內容:

這部虛擬機器搭載各種您需要的開發工具,而且主目錄提供 5 GB 的永久儲存空間。此外,這部虛擬機器可在 Google Cloud 運作,大幅提升網路效能並強化驗證功能。您可以在瀏覽器中完成本程式碼研究室的所有工作,不需安裝任何軟體。
3. 使用 Terraform 設定環境
如要完成這個實驗室,您必須有權存取 TPU。使用的確切版本為 TPU v6e。
- 請按照 TPU 計畫文件啟用 TPU 配額,取得存取權。
- 我們使用的小型部署作業需要 4 個 TPU v6e 晶片 (也就是單一區域中的 2x2 切片)。
ct6e-standard-4t) - Hugging Face 權杖:下載 Gemma 模型權重時,需要存取權杖
我們會建立含有防火牆規則的自訂虛擬私有雲、子網路,然後建立自動駕駛叢集。開啟 Cloud 控制台,然後選取要使用的專案。
- 開啟控制台右上方的 Cloud Shell,確認 Cloud Shell 中顯示正確的專案 ID,並確認允許存取的任何提示。

- 建立名為
gke-auto-tpu的資料夾,然後移至該資料夾
mkdir -p gke-auto-tpu && cd gke-auto-tpu
export PROJECT_ID=$(gcloud config get-value project)
echo $PROJECT_ID
- 現在新增一些設定檔。這些檔案會建立下列 terraform.tfvars、variables.tf、net.tf 檔案。
cat << EOF > terraform.tfvars
project_id = "${PROJECT_ID}"
EOF
cat << 'EOF' > variables.tf
variable "project_id" {
type = string
}
variable "region" {
type = string
default = "us-east5"
}
variable "network_name" {
type = string
default = "tpu-gke-vpc"
}
variable "subnet_name" {
type = string
default = "tpu-sub1"
}
variable "cluster_name" {
type = string
default = "tpu-auto-dra-cluster"
}
EOF
cat << 'EOF' > net.tf
terraform {
required_version = ">= 1.5.0"
required_providers {
google = {
source = "hashicorp/google"
version = "~> 7.32.0"
}
}
}
provider "google" {
project = var.project_id
region = var.region
}
resource "google_compute_network" "tpu_vpc" {
project = var.project_id
name = var.network_name
auto_create_subnetworks = false
mtu = 8896
}
resource "google_compute_subnetwork" "tpu_subnet" {
project = var.project_id
name = var.subnet_name
ip_cidr_range = "192.168.100.0/24"
region = var.region
network = google_compute_network.tpu_vpc.id
}
resource "google_compute_firewall" "allow_ssh" {
project = var.project_id
name = "${var.network_name}-allow-ssh"
network = google_compute_network.tpu_vpc.id
direction = "INGRESS"
priority = 1000
allow {
protocol = "tcp"
ports = ["22"]
}
source_ranges = ["0.0.0.0/0"]
}
resource "google_compute_firewall" "allow_internal" {
project = var.project_id
name = "${var.network_name}-allow-internal"
network = google_compute_network.tpu_vpc.id
direction = "INGRESS"
priority = 1000
allow {
protocol = "all"
}
source_ranges = ["172.16.0.0/12", "192.168.0.0/16"]
}
resource "google_container_cluster" "tpu_autopilot" {
project = var.project_id
name = var.cluster_name
location = var.region
enable_autopilot = true
network = google_compute_network.tpu_vpc.id
subnetwork = google_compute_subnetwork.tpu_subnet.id
release_channel {
channel = "RAPID"
}
ip_allocation_policy {}
deletion_protection = false
}
EOF
- 請確認您位於 gke-auto-tpu 目錄中,然後執行下列指令:
terraform init初始化工作目錄。這是第一個步驟,會下載指定設定所需的供應商。terraform plan -out產生執行計畫,顯示 Terraform 將採取哪些動作來部署基礎架構。-out可讓您將執行計畫儲存至具名的二進位檔。您可以在不進行任何變更的情況下,查看會發生什麼情況。terraform apply執行更新。
terraform init
terraform plan -out vpc
- 現在請在執行
terraform apply後執行部署作業,由於您要套用已儲存的執行計畫,系統會立即執行,不會提示您確認 (這可能需要 6 到 10 分鐘)
terraform apply vpc
- 驗證設定
echo -e "\n=== Verifying GKE Autopilot Cluster ==="
gcloud container clusters list --filter="name:tpu-auto-dra-cluster" --project=$PROJECT_ID
echo -e "\n=== Verifying VPC Network ==="
gcloud compute networks list --filter="name:tpu-gke-vpc" --project=$PROJECT_ID
echo -e "\n=== Verifying Subnetwork ==="
gcloud compute networks subnets list --filter="name:tpu-sub1" --project=$PROJECT_ID
echo -e "\n=== Verifying Firewall Rules ==="
gcloud compute firewall-rules list --filter="name~tpu-gke-vpc-allow" --project=$PROJECT_ID
4. 建立運算類別和資源宣告範本
我們需要建立自訂 ComputeClass 資源,定義節點集區的設定。在本例中,我們將使用 TPU v6e 晶片 (ct6e-standard-4t)) 和代管 DRANET 網路。
- 連線至您建立的叢集。(附註:請將區域變更為您部署叢集的區域。)
gcloud container clusters get-credentials tpu-auto-dra-cluster --region us-east5 --project=$PROJECT_ID
- 請確認您位於
gke-auto-tpu目錄中,然後執行下列指令。這會建立 ComputeClass 資訊清單。請注意,如果您使用其他區域,則需要將區域資訊變更為叢集區域內的區域
cat << 'EOF' > computeclass.yaml
apiVersion: cloud.google.com/v1
kind: ComputeClass
metadata:
name: dranet-auto
spec:
nodePoolAutoCreation:
enabled: true
nodePoolConfig:
dra:
networking:
enabled: true
priorities:
- tpu:
type: tpu-v6e-slice
count: 4
topology: "2x2"
acceleratorNetworkProfile: auto
location:
zones:
- us-east5-b
EOF
- 現在請建立 ComputeClass。
kubectl apply -f computeclass.yaml
kubectl describe computeclass dranet-auto
- 在
gke-auto-tpu目錄中執行下列指令。這會建立支援非 RDMA 網路裝置的 ResourceClaimTemplate 資訊清單。
cat << 'EOF' > resourceclaimtpu.yaml
apiVersion: resource.k8s.io/v1
kind: ResourceClaimTemplate
metadata:
name: all-netdev
spec:
spec:
devices:
requests:
- name: req-netdev
exactly:
deviceClassName: netdev.google.com
allocationMode: All
EOF
- 現在建立 ResourceClaimTemplate。
kubectl apply -f resourceclaimtpu.yaml
kubectl describe resourceclaimtemplate all-netdev
建立密鑰
- 本實驗室使用 google/gemma-4-31B-it ,因此您需要建立 HF 權杖。請將下方的
YOUR_ACTUAL_HUGGING_FACE_TOKEN替換為實際權杖。
export HF_TOKEN="YOUR_ACTUAL_HUGGING_FACE_TOKEN"
- 確認您位於
gke-auto-tpu目錄,然後執行下列指令。
kubectl create secret generic hf-secret --from-literal=hf_token=${HF_TOKEN}
kubectl get secrets hf-secret
5. 部署工作負載 vLLM 和 Gemma
這項設定會使用 ComputeClass 自動佈建所需的硬體和網路 (TPU v6e 和代管 DRANET)。它會使用 ResourceClaimTemplate 定義藍圖,要求存取該高速網路,並使用部署作業將兩者繫結在一起,在每個 Pod 擴充時,為其產生個別的網路聲明。
- 確認您位於
gke-auto-tpu目錄,然後執行下列指令。
cat << 'EOF' > gem4-auto-dra-tpu.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: gem4-dra-auto
spec:
replicas: 1
selector:
matchLabels:
app: gemma4-tpu
template:
metadata:
labels:
app: gemma4-tpu
ai.gke.io/model: gemma-4-31b-it
ai.gke.io/inference-server: vllm-tpu
spec:
dnsPolicy: Default
resourceClaims:
- name: netdev-claim
resourceClaimTemplateName: all-netdev
containers:
- name: vllm-tpu-inference
image: vllm/vllm-tpu:latest
resources:
requests:
cpu: "30"
memory: "240Gi"
ephemeral-storage: "100Gi"
google.com/tpu: "4"
limits:
cpu: "30"
memory: "240Gi"
ephemeral-storage: "100Gi"
google.com/tpu: "4"
claims:
- name: netdev-claim
command: ["python3", "-m", "vllm.entrypoints.openai.api_server"]
args:
- --model=$(MODEL_ID)
- --tensor-parallel-size=4
- --host=0.0.0.0
- --port=8000
- --max-model-len=32768
- --max-num-batched-tokens=8192
env:
- name: MODEL_ID
value: google/gemma-4-31B-it
- name: HUGGING_FACE
valueFrom:
secretKeyRef:
name: hf-secret
key: hf_token
- name: HF_TOKEN
valueFrom:
secretKeyRef:
name: hf-secret
key: hf_token
volumeMounts:
- mountPath: /dev/shm
name: dshm
startupProbe:
httpGet:
path: /health
port: 8000
failureThreshold: 240
periodSeconds: 10
livenessProbe:
httpGet:
path: /health
port: 8000
periodSeconds: 10
readinessProbe:
httpGet:
path: /health
port: 8000
periodSeconds: 5
volumes:
- name: dshm
emptyDir:
medium: Memory
nodeSelector:
cloud.google.com/compute-class: dranet-auto
---
apiVersion: v1
kind: Service
metadata:
name: gem4-dra-service
spec:
selector:
app: gemma4-tpu
type: ClusterIP
ports:
- protocol: TCP
port: 8000
targetPort: 8000
---
apiVersion: monitoring.googleapis.com/v1
kind: PodMonitoring
metadata:
name: gem4-monitoring
spec:
selector:
matchLabels:
app: gemma4-tpu
endpoints:
- port: 8000
path: /metrics
interval: 30s
EOF
- 建立部署作業。
kubectl apply -f gem4-auto-dra-tpu.yaml
- 如要監控完成狀態,請執行下列指令。Pod 會等待節點佈建完成,才能繼續執行,這可能需要 13 分鐘以上。
kubectl get pods
kubectl get deployments
kubectl describe pods -l app=gemma4-tpu
echo " __|__"
echo " --@--(_|_)--@--"
echo ""
echo "Waiting for Autopilot to register the TPU node (this takes a few minutes)..."
until kubectl get nodes -l gke.networks.io/accelerator-network-profile=auto -o name | grep -q "node/"; do
sleep 60
done
echo "TPU Node detected in cluster! Waiting for hardware to provision and become Ready..."
kubectl wait --for=condition=Ready nodes -l gke.networks.io/accelerator-network-profile=auto --timeout=900s
- 建立節點並排定 Pod 後,您可以執行指令來查看 Pod 的記錄。(附註:你可以新增 **
-f** **串流標記**)。如果您在看到字串「the model is ready to serve」時觀看記錄,這項作業最多需要 **15 分鐘以上** 才能完成。(APIServer pid=1) INFO: 169.254.4.6:44290 - "GET /health HTTP/1.1" 200 OK
kubectl logs -l app=gemma4-tpu -f | sed -u '\,"GET /health HTTP/1.1" 200 OK,q'
- 部署作業完成後,您可以確認高速網路是否已正確附加至 TPU Pod。執行下列指令:
for pod in $(kubectl get pods -l app=gemma4-tpu -o name); do
echo "=== Checking Networking for $pod ==="
kubectl exec $pod -- ls /sys/class/net
echo ""
done
應注意的事項:您應該會看到標準 eth0,以及 eth1 到 ethxx 等額外介面。
這些額外介面會確認高速受管理 DRANET 結構已成功附加至 Pod。
6. 使用 curl 與 AI 模型互動
如要驗證部署的 gemma-4-31B 模型,請從服務設定通訊埠轉送至本機。
- 在目前的 Cloud Shell 中執行下列指令:
kubectl port-forward service/gem4-dra-service 8000:8000 &
- 現在,請為同一個專案開啟額外的 Cloud Shell 視窗,然後使用
curl與模型對話。這項指令會傳送提示,並將輸出內容直接串流至終端機。
time curl -sN http://127.0.0.1:8000/v1/chat/completions \
-X POST \
-H "Content-Type: application/json" \
-d '{
"model": "google/gemma-4-31B-it",
"messages": [
{
"role": "user",
"content": "How can GKE help deployment of AI workloads? Provide concise information. Keep the explanation under 300 words."
}
],
"max_tokens": 1024,
"temperature": 0.7,
"stream": true,
"stream_options": {"include_usage": true}
}' | grep '^data:' | sed 's/^data: //' | grep -v '\[DONE\]' | jq --unbuffered -j '
(.choices[0].delta.content // empty),
if .usage then "\n\n--- Usage ---\nPrompt: \(.usage.prompt_tokens)\nCompletion: \(.usage.completion_tokens)\nTotal: \(.usage.total_tokens)\n" else empty end
'
- 查看模型的回覆
觀測能力
由於我們已套用PodMonitoring自訂資源,Cloud Monitoring 會從 8000 連接埠的 vLLM 容器擷取指標。您可以前往 Google Cloud 控制台 「監控」->「資訊主頁」,以原生方式查看權杖產生延遲時間、佇列長度和 KV 快取用量等指標。

7. 清理
- 執行下列指令,刪除資源。
cd ~/gke-auto-tpu
kubectl delete -f gem4-auto-dra-tpu.yaml
kubectl delete -f resourceclaimtpu.yaml
kubectl delete -f computeclass.yaml
kubectl delete secret hf-secret
- 使用下列指令清理基礎架構,然後輸入
yes確認
terraform destroy
8. 恭喜
您已成功在 GKE Autopilot 上部署代管 DRANET 環境、動態佈建 TPU v6e 硬體,並使用 vLLM 提供 310 億個參數的大型 Gemma 4 模型。
使用 GKE Autopilot 時,您可以讓 Kubernetes 處理底層節點佈建和基礎架構管理作業,專心部署 AI 工作負載。
後續步驟/瞭解詳情
您可以進一步瞭解 GKE 網路
挑戰下一個實驗室
繼續完成 Google Cloud 任務,或查看下列其他 Google Cloud 實驗室: