1. מבוא
סקירה כללית
Cloud Run היא פלטפורמת קונטיינרים ב-Google Cloud שמאפשרת להריץ את הקוד בקונטיינר בקלות, בלי שתצטרכו לנהל אשכול. לאחרונה נוספה ל-Cloud Run תמיכה ב-GPU.
היום, מעבדי ה-GPU שאנחנו מציעים הם מעבדי Nvidia L4 עם זיכרון vRAM בנפח 24GB. יש GPU אחד לכל מכונת Cloud Run, והתאמה אוטומטית לעומס ב-Cloud Run עדיין חלה. זה כולל הגדלה של מספר המופעים עד 5 (עם אפשרות להגדלת המכסה), וגם הקטנה של מספר המופעים לאפס כשאין בקשות.
תרחיש שימוש אחד במעבדי GPU הוא הפעלה של מודלים גדולים של שפה (LLM) שהם קוד פתוח. במדריך הזה מוסבר איך פורסים שירות שמריץ מודל שפה גדול (LLM).
השירות הוא שירות קצה עורפי שמריץ את vLLM, מנוע הסקה למערכות ייצור. ב-Codelab הזה נעשה שימוש ב-Gemma 2 של Google, מודל עם 2 מיליארד פרמטרים שעבר כוונון להוראות.
מה תלמדו
- איך משתמשים ב-GPU ב-Cloud Run.
- איך משתמשים ב-Hugging Face כדי לאחזר מודל.
- איך פורסים את מודל Gemma 2 2b של Google שעבר כוונון להוראות ב-Cloud Run באמצעות vLLM כמנוע הסקה.
- איך מפעילים את שירות ה-Backend כדי להשלים משפטים.
2. הגדרה ודרישות
דרישות מוקדמות
- אתם מחוברים ל-Cloud Console.
- כבר פרסתם שירות Cloud Run. לדוגמה, אפשר לפעול לפי ההוראות שבמדריך למתחילים בנושא פריסת שירות אינטרנט מקוד מקור.
- יש לכם חשבון Hugging Face ואישרתם את הרישיון של Gemma 2 2b בכתובת https://huggingface.co/google/gemma-2-2b-it. אחרת, לא תוכלו להוריד את המודל.
- יצרתם אסימון גישה עם גישה למודל google/gemma-2-2b-it.
הפעלת Cloud Shell
- ב-Cloud Console, לוחצים על Activate Cloud Shell
.

אם זו הפעם הראשונה שאתם מפעילים את Cloud Shell, יוצג לכם מסך ביניים עם תיאור של השירות. אם הוצג לכם מסך ביניים, לחצו על המשך.

יחלפו כמה רגעים עד שההקצאה והחיבור ל-Cloud Shell יושלמו.

המכונה הווירטואלית הזו כוללת את כל הכלים הדרושים למפתחים. יש בה ספריית בית בנפח מתמיד של 5GB והיא פועלת ב-Google Cloud, מה שמשפר מאוד את הביצועים והאימות של הרשת. אפשר לבצע את רוב העבודה ב-codelab הזה, אם לא את כולה, באמצעות דפדפן.
אחרי שמתחברים ל-Cloud Shell, אמור להופיע אימות והפרויקט אמור להיות מוגדר לפי מזהה הפרויקט.
- מריצים את הפקודה הבאה ב-Cloud Shell כדי לוודא שהאימות בוצע:
gcloud auth list
פלט הפקודה
Credentialed Accounts
ACTIVE ACCOUNT
* <my_account>@<my_domain.com>
To set the active account, run:
$ gcloud config set account `ACCOUNT`
- מריצים את הפקודה הבאה ב-Cloud Shell כדי לוודא שפקודת gcloud מכירה את הפרויקט:
gcloud config list project
פלט הפקודה
[core] project = <PROJECT_ID>
אם הוא לא מוגדר, אפשר להגדיר אותו באמצעות הפקודה הבאה:
gcloud config set project <PROJECT_ID>
פלט הפקודה
Updated property [core/project].
3. הפעלת ממשקי API והגדרת משתני סביבה
הפעלת ממשקי API
לפני שמתחילים להשתמש ב-codelab הזה, צריך להפעיל כמה ממשקי API. ב-codelab הזה נדרש שימוש בממשקי ה-API הבאים. כדי להפעיל את ממשקי ה-API האלה, מריצים את הפקודה הבאה:
gcloud services enable run.googleapis.com \
cloudbuild.googleapis.com \
secretmanager.googleapis.com \
artifactregistry.googleapis.com
הגדרת משתני סביבה
אתם יכולים להגדיר משתני סביבה שישמשו אתכם לאורך כל ה-codelab הזה.
HF_TOKEN=<YOUR_HUGGING_FACE_TOKEN> PROJECT_ID=<YOUR_PROJECT_ID> REGION=europe-west1 SERVICE_NAME=vllm-gemma-2-2b-it AR_REPO_NAME=vllm-gemma-2-2b-it-repo SERVICE_ACCOUNT=vllm-gemma-2-2b-it SERVICE_ACCOUNT_ADDRESS=$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com
4. יצירה של חשבון שירות
חשבון השירות הזה משמש לבניית שירות Cloud Run ולגישה לסוד מ-Secret Manager.
קודם יוצרים את חשבון השירות באמצעות הפקודה הבאה:
gcloud iam service-accounts create $SERVICE_ACCOUNT \ --display-name="Cloud Run vllm SA to access secret manager"
בשלב השני, מקצים לחשבון השירות את התפקיד 'משתמש ב-Vertex AI'.
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:$SERVICE_ACCOUNT_ADDRESS \ --role=roles/secretmanager.secretAccessor
עכשיו יוצרים ב-Secret Manager סוד בשם HF_TOKEN בשביל אסימון הגישה של Hugging Face. Cloud Build משתמש בחשבון השירות כדי לגשת לסוד הזה בזמן הבנייה, כדי להוריד את מודל Gemma 2 (2B) מ-Hugging Face. מידע נוסף על סודות ועל Cloud Build
printf $HF_TOKEN | gcloud secrets create HF_TOKEN --data-file=-
בנוסף, צריך לתת לחשבון השירות שמוגדר כברירת מחדל ב-Compute גישה לסוד HF_TOKEN ב-Secret Manager כשיוצרים את התמונה.
PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format="value(projectNumber)")
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:$PROJECT_NUMBER-compute@developer.gserviceaccount.com" \
--role="roles/secretmanager.secretAccessor"
5. יצירת התמונה ב-Artifact Registry
קודם יוצרים מאגר ב-Artifact Registry.
gcloud artifacts repositories create $AR_REPO_NAME \ --repository-format docker \ --location $REGION
בשלב הבא, יוצרים Dockerfile שישלב את ה-Secret מ-Secret Manager. מידע נוסף על האפשרות Docker buildx –secrets זמין כאן.
FROM vllm/vllm-openai:v0.11.0
ENV HF_HOME=/model-cache
RUN --mount=type=secret,id=HF_TOKEN HF_TOKEN=$(cat /run/secrets/HF_TOKEN) \
huggingface-cli download google/gemma-2-2b-it
ENV HF_HUB_OFFLINE=1
ENTRYPOINT python3 -m vllm.entrypoints.openai.api_server \
--port ${PORT:-8000} \
--model ${MODEL_NAME:-google/gemma-2-2b-it} \
--gpu-memory-utilization 0.85 \
--max-num-seqs 256 \
--max-model-len 4096
עכשיו יוצרים קובץ cloudbuild.yaml
steps:
- name: 'gcr.io/cloud-builders/docker'
id: build
entrypoint: 'bash'
secretEnv: ['HF_TOKEN']
args:
- -c
- |
SECRET_TOKEN="$$HF_TOKEN" docker buildx build --tag=${_IMAGE} --secret id=HF_TOKEN .
availableSecrets:
secretManager:
- versionName: 'projects/${PROJECT_ID}/secrets/HF_TOKEN/versions/latest'
env: 'HF_TOKEN'
images: ["${_IMAGE}"]
substitutions:
_IMAGE: '${_LOCATION}-docker.pkg.dev/${PROJECT_ID}/vllm-gemma-2-2b-it-repo/vllm-gemma-2-2b-it'
options:
dynamicSubstitutions: true
machineType: "E2_HIGHCPU_32"
לבסוף, שולחים גרסת build.
gcloud builds submit --config=cloudbuild.yaml --substitutions=_LOCATION=$REGION
הבנייה יכולה להימשך כ-8 דקות.
6. פריסת השירות
עכשיו אפשר לפרוס את האימג' ב-Cloud Run. הפריסה תימשך כ-5 דקות. תצטרכו להגדיל את ההשהיה הראשונית של בדיקת תקינות בכמה דקות כדי לתת לתמונה יותר זמן להיטען. אחרת, תקבלו שגיאה של חריגה מהמועד האחרון מבדיקת התקינות.
gcloud beta run deploy $SERVICE_NAME \ --image=$REGION-docker.pkg.dev/$PROJECT_ID/$AR_REPO_NAME/$SERVICE_NAME \ --service-account $SERVICE_ACCOUNT_ADDRESS \ --cpu=8 \ --memory=32Gi \ --gpu=1 \ --port=8000 \ --gpu-type=nvidia-l4 \ --region $REGION \ --no-allow-unauthenticated \ --max-instances 3 \ --no-cpu-throttling \ --no-gpu-zonal-redundancy \ --startup-probe tcpSocket.port=8000,initialDelaySeconds=240,failureThreshold=1,timeoutSeconds=240,periodSeconds=240
7. בדיקת השירות
אחרי הפריסה, אפשר להשתמש בשירות ה-proxy לפיתוח של Cloud Run שמוסיף אסימון מזהה באופן אוטומטי, או להשתמש ב-curl כדי לגשת ישירות לכתובת ה-URL של השירות.
שימוש בשירות ה-Proxy לפיתוח ב-Cloud Run
כדי להשתמש בשירות פרוקסי הפיתוח של Cloud Run, אפשר לבצע את השלבים הבאים:
קודם מריצים את הפקודה הבאה
gcloud run services proxy $SERVICE_NAME --region $REGION
בשלב הבא, מריצים את הפקודה curl בשירות
curl -X POST http://localhost:8080/v1/completions \
-H "Content-Type: application/json" \
-d '{
"model": "google/gemma-2-2b-it",
"prompt": "Cloud Run is a",
"max_tokens": 128,
"temperature": 0.90
}'
שימוש ישיר בכתובת ה-URL של השירות
קודם כל, מאחזרים את כתובת ה-URL של השירות שנפרס.
SERVICE_URL=$(gcloud run services describe $SERVICE_NAME --region $REGION --format 'value(status.url)')
הפעלת curl בשירות
curl -X POST $SERVICE_URL/v1/completions \
-H "Authorization: bearer $(gcloud auth print-identity-token)" \
-H "Content-Type: application/json" \
-d '{
"model": "google/gemma-2-2b-it",
"prompt": "Cloud Run is a",
"max_tokens": 128,
"temperature": 0.90
}'
תוצאות
אתם אמורים לראות תוצאות דומות לאלה:
{"id":"cmpl-e0e6924d4bfd4d918383c87cba5e25ac","object":"text_completion","created":1723853023,"model":"google/gemma-2-2b","choices":[{"index":0,"text":" serverless compute platform that lets you write your backend code in standard languages, such as Java, Go, PHP and Python.\n\nYou can deploy your function as a REST API that scales on demand and allows you to add additional security features such as HTTPS.\n\nTo write code for an Android app with Cloud Run, you need to use the GraalVM. This is because while Node.js is a more commonly known node-based platform, GraalVM is a virtual machine (VM) to run native code in the Cloud Run environment.\n\nNow you need graal.vm/java-11-jre.jar, the","logprobs":null,"finish_reason":"length","stop_reason":null}],"usage":{"prompt_tokens":5,"total_tokens":133,"completion_tokens":128}}
8. מעולה!
כל הכבוד, סיימתם את ה-Codelab!
מומלץ לעיין במסמכי התיעוד של Cloud Run
מה למדנו
- איך משתמשים ב-GPU ב-Cloud Run.
- איך משתמשים ב-Hugging Face כדי לאחזר מודל.
- איך פורסים את מודל Gemma 2 (2B) של Google ב-Cloud Run באמצעות vLLM כמנוע הסקה.
- איך מפעילים את שירות ה-Backend כדי להשלים משפטים.
9. הסרת המשאבים
כדי להימנע מחיובים לא מכוונים (לדוגמה, אם שירותי Cloud Run מופעלים בטעות יותר פעמים מההקצאה החודשית של הפעלות Cloud Run בתוכנית בחינם), אפשר למחוק את Cloud Run או את הפרויקט שיצרתם בשלב 2.
כדי למחוק את שירות Cloud Run, עוברים אל Cloud Run Cloud Console בכתובת https://console.cloud.google.com/run ומוחקים את השירות vllm-gemma-2-2b. אולי תרצו גם למחוק את vllm-gemma-2-2b חשבון השירות.
אם אתם רוצים למחוק את הפרויקט כולו, אתם יכולים להיכנס לכתובת https://console.cloud.google.com/cloud-resource-manager, לבחור את הפרויקט שיצרתם בשלב 2 וללחוץ על 'מחיקה'. אם תמחקו את הפרויקט, תצטרכו לשנות את הפרויקט ב-Cloud SDK. כדי לראות את רשימת כל הפרויקטים הזמינים, מריצים את הפקודה gcloud projects list.