במדריך הזה נסביר איך לפרוס ולהכניס לשימוש בסביבת הייצור מודל שפה gpt-oss-120b באמצעות מסגרת vLLM.
פורסים את המודל הזה באשכול Autopilot של Google Kubernetes Engine (GKE) ומשתמשים במכונה וירטואלית אחת מסוג A4 עם 8 יחידות GPU מסוג B200.
המדריך הזה מיועד למהנדסי למידת מכונה (ML), לאדמינים ולאופרטורים של פלטפורמות ולמומחים בתחום הנתונים וה-AI שרוצים להשתמש ביכולות של Kubernetes לניהול קונטיינרים כדי לטפל בעומסי עבודה של הסקת מסקנות.
מטרות
- אפשר לגשת אל
gpt-oss-120bבאמצעות Hugging Face. - הכנת הסביבה.
- יוצרים אשכול GKE במצב Autopilot.
- יוצרים סוד של Kubernetes לפרטי הכניסה של Hugging Face.
- פריסת קונטיינר vLLM לאשכול GKE.
- אינטראקציה עם מודל השפה gpt-oss באמצעות curl.
- לפנות.
עלויות
במדריך הזה נעשה שימוש ברכיבים של Google Cloud שחלים עליהם חיובים, כולל:
כדי ליצור הערכת עלויות על סמך השימוש החזוי, אתם יכולים להשתמש במחשבון עלויות.
לפני שמתחילים
- נכנסים לחשבון Google Cloud . אם אתם משתמשים חדשים ב- Google Cloud, צרו חשבון כדי שתוכלו להעריך את הביצועים של המוצרים שלנו בתרחישים מהעולם האמיתי. לקוחות חדשים מקבלים בחינם גם קרדיט בשווי 300$ להרצה, לבדיקה ולפריסה של עומסי העבודה.
-
התקינו את ה-CLI של Google Cloud.
-
אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.
-
כדי לאתחל את ה-CLI של gcloud, הריצו את הפקודה הבאה:
gcloud init -
יוצרים או בוחרים Google Cloud פרויקט.
תפקידים שנדרשים כדי לבחור או ליצור פרויקט
- Select a project: כדי לבחור פרויקט לא צריך תפקיד IAM ספציפי – אפשר לבחור כל פרויקט שקיבלתם בו תפקיד.
-
יצירת פרויקט: כדי ליצור פרויקט, צריך את התפקיד Project Creator (יצירת פרויקטים) (
roles/resourcemanager.projectCreator), שכולל את ההרשאהresourcemanager.projects.create. איך מקצים תפקידים
-
יוצרים Google Cloud פרויקט:
gcloud projects create PROJECT_ID
מחליפים את
PROJECT_IDבשם של פרויקט Google Cloud שיוצרים. -
בוחרים את הפרויקט שיצרתם: Google Cloud
gcloud config set project PROJECT_ID
מחליפים את
PROJECT_IDבשם הפרויקט ב- Google Cloud .
מפעילים את ממשק ה-API הנדרש:
תפקידים שנדרשים להפעלת ממשקי API
כדי להפעיל ממשקי API, צריך את תפקיד ה-IAM 'אדמין של Service Usage' (
roles/serviceusage.serviceUsageAdmin), שכולל את ההרשאהserviceusage.services.enable. איך מקצים תפקידיםgcloud services enable container.googleapis.com
-
התקינו את ה-CLI של Google Cloud.
-
אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.
-
כדי לאתחל את ה-CLI של gcloud, הריצו את הפקודה הבאה:
gcloud init -
יוצרים או בוחרים Google Cloud פרויקט.
תפקידים שנדרשים כדי לבחור או ליצור פרויקט
- Select a project: כדי לבחור פרויקט לא צריך תפקיד IAM ספציפי – אפשר לבחור כל פרויקט שקיבלתם בו תפקיד.
-
יצירת פרויקט: כדי ליצור פרויקט, צריך את התפקיד Project Creator (יצירת פרויקטים) (
roles/resourcemanager.projectCreator), שכולל את ההרשאהresourcemanager.projects.create. איך מקצים תפקידים
-
יוצרים Google Cloud פרויקט:
gcloud projects create PROJECT_ID
מחליפים את
PROJECT_IDבשם של פרויקט Google Cloud שיוצרים. -
בוחרים את הפרויקט שיצרתם: Google Cloud
gcloud config set project PROJECT_ID
מחליפים את
PROJECT_IDבשם הפרויקט ב- Google Cloud .
מפעילים את ממשק ה-API הנדרש:
תפקידים שנדרשים להפעלת ממשקי API
כדי להפעיל ממשקי API, צריך את תפקיד ה-IAM 'אדמין של Service Usage' (
roles/serviceusage.serviceUsageAdmin), שכולל את ההרשאהserviceusage.services.enable. איך מקצים תפקידיםgcloud services enable container.googleapis.com
-
מעניקים תפקידים לחשבון המשתמש. מריצים את הפקודה הבאה לכל אחד מהתפקידים הבאים ב-IAM:
roles/container.admingcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE
מחליפים את מה שכתוב בשדות הבאים:
-
PROJECT_ID: מזהה הפרויקט. -
USER_IDENTIFIER: המזהה של חשבון המשתמש . לדוגמה,myemail@example.com. -
ROLE: תפקיד ה-IAM שאתם מקצים לחשבון המשתמש.
-
- נכנסים לחשבון Hugging Face או יוצרים חשבון.
גישה ל-gpt-oss באמצעות Hugging Face
כדי להשתמש ב-Hugging Face כדי לגשת אל gpt-oss:
- נכנסים ל-Hugging Face ומתנסים במודל gpt-oss.
- יוצרים אסימון גישה ל-Hugging Face
read. - מעתיקים ושומרים את ערך הטוקן
read access. תשתמשו בו בהמשך המדריך הזה.
הכנת הסביבה
כדי להכין את הסביבה, מגדירים את משתני הסביבה שמוגדרים כברירת מחדל:
gcloud config set project PROJECT_ID
gcloud config set billing/quota_project PROJECT_ID
export PROJECT_ID=$(gcloud config get project)
export RESERVATION_URL=RESERVATION_URL
export REGION=REGION
export CLUSTER_NAME=CLUSTER_NAME
export HUGGING_FACE_TOKEN=HUGGING_FACE_TOKEN
export NETWORK=NETWORK_NAME
export SUBNETWORK=SUBNETWORK_NAME
מחליפים את מה שכתוב בשדות הבאים:
PROJECT_ID: המזהה של Google Cloud הפרויקט Google Cloud שבו רוצים ליצור את אשכול GKE.
RESERVATION_URL: כתובת ה-URL של ההזמנה שבה רוצים להשתמש כדי ליצור את אשכול GKE. בהתאם לפרויקט שבו קיימת ההזמנה, מציינים אחד מהערכים הבאים:ההזמנה קיימת בפרויקט:
RESERVATION_NAMEההזמנה קיימת בפרויקט אחר, והפרויקט שלכם יכול להשתמש בה:
projects/RESERVATION_PROJECT_ID/reservations/RESERVATION_NAME
REGION: האזור שבו רוצים ליצור את אשכול GKE. אפשר ליצור את האשכול רק באזור שבו קיימת ההזמנה.
CLUSTER_NAME: השם של אשכול GKE שרוצים ליצור.
HUGGING_FACE_TOKEN: אסימון הגישה של Hugging Face שיצרתם בקטע הקודם.
NETWORK_NAME: הרשת שבה נעשה שימוש באשכול GKE. מציינים אחד מהערכים הבאים:אם יצרתם רשת בהתאמה אישית, צריך לציין את שם הרשת.
אחרת, מציינים את הערך
default.
SUBNETWORK_NAME: רשת המשנה שבה נעשה שימוש באשכול GKE. מציינים אחד מהערכים הבאים:אם יצרתם רשת משנה בהתאמה אישית, צריך לציין את השם של רשת המשנה. אפשר לציין רק רשת משנה שנמצאת באותו אזור של השריין.
אחרת, מציינים את הערך
default.
יצירת אשכול GKE במצב Autopilot
כדי ליצור אשכול GKE במצב Autopilot, מריצים את הפקודה הבאה:
gcloud container clusters create-auto $CLUSTER_NAME \
--project=$PROJECT_ID \
--region=$REGION \
--release-channel=rapid \
--network=$NETWORK \
--subnetwork=$SUBNETWORK
יצירת אשכול GKE עשויה להימשך זמן מה. כדי לוודא ש- Google Cloud סיים ליצור את האשכול, עוברים אל Kubernetes clusters במסוף Google Cloud .
יצירת סוד ב-Kubernetes לפרטי הכניסה של Hugging Face
כדי ליצור סוד של Kubernetes לפרטי הכניסה של Hugging Face:
מגדירים את
kubectlלתקשורת עם אשכול GKE:gcloud container clusters get-credentials $CLUSTER_NAME \ --location=$REGIONיוצרים סוד של Kubernetes לאחסון הטוקן של Hugging Face:
kubectl create secret generic hf-secret \ --from-literal=hf_token=${HUGGING_FACE_TOKEN} \ --dry-run=client -o yaml | kubectl apply -f -
פריסת קונטיינר vLLM באשכול GKE
יוצרים קובץ
vllm-gpt-oss-120b.yamlעם הפריסה של vLLM שבחרתם:apiVersion: apps/v1 kind: Deployment metadata: name: vllm-gpt-oss-deployment spec: replicas: 1 selector: matchLabels: app: gpt-oss template: metadata: labels: app: gpt-oss ai.gke.io/model: gpt-oss-120b ai.gke.io/inference-server: vllm examples.ai.gke.io/source: user-guide spec: containers: - name: vllm-inference image: us-docker.pkg.dev/vertex-ai/vertex-vision-model-garden-dockers/pytorch-vllm-serve:20250822_0916_RC01 resources: requests: cpu: "10" memory: "128Gi" ephemeral-storage: "240Gi" nvidia.com/gpu: "8" limits: cpu: "10" memory: "128Gi" ephemeral-storage: "240Gi" nvidia.com/gpu: "8" command: ["python3", "-m", "vllm.entrypoints.openai.api_server"] args: - --model=$(MODEL_ID) - --tensor-parallel-size=2 - --host=0.0.0.0 - --port=8000 - --max-model-len=8192 - --max-num-seqs=4 env: - name: MODEL_ID value: openai/gpt-oss-120b - name: HUGGING_FACE_HUB_TOKEN valueFrom: secretKeyRef: name: hf-secret key: hf_token volumeMounts: - mountPath: /dev/shm name: dshm livenessProbe: httpGet: path: /health port: 8000 initialDelaySeconds: 1200 periodSeconds: 10 readinessProbe: httpGet: path: /health port: 8000 initialDelaySeconds: 1200 periodSeconds: 5 volumes: - name: dshm emptyDir: medium: Memory nodeSelector: cloud.google.com/gke-accelerator: nvidia-b200 cloud.google.com/reservation-name: $RESERVATION_URL cloud.google.com/reservation-affinity: "specific" cloud.google.com/gke-gpu-driver-version: latest --- apiVersion: v1 kind: Service metadata: name: oss-service spec: selector: app: gpt-oss type: ClusterIP ports: - protocol: TCP port: 8000 targetPort: 8000 --- apiVersion: monitoring.googleapis.com/v1 kind: PodMonitoring metadata: name: vllm-gpt-oss-monitoring spec: selector: matchLabels: app: gpt-oss endpoints: - port: 8000 path: /metrics interval: 30sמחילים את קובץ
vllm-gpt-oss-120b.yamlעל אשכול GKE:envsubst < vllm-gpt-oss-120b.yaml | kubectl apply -f -במהלך תהליך הפריסה, הקונטיינר צריך להוריד את מודל
gpt-oss-120bמ-Hugging Face. לכן, יכול להיות שיחלפו עד 20 דקות עד שהפריסה של הקונטיינר תושלם.כדי לראות את סטטוס ההשלמה, מריצים את הפקודה הבאה:
kubectl wait \ --for=condition=Available \ --timeout=1200s deployment/vllm-gpt-oss-deploymentהדגל
--timeout=1200sמאפשר לפקודה לעקוב אחרי הפריסה למשך עד 20 דקות.
אינטראקציה עם מודל gpt-oss באמצעות curl
כדי לאמת את מודל gpt-oss שפרסתם:
הגדרת העברה ליציאה אחרת למודל
gpt-oss:kubectl port-forward service/oss-service 8000:8000פותחים חלון טרמינל חדש. אחרי זה תוכלו לשוחח עם המודל באמצעות
curl:curl http://127.0.0.1:8000/v1/chat/completions \ -X POST \ -H "Content-Type: application/json" \ -d '{ "model": "openai/gpt-oss-120b", "messages": [ { "role": "user", "content": "Describe a sailboat in one short sentence?" } ] }'הפלט שיוצג יהיה דומה לזה:
{ "id": "chatcmpl-2235c39759c040daae23ce2addc40c0a", "object": "chat.completion", "created": 1756831629, "model": "openai/gpt-oss-120b", "choices": [ { "index": 0, "message": { "role": "assistant", "content": "A sleek vessel gliding on water, its cloth sails billowing like captured wind.", "refusal": null, "annotations": null, "audio": null, "function_call": null, "tool_calls": [], "reasoning_content": "User asks: \"Describe a sailboat in one short sentence?\" We need to produce a short sentence description. Should comply with policy. It's fine. Provide a short sentence." }, "logprobs": null, "finish_reason": "stop", "stop_reason": null } ], "service_tier": null, "system_fingerprint": null, "usage": { "prompt_tokens": 80, "total_tokens": 142, "completion_tokens": 62, "prompt_tokens_details": null }, "prompt_logprobs": null, "kv_transfer_params": null }בדיקת הביצועים של המודל
כדי לעקוב אחרי הביצועים של המודל, אפשר להשתמש בשילוב של לוח הבקרה vLLM ב-Cloud Monitoring. לוח הבקרה הזה עוזר לכם לראות מדדי ביצועים קריטיים של המודל, כמו קצב העברת טוקנים, חביון ברשת ושיעורי שגיאה. מידע נוסף זמין במאמר בנושא vLLM במאמרי העזרה בנושא מעקב.
הסרת המשאבים
כדי להימנע מחיובים בחשבון Google Cloud בגלל השימוש במשאבים שנעשה במסגרת המדריך הזה, אפשר למחוק את הפרויקט שמכיל את המשאבים, או להשאיר את הפרויקט ולמחוק את המשאבים בנפרד.
מחיקת פרויקט
כדי למחוק Google Cloud פרויקט:
gcloud projects delete PROJECT_ID
מחיקת המשאבים
כדי למחוק את הפריסה והשירות בקובץ
vllm-gpt-oss-120b.yamlואת הסוד של Kubernetes מאשכול GKE, מריצים את הפקודה הבאה:kubectl delete -f vllm-gpt-oss-120b.yaml kubectl delete secret hf-secretכדי למחוק את אשכול GKE:
gcloud container clusters delete $CLUSTER_NAME \ --region=$REGION