איך מפעילים הסקת נתונים בכמות גדולה (batch inference) במשימות ב-Cloud Run

איך מפעילים הסקת נתונים בכמות גדולה (batch inference) במשימות ב-Cloud Run

מידע על Codelab זה

subjectהעדכון האחרון: יוני 4, 2025
account_circleנכתב על ידי גוגלר

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 לאחסון תוצאת ההסקה.

כדי להגדיר את המשאבים הנדרשים:

  1. מגדירים את משתני הסביבה ל-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}
  2. יוצרים את חשבון השירות באמצעות הפקודה:
    gcloud iam service-accounts create ${SERVICE_ACCOUNT} \
      --display-name="Service account for batch inference codelab"
  3. משתמשים ב-Secret Manager כדי לאחסן אסימון גישה של Hugging Face:
    gcloud secrets create $SECRET_ID \
         
    --replication-policy="automatic"

    printf $HF_TOKEN
    | gcloud secrets versions add $SECRET_ID --data-file=-
  4. מקצים לחשבון השירות את התפקיד 'גישה לסוד ב-Secret Manager':
    gcloud secrets add-iam-policy-binding $SECRET_ID \
     
    --member serviceAccount:$SERVICE_ACCOUNT_EMAIL \
     
    --role='roles/secretmanager.secretAccessor'
  5. יוצרים קטגוריה לאירוח המודל שעבר כוונון:
    gcloud storage buckets create -l us-central1 gs://${BUCKET_NAME}
  6. מעניקים לחשבון השירות גישה לקטגוריה:
    gcloud storage buckets add-iam-policy-binding gs://$BUCKET_NAME \
     
    --member=serviceAccount:$SERVICE_ACCOUNT_EMAIL \
     
    --role=roles/storage.objectAdmin
  7. יוצרים מאגר ב-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:

  1. יוצרים ספרייה לאירוח קוד המשימה של השיפור:
    mkdir codelab-inference-job
    cd codelab
    -inference-job
  2. יוצרים קובץ בשם 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.")
  3. יצירת 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 כדי לאחסן את התוצאות.

  1. יוצרים את המשימה ב-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
    הפקודה הזו יוצרת את האימג' מהמקור ומפרסה את המשימה. התהליך יימשך זמן מה.
  2. מריצים את המשימה:
    gcloud run jobs execute inference-job --region $REGION --async
    השלמת המשימה אורכת כמה דקות. אפשר לבדוק את הסטטוס באמצעות הקישור שסופק בפלט של הפקודה האחרונה.

אישור הצלחה

כדי לוודא שהמשימה בוצעה בהצלחה, בודקים את היומנים של המשימה כפי שמופיע בפלט של הפקודה האחרונה.

בודקים את התוצאות בקטגוריה של Cloud Storage:

במסוף:

  1. עוברים אל Cloud Storage.
  2. בוחרים את הקטגוריה שמתחילה ב-inference-codelab.
  3. יש לבחור באפשרות output.txt.
  4. לוחצים על כתובת 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.