מידע על Codelab זה
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
.