1. نظرة عامة
يقدّم لك هذا الدرس التطبيقي البنية الأساسية للذكاء الاصطناعي التي يمكن استخدامها لتشغيل أحمال عمل الذكاء الاصطناعي. ستعمل على ما يلي:
Google Kubernetes Engine (GKE): هي منصة أساسية لتنظيم الحاويات.
شبكة DRANET المُدارة في GKE: شبكة لتخصيص الموارد الديناميكية تتيح تخصيص بنى أساسية للربط البيني عالي السرعة مباشرةً لحاويات وحدات معالجة الموتّرات الخاصة بك.
وحدة معالجة الموتّرات (TPU): شرائح تسريع مخصّصة من Google.
لضبط الإعدادات، عليك نشر شبكة VPC مخصّصة ومجموعة GKE في وضع التشغيل الآلي. لتفعيل DRANET المُدارة، عليك إنشاء ComputeClass وResource Claim Template. بعد ذلك، ستنفّذ عبء عمل يستخدم vLLM و Hugging Face و ComputeClass و نموذج طلب الموارد. أخيرًا، ستختبر إعدادات الشبكة والاتصال بنموذج Gemma 4.
ستستخدم الإعدادات مزيجًا من Terraform وgcloud وkubectl.
في هذه الميزة الاختبارية، ستتعرّف على كيفية تنفيذ المهمة التالية:
- إعداد شبكة VPC
- إعداد مجموعة GKE Autopilot
- أنشئ ComputeClass وResourceClaimTemplate.
- إنشاء عملية نشر تشغّل وحدات TPU وvLLM والمراقبة وGemma 4 من خلال Hugging Face
- اختبار إمكانية الاتصال بالنموذج اللغوي الكبير
في هذا الدرس التطبيقي، ستنشئ النمط التالي.
الشكل 1. 
2. إعداد خدمات Google Cloud
إعداد البيئة بالسرعة التي تناسبك
- سجِّل الدخول إلى Google Cloud Console وأنشِئ مشروعًا جديدًا أو أعِد استخدام مشروع حالي. إذا لم يكن لديك حساب على Gmail أو Google Workspace، عليك إنشاء حساب.



- اسم المشروع هو الاسم المعروض للمشاركين في هذا المشروع، وهو عبارة عن سلسلة من الأحرف لا تستخدمها واجهات برمجة تطبيقات Google، ويمكنك تعديله في أي وقت.
- رقم تعريف المشروع هو معرّف فريد لجميع مشاريع Google Cloud ولا يمكن تغييره بعد ضبطه. تنشئ Cloud Console تلقائيًا سلسلة فريدة، ولا يهمّك عادةً ما هي. في معظم دروس البرمجة، ستحتاج إلى الرجوع إلى رقم تعريف مشروعك (يُشار إليه عادةً باسم
PROJECT_ID). إذا لم يعجبك رقم التعريف الذي تم إنشاؤه، يمكنك إنشاء رقم تعريف عشوائي آخر. بدلاً من ذلك، يمكنك تجربة رقم تعريف خاص بك ومعرفة ما إذا كان متاحًا. لا يمكن تغييره بعد هذه الخطوة ويظلّ ساريًا طوال مدة المشروع. - للعلم، هناك قيمة ثالثة، وهي رقم المشروع، وتستخدمها بعض واجهات برمجة التطبيقات. يمكنك الاطّلاع على مزيد من المعلومات حول هذه القيم الثلاث في المستندات.
- بعد ذلك، عليك تفعيل الفوترة في Cloud Console لاستخدام موارد/واجهات برمجة تطبيقات Cloud. لن تكلفك تجربة هذا الدرس التطبيقي حول الترميز الكثير، إن وُجدت أي تكلفة على الإطلاق. لإيقاف الموارد وتجنُّب تحمّل تكاليف فوترة تتجاوز هذا البرنامج التعليمي، يمكنك حذف الموارد التي أنشأتها أو حذف المشروع. يمكن لمستخدمي Google Cloud الجدد الاستفادة من برنامج الفترة التجريبية المجانية بقيمة 300 دولار أمريكي.
بدء Cloud Shell
على الرغم من إمكانية تشغيل Google Cloud عن بُعد من الكمبيوتر المحمول، ستستخدم في هذا الدرس التطبيقي حول الترميز Google Cloud Shell، وهي بيئة سطر أوامر تعمل في السحابة الإلكترونية.
من Google Cloud Console، انقر على رمز Cloud Shell في شريط الأدوات أعلى يسار الصفحة:

لن يستغرق توفير البيئة والاتصال بها سوى بضع لحظات، وبعد الانتهاء، من المفترض أن يظهر لك ما يلي:

يتم تحميل هذه الآلة الافتراضية مزوّدة بكل أدوات التطوير التي ستحتاج إليها. توفّر هذه الخدمة دليلًا منزليًا دائمًا بسعة 5 غيغابايت، وتعمل على Google Cloud، ما يؤدي إلى تحسين أداء الشبكة والمصادقة بشكل كبير. يمكن إكمال جميع المهام في هذا الدرس العملي ضمن المتصفّح. لست بحاجة إلى تثبيت أي تطبيق.
3- إعداد البيئة باستخدام Terraform
لإجراء هذا التدريب العملي، يجب أن يكون لديك إذن الوصول إلى وحدات TPU. الإصدار الدقيق المستخدَم هو TPU v6e.
- عليك اتّباع مستند خطة TPU وتفعيل حصة TPU للحصول على إذن الوصول.
- نستخدم عملية نشر صغيرة تتطلّب 4 شرائح TPU v6e (
ct6e-standard-4t)ستكون شريحة 2x2 في منطقة واحدة. - رمز Hugging Face: يجب توفير رمز دخول لتنزيل أوزان نموذج Gemma
سننشئ شبكة VPC مخصّصة تتضمّن قواعد جدار الحماية وشبكة فرعية، ثم مجموعة في وضع الطيار الآلي. افتح Cloud Console واختَر المشروع الذي ستستخدمه.
- افتح Cloud Shell في أعلى يسار وحدة التحكّم، وتأكَّد من ظهور رقم تعريف المشروع الصحيح في Cloud Shell، وأكِّد أي طلبات تظهر لك للسماح بالوصول.

- أنشئ مجلدًا باسم
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. إنشاء نموذج Compute Class وResource Claim
علينا إنشاء مورد 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، نفِّذ الأوامر التالية. يؤدي ذلك إلى إنشاء بيان 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
- الآن، أنشئ ResourceClaimTemplate.
kubectl apply -f resourceclaimtpu.yaml
kubectl describe resourceclaimtemplate all-netdev
إنشاء سرّك
- يستخدم هذا المختبر google/gemma-4-31B-it ، لذا عليك إنشاء رمز مميّز في Hugging Face. استبدِل
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 لتوفير الأجهزة والشبكات المطلوبة تلقائيًا (وحدة معالجة الموتّرات الإصدار 6e وDRANET المُدارة)، كما يستخدم ResourceClaimTemplate لتحديد مخطط لطلب الوصول إلى هذه الشبكة العالية السرعة، وعملية نشر تربط بينهما من خلال إنشاء مطالبات شبكة فردية لكل لوحة أثناء توسيع نطاقها.
- تأكَّد من أنّك في دليل
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
- لمراقبة حالة الاكتمال، نفِّذ الأوامر التالية. ستنتظر وحدات البود إلى أن يتم توفير العقدة قبل أن تتمكّن من المتابعة، وقد يستغرق ذلك 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
- بعد إنشاء العقدة وجدولة المجموعة، يمكنك تنفيذ الأمر للاطّلاع على سجلات المجموعات. (ملاحظة: يمكنك إضافة **
-f** **علم البث**). سيستغرق ذلك ما يصل إلى **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. نفِّذ الأمر التالي:
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 المُدارة عالية السرعة بوحدة التخزين بنجاح.
6. التفاعل مع نموذج الذكاء الاصطناعي باستخدام curl
للتأكّد من صحة نموذج 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 المقاييس من حاوية vLLM على المنفذ 8000. يمكنك الانتقال إلى Google Cloud Console المراقبة -> لوحات البيانات لعرض مقاييس مثل وقت استجابة إنشاء الرموز المميزة وطول قائمة الانتظار واستخدام ذاكرة التخزين المؤقت 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. تهانينا
لقد تمكّنت من نشر بيئة DRANET مُدارة بنجاح على GKE Autopilot، وتوفير أجهزة TPU v6e ديناميكيًا، وتشغيل نموذج Gemma 4 الضخم الذي يتضمّن 31 مليار مَعلمة باستخدام vLLM.
باستخدام وضع التشغيل الآلي في GKE، يمكنك السماح لـ Kubernetes بالتعامل مع توفير العُقد الأساسية وإدارة البنية التحتية، ما يتيح لك التركيز بالكامل على نشر مهام عمل الذكاء الاصطناعي.
الخطوات التالية / مزيد من المعلومات
يمكنك الاطّلاع على مزيد من المعلومات حول شبكات GKE.
الدرس التطبيقي التالي
يمكنك مواصلة رحلتك مع Google Cloud، والاطّلاع على هذه المختبرات الأخرى في Google Cloud: