1. מבוא
סקירה כללית
לאחרונה נוספה ל-Cloud Run תמיכה ב-GPU. התכונה זמינה ב-Public Preview, אבל צריך להירשם לרשימת המתנה כדי להשתמש בה. אם אתם רוצים לנסות את התכונה, מלאו את הטופס הזה כדי להצטרף לרשימת ההמתנה. Cloud Run היא פלטפורמת קונטיינרים ב-Google Cloud שמאפשרת להריץ את הקוד בקונטיינר בקלות, בלי צורך לנהל אשכול.
היום, מעבדי ה-GPU שאנחנו מציעים הם מעבדי Nvidia L4 עם 24GB של vRAM. יש GPU אחד לכל מכונה של Cloud Run, והתכונה 'התאמה אוטומטית לעומס' של Cloud Run עדיין חלה. זה כולל הגדלה של מספר המופעים עד 5 (עם אפשרות להגדלת המכסה), וגם הקטנה של מספר המופעים עד אפס כשאין בקשות.
תרחיש שימוש אחד במעבדי GPU הוא הפעלה של מודלים גדולים של שפה (LLM) בקוד פתוח. במדריך הזה מוסבר איך פורסים שירות שמריץ מודל שפה גדול (LLM).
השירות הוא שירות קצה עורפי שמריץ את vLLM, מנוע הסקה למערכות ייצור. בשיעור הזה נעשה שימוש ב-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=us-central1 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 User.
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 us-central1
בשלב הבא, יוצרים Dockerfile
שישלב את ה-Secret מ-Secret Manager. מידע נוסף על האפשרות Docker buildx –secrets זמין כאן.
FROM vllm/vllm-openai:latest 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} \ ${MAX_MODEL_LEN:+--max-model-len "$MAX_MODEL_LEN"}
עכשיו יוצרים קובץ 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: 'us-central1-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
הבנייה יכולה להימשך כ-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 us-central1
בשלב הבא, מריצים את הפקודה 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
.