خوشه‌های خلبان خودکار GKE با TPUها، DRANET مدیریت‌شده توسط GKE و Gemma 4

۱. مرور کلی

این آزمایشگاه شما را با زیرساخت هوش مصنوعی که می‌تواند برای اجرای بارهای کاری هوش مصنوعی استفاده شود، آشنا می‌کند. شما با موارد زیر کار خواهید کرد:

موتور گوگل کوبرنتیز (GKE) - پلتفرم اساسی هماهنگ‌سازی کانتینر.

GKE DRANET را مدیریت کرد - شبکه تخصیص منابع پویا که مستقیماً فابریک‌های اتصال پرسرعت را به غلاف‌های TPU شما اختصاص می‌دهد.

واحد پردازش تنسور (TPU) - تراشه‌های شتاب‌دهنده سفارشی گوگل.

برای پیکربندی، شما یک VPC سفارشی و یک کلاستر GKE با قابلیت هدایت خودکار مستقر خواهید کرد. برای فعال‌سازی DRANET مدیریت‌شده، یک ComputeClass و یک Resource Claim Template ایجاد خواهید کرد. سپس یک بار کاری که از vLLM ، Hugging Face ، ComputeClass و resource Claim Template استفاده می‌کند، مستقر خواهید کرد. در نهایت، راه‌اندازی شبکه و اتصال به مدل Gemma 4 را آزمایش خواهید کرد.

این پیکربندی‌ها از ترکیبی از Terraform ، gcloud و kubectl استفاده خواهند کرد.

در این آزمایشگاه یاد خواهید گرفت که چگونه وظایف زیر را انجام دهید:

  • راه اندازی شبکه VPC
  • یک خوشه خلبان خودکار GKE راه‌اندازی کنید
  • کلاس ComputeClass و قالب ResourceClaim را ایجاد کنید.
  • ایجاد یک استقرار که TPUها، vLLM، مانیتورینگ و Gemma 4 را از طریق Hugging Face اجرا می‌کند
  • اتصال به LLM را آزمایش کنید

در این آزمایش، شما قرار است الگوی زیر را ایجاد کنید.

شکل ۱. d38a898255a06e25.png

۲. راه‌اندازی سرویس‌های ابری گوگل

تنظیم محیط خودتنظیم

  1. وارد کنسول گوگل کلود شوید و یک پروژه جدید ایجاد کنید یا از یک پروژه موجود دوباره استفاده کنید. اگر از قبل حساب جیمیل یا گوگل ورک اسپیس ندارید، باید یکی ایجاد کنید .

۲۹۵۰۰۴۸۲۱bab6a87.png

37d264871000675d.png

۹۶d86d3d5655cdbe.png

  • نام پروژه، نام نمایشی برای شرکت‌کنندگان این پروژه است. این یک رشته کاراکتری است که توسط APIهای گوگل استفاده نمی‌شود. شما همیشه می‌توانید آن را به‌روزرسانی کنید.
  • شناسه پروژه در تمام پروژه‌های گوگل کلود منحصر به فرد است و تغییرناپذیر است (پس از تنظیم، قابل تغییر نیست). کنسول کلود به طور خودکار یک رشته منحصر به فرد تولید می‌کند؛ معمولاً برای شما مهم نیست که چه باشد. در اکثر آزمایشگاه‌های کد، باید شناسه پروژه خود را (که معمولاً با عنوان PROJECT_ID شناخته می‌شود) ارجاع دهید. اگر شناسه تولید شده را دوست ندارید، می‌توانید یک شناسه تصادفی دیگر ایجاد کنید. به عنوان یک جایگزین، می‌توانید شناسه خودتان را امتحان کنید و ببینید که آیا در دسترس است یا خیر. پس از این مرحله قابل تغییر نیست و در طول پروژه باقی می‌ماند.
  • برای اطلاع شما، یک مقدار سوم، شماره پروژه ، وجود دارد که برخی از APIها از آن استفاده می‌کنند. برای کسب اطلاعات بیشتر در مورد هر سه این مقادیر، به مستندات مراجعه کنید.
  1. در مرحله بعد، برای استفاده از منابع/API های ابری، باید پرداخت صورتحساب را در کنسول ابری فعال کنید . اجرای این آزمایشگاه کد هزینه زیادی نخواهد داشت، اگر اصلاً هزینه‌ای داشته باشد. برای خاموش کردن منابع به منظور جلوگیری از پرداخت صورتحساب پس از این آموزش، می‌توانید منابعی را که ایجاد کرده‌اید یا پروژه را حذف کنید. کاربران جدید Google Cloud واجد شرایط برنامه آزمایشی رایگان ۳۰۰ دلاری هستند.

شروع پوسته ابری

اگرچه می‌توان از راه دور و از طریق لپ‌تاپ، گوگل کلود را مدیریت کرد، اما در این آزمایشگاه کد، از گوگل کلود شل ، یک محیط خط فرمان که در فضای ابری اجرا می‌شود، استفاده خواهید کرد.

از کنسول گوگل کلود ، روی آیکون Cloud Shell در نوار ابزار بالا سمت راست کلیک کنید:

فعال کردن پوسته ابری

آماده‌سازی و اتصال به محیط فقط چند لحظه طول می‌کشد. وقتی تمام شد، باید چیزی شبیه به این را ببینید:

تصویر صفحه ترمینال Google Cloud Shell که نشان می‌دهد محیط متصل شده است

این ماشین مجازی با تمام ابزارهای توسعه‌ای که نیاز دارید، مجهز شده است. این ماشین مجازی یک دایرکتوری خانگی پایدار ۵ گیگابایتی ارائه می‌دهد و روی فضای ابری گوگل اجرا می‌شود که عملکرد شبکه و احراز هویت را تا حد زیادی بهبود می‌بخشد. تمام کارهای شما در این آزمایشگاه کد را می‌توان در یک مرورگر انجام داد. نیازی به نصب چیزی ندارید.

۳. راه‌اندازی محیط با Terraform

برای انجام این آزمایش، به TPU نیاز دارید. نسخه دقیق مورد استفاده TPU نسخه ۶e است.

  • برای دسترسی باید طبق دستورالعمل طرح TPU عمل کنید و سهمیه TPU را فعال کنید .
  • ما از یک سیستم کوچک استفاده می‌کنیم که به ۴ تراشه TPU v6e ( ct6e-standard-4t) نیاز دارد که یک برش ۲x۲ در یک ناحیه واحد خواهد بود.
  • توکن چهره در آغوش گرفته: برای دانلود وزن‌های مدل Gemma به یک توکن دسترسی نیاز است.

ما یک VPC سفارشی با قوانین فایروال، یک زیرشبکه و سپس یک خوشه خودکار ایجاد خواهیم کرد. کنسول ابری را باز کنید و پروژه‌ای را که استفاده خواهید کرد انتخاب کنید.

  1. Cloud Shell را که در بالای کنسول شما در سمت راست قرار دارد باز کنید، مطمئن شوید که شناسه پروژه صحیح را در Cloud Shell مشاهده می‌کنید، هرگونه درخواستی را برای اجازه دسترسی تأیید کنید. b51b80043d3bac90.png
  2. یک پوشه به نام gke-auto-tpu ایجاد کنید و به پوشه مورد نظر بروید.
mkdir -p gke-auto-tpu && cd gke-auto-tpu
export PROJECT_ID=$(gcloud config get-value project)
echo $PROJECT_ID
  1. حالا چند فایل پیکربندی اضافه کنید. این فایل‌ها فایل‌های 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
  1. مطمئن شوید که در پوشه gke-auto-tpu هستید و دستورات زیر را اجرا کنید
    terraform init دایرکتوری کاری را مقداردهی اولیه می‌کند. این اولین قدم است و ارائه‌دهندگان مورد نیاز برای پیکربندی داده شده را دانلود می‌کند.
    terraform plan -out یک طرح اجرایی ایجاد می‌کند که نشان می‌دهد Terraform چه اقداماتی را برای استقرار زیرساخت شما انجام خواهد داد. دستور terraform -out به شما امکان می‌دهد طرح اجرایی را در یک فایل باینری نامگذاری شده ذخیره کنید. می‌توانید بدون ایجاد هیچ تغییری، ببینید چه اتفاقی خواهد افتاد.
    terraform apply به‌روزرسانی‌ها را اجرا می‌کند.
terraform init 
terraform plan -out vpc 
  1. اکنون پس از اجرای terraform apply ، عملیات استقرار را اجرا کنید، از آنجایی که شما در حال اعمال طرح اجرایی ذخیره شده هستید، بلافاصله و بدون درخواست تأیید اجرا خواهد شد (این ممکن است بین ۶ تا ۱۰ دقیقه طول بکشد).
terraform apply vpc
  1. تنظیمات را تأیید کنید
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

۴. ایجاد کلاس محاسبه و الگوی درخواست منابع

ما باید یک منبع ComputeClass سفارشی ایجاد کنیم تا پیکربندی مربوط به node pool را تعریف کنیم. در مورد ما، از تراشه‌های TPU v6e ( ct6e-standard-4t) و شبکه‌های DRANET مدیریت‌شده استفاده خواهیم کرد.

  1. به کلاستری که ایجاد کرده‌اید متصل شوید. ( برای تغییر منطقه به منطقه‌ای که کلاستر خود را در آن مستقر کرده‌اید، این کار را انجام دهید. )
gcloud container clusters get-credentials tpu-auto-dra-cluster --region us-east5 --project=$PROJECT_ID
  1. مطمئن شوید که در دایرکتوری 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
  1. حالا کلاس ComputeClass را ایجاد کنید.
kubectl apply -f computeclass.yaml

kubectl describe computeclass dranet-auto
  1. در دایرکتوری gke-auto-tpu دستورات زیر را اجرا کنید. این کار مانیفست ResourceClaimTemplate را ایجاد می‌کند که از دستگاه‌های شبکه غیر RDMA پشتیبانی می‌کند.
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
  1. حالا ResourceClaimTemplate را ایجاد کنید.
kubectl apply -f resourceclaimtpu.yaml

kubectl describe resourceclaimtemplate all-netdev

راز خود را خلق کنید

  1. این آزمایشگاه از google/gemma-4-31B-it استفاده می‌کند، بنابراین شما باید یک توکن HF ایجاد کنید . YOUR_ACTUAL_HUGGING_FACE_TOKEN را در زیر با توکن واقعی خود جایگزین کنید.
export HF_TOKEN="YOUR_ACTUAL_HUGGING_FACE_TOKEN"
  1. مطمئن شوید که در دایرکتوری gke-auto-tpu هستید و دستورات زیر را اجرا کنید.
kubectl create secret generic hf-secret --from-literal=hf_token=${HF_TOKEN} 

kubectl get secrets hf-secret

۵. استقرار حجم کاری vLLM و Gemma

این تنظیمات از ComputeClass برای تأمین خودکار سخت‌افزار و شبکه مورد نیاز (TPU v6e و DRANET مدیریت‌شده) استفاده می‌کند. از ResourceClaimTemplate برای تعریف طرحی برای درخواست دسترسی به آن شبکه پرسرعت و استقراری که آنها را با ایجاد Claimهای شبکه‌ای مجزا برای هر pod در حین مقیاس‌پذیری به هم متصل می‌کند، استفاده می‌کند.

  1. مطمئن شوید که در دایرکتوری 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
  1. استقرار را ایجاد کنید.
kubectl apply -f gem4-auto-dra-tpu.yaml
  1. برای نظارت بر وضعیت تکمیل، دستورات زیر را اجرا کنید. پادها منتظر می‌مانند تا گره آماده شود و سپس می‌توانند ادامه دهند، این ممکن است بیش از ۱۳ دقیقه طول بکشد.
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
  1. پس از ایجاد گره و زمان‌بندی پاد، می‌توانید دستور را برای مشاهده‌ی لاگ‌های پادها اجرا کنید. ( توجه داشته باشید که می‌توانید برای استریم کردن از فلگ ** -f ** **استفاده کنید). اگر در حال مشاهده‌ی لاگ‌ها باشید و رشته‌ی (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'
  1. پس از آماده شدن استقرار، می‌توانید تأیید کنید که شبکه پرسرعت به درستی به غلاف‌های TPU شما متصل شده است. دستور زیر را اجرا کنید:
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 مدیریت‌شده با سرعت بالا با موفقیت به پاد شما متصل شده است.

۶. تعامل با مدل هوش مصنوعی با استفاده از curl

برای تأیید مدل gemma-4-31B که مستقر کرده‌اید، ارسال پورت را از سرویس به دستگاه محلی خود تنظیم کنید.

  1. این را در Cloud Shell فعلی خود اجرا کنید:
kubectl port-forward service/gem4-dra-service 8000:8000 &
  1. حالا، یک پنجره 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 
  '
  1. پاسخ مدل خود را بررسی کنید

مشاهده‌پذیری

از آنجایی که ما منبع سفارشی PodMonitoring اعمال کرده‌ایم، Cloud Monitoring معیارها را از کانتینر vLLM روی پورت ۸۰۰۰ استخراج می‌کند. می‌توانید به Google Cloud Console Monitoring -> Dashboards بروید تا معیارهایی مانند تأخیر تولید توکن، طول صف و میزان استفاده از حافظه نهان KV را به صورت بومی مشاهده کنید.

607bcf95ce4d9a82.png

۷. تمیز کردن

  1. با اجرای دستور زیر منابع را حذف کنید.
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
  1. زیرساخت را با دستور زیر پاکسازی کنید، برای تأیید، yes را تایپ کنید
terraform destroy

۸. تبریک

شما با موفقیت یک محیط DRANET مدیریت‌شده را روی GKE Autopilot مستقر کرده‌اید، سخت‌افزار TPU v6e را به صورت پویا آماده‌سازی کرده‌اید و مدل عظیم ۳۱ میلیارد پارامتری Gemma 4 را با استفاده از vLLM ارائه داده‌اید.

با استفاده از GKE Autopilot، به Kubernetes اجازه می‌دهید تا تأمین گره‌های زیربنایی و مدیریت زیرساخت را مدیریت کند و به شما امکان می‌دهد تا کاملاً بر استقرار بار کاری هوش مصنوعی خود تمرکز کنید.

مراحل بعدی / اطلاعات بیشتر

می‌توانید درباره شبکه‌سازی GKE بیشتر بخوانید

آزمایشگاه بعدی خود را انجام دهید

به جستجوی خود با Google Cloud ادامه دهید و این آزمایشگاه‌های دیگر Google Cloud را بررسی کنید: