1. מבוא
סקירה כללית
ב-codelab הזה תלמדו להשתמש במשימות של Cloud Run כדי להריץ הסקת נתונים בכמות גדולה באמצעות LLM של Llama 3.2-1b של Meta ו-vLLM שמופעל על ידי GPU של Cloud Run Jobs. תכתבו את התוצאות ישירות ב-Cloud Storage באמצעות חיבור נפח אחסון ב-Cloud Run.
מה תלמדו
- איך מבצעים הסקת מסקנות באצווה באמצעות Cloud Run Jobs GPU
- איך כותבים ב-Cloud Storage באמצעות הטענות של נפח אחסון ב-Cloud Run
2. לפני שמתחילים
הפעלת ממשקי API
לפני שמתחילים להשתמש בקודלאב הזה, צריך להפעיל את ממשקי ה-API הבאים:
gcloud services enable run.googleapis.com \
cloudbuild.googleapis.com \
secretmanager.googleapis.com \
artifactregistry.googleapis.com
מכסת GPU
מגישים בקשה להגדלת המכסה באזור נתמך. המכסה היא nvidia_l4_gpu_allocation_no_zonal_redundancy
, בקטע Cloud Run Admin API.
הערה: אם אתם משתמשים בפרויקט חדש, יכול להיות שיחלפו כמה דקות בין הפעלת ה-API לבין הופעת המכסות בדף הזה.
פרצוף מחבק
בקודלאב הזה נעשה שימוש במודל שמתארח ב-Hugging Face. כדי לקבל את המודל הזה, צריך לבקש אסימון גישה של משתמש ב-Hugging Face עם הרשאת 'קריאה'. בהמשך נתייחס אליו בתור YOUR_HF_TOKEN
.
כדי להשתמש במודל, תצטרכו גם לאשר את תנאי השימוש: https://huggingface.co/meta-llama/Llama-3.2-1B
3. הגדרה ודרישות
בקטע הזה מפורטות הוראות להגדרת המשאבים הבאים:
- חשבון שירות ב-IAM והרשאות IAM משויכות.
- סוד ב-Secret Manager לאחסון האסימון של Hugging Face.
- קטגוריה של Cloud Storage לאחסון תוצאת ההסקה.
כדי להגדיר את המשאבים הנדרשים:
- מגדירים את משתני הסביבה ל-Codelab הזה:
export PROJECT_ID=<your_project_id> export REGION=<your_region> export HF_TOKEN=<YOUR_HF_TOKEN> export SERVICE_ACCOUNT=inference-service-account export SERVICE_ACCOUNT_EMAIL=${SERVICE_ACCOUNT}@${PROJECT_ID}.iam.gserviceaccount.com export SECRET_ID=hugging-face-token export BUCKET_NAME=inference-codelab-${PROJECT_ID}
- יוצרים את חשבון השירות באמצעות הפקודה:
gcloud iam service-accounts create ${SERVICE_ACCOUNT} \ --display-name="Service account for batch inference codelab"
- משתמשים ב-Secret Manager כדי לאחסן אסימון גישה של Hugging Face:
gcloud secrets create $SECRET_ID \ --replication-policy="automatic" printf $HF_TOKEN | gcloud secrets versions add $SECRET_ID --data-file=-
- מקצים לחשבון השירות את התפקיד 'גישה לסוד ב-Secret Manager':
gcloud secrets add-iam-policy-binding $SECRET_ID \ --member serviceAccount:$SERVICE_ACCOUNT_EMAIL \ --role='roles/secretmanager.secretAccessor'
- יוצרים קטגוריה לאירוח המודל שעבר כוונון:
gcloud storage buckets create -l us-central1 gs://${BUCKET_NAME}
- מעניקים לחשבון השירות גישה לקטגוריה:
gcloud storage buckets add-iam-policy-binding gs://$BUCKET_NAME \ --member=serviceAccount:$SERVICE_ACCOUNT_EMAIL \ --role=roles/storage.objectAdmin
- יוצרים מאגר ב-Artifact Registry לאחסון קובץ האימג' בקונטיינר. אם כבר השתמשתם בפריסות מקור של Cloud Run בפרויקט, אתם יכולים לדלג על השלב הזה.
gcloud artifacts repositories create cloud-run-source-deploy \ --repository-format=docker \ --location=$REGION \ --project=$PROJECT_ID
4. יצירת המשימה ב-Cloud Run
בקטע הזה ניצור את הקוד שמבצע את הפעולות הבאות:
- ייבוא מודל Llama מ-Hugging Face
- ביצוע היסק באצווה במודל. המשימה משתמשת ב-GPU יחיד ברמה L4 בתהליך הזה.
- כתיבת התוצאות בדיסק המקומי. הנתונים נכתבים ב-Cloud Storage באמצעות הטענות של נפחים.
כדי ליצור את המשימה ב-Cloud Run ואת קובץ ה-Dockerfile:
- יוצרים ספרייה לאירוח קוד המשימה של השיפור:
mkdir codelab-inference-job cd codelab-inference-job
- יוצרים קובץ בשם
main.py
# SPDX-License-Identifier: Apache-2.0 from vllm import LLM, SamplingParams # Sample prompts. prompts = [ "Cloud Run is", "The future of AI is", "The capital of Germany is", "python as a programming language is", ] # Create a sampling params object. sampling_params = SamplingParams(temperature=0.8, top_p=0.95) # Create an LLM. llm = LLM(model="meta-llama/Llama-3.2-1B") # Generate texts from the prompts. The output is a list of RequestOutput objects # that contain the prompt, generated text, and other information. outputs = llm.generate(prompts, sampling_params) # Save the outputs to disk with open("/results/output.txt", "w") as f: for output in outputs: prompt = output.prompt generated_text = output.outputs[0].text f.write(f"Prompt: {prompt!r}, Generated text: {generated_text!r}\n") print(f"Wrote {len(outputs)} to disk.")
- יצירת
Dockerfile
:FROM python:3.12 ADD main.py . RUN python -m pip install --upgrade pip setuptools RUN pip install vllm CMD ["python", "./main.py"]
5. פריסה והפעלה של המשימה
בשלב הזה תיצורו את המשימה ב-Cloud Run באמצעות פריסה של מקור ב-Cloud Run, ולאחר מכן מריצים אותה. השלב הזה כולל גם את הדגלים של הצמדת נפח האחסון ב-Cloud Run כדי לאחסן את התוצאות.
- יוצרים את המשימה ב-Cloud Run:
הפקודה הזו יוצרת את האימג' מהמקור ומפרסה את המשימה. התהליך יימשך זמן מה.gcloud beta run jobs deploy inference-job \ --region $REGION \ --source . \ --gpu=1 \ --set-secrets HF_TOKEN=${SECRET_ID}:latest \ --add-volume name=results,type=cloud-storage,bucket=${BUCKET_NAME} \ --add-volume-mount volume=results,mount-path=/results \ --service-account $SERVICE_ACCOUNT_EMAIL
- מריצים את המשימה:
השלמת המשימה אורכת כמה דקות. אפשר לבדוק את הסטטוס באמצעות הקישור שסופק בפלט של הפקודה האחרונה.gcloud run jobs execute inference-job --region $REGION --async
אישור הצלחה
כדי לוודא שהמשימה בוצעה בהצלחה, בודקים את היומנים של המשימה כפי שמופיע בפלט של הפקודה האחרונה.
בודקים את התוצאות בקטגוריה של Cloud Storage:
במסוף:
- עוברים אל Cloud Storage.
- בוחרים את הקטגוריה שמתחילה ב-
inference-codelab
. - יש לבחור באפשרות
output.txt
. - לוחצים על כתובת URL מאומתת כדי להציג את התוכן בדפדפן.
תוכן הקובץ צריך לכלול את ארבע ההנחיות ואת הפלט שלהן.
6. מעולה!
כל הכבוד על השלמת ה-Codelab!
מומלץ לעיין במסמכי העזרה של Cloud Run.
מה עסקנו בו
- איך מבצעים הסקת מסקנות באצווה באמצעות GPU של Cloud Run Jobs
- איך כותבים ב-Cloud Storage באמצעות הטענות של נפח אחסון ב-Cloud Run
7. הסרת המשאבים
כדי למחוק את המשימה ב-Cloud Run, נכנסים למסוף Cloud של Cloud Run בכתובת https://console.cloud.google.com/run ומוחקים את המשימה inference-job
.
כדי למחוק את הפרויקט כולו, עוברים אל Manage Resources (ניהול משאבים), בוחרים את הפרויקט שיצרתם בשלב 2 ובוחרים באפשרות Delete (מחיקה). אם תמחקו את הפרויקט, תצטרכו לשנות את הפרויקטים ב-Cloud SDK. כדי להציג את רשימת כל הפרויקטים הזמינים, מריצים את הפקודה gcloud projects list
.