הפעלת צינור לעיבוד נתונים לצורך הערכה

אתם יכולים להעריך את הביצועים של מודלים בסיסיים ושל מודלים מכווננים של AI גנרטיבי ב-Vertex AI. המודלים מוערכים באמצעות קבוצה של מדדים ביחס למערך נתונים להערכה שאתם מספקים. בדף הזה מוסבר איך פועל שירות צינורות ההערכה לביצוע הערכה של מודלים שמבוססת על חישובים, איך ליצור ולעצב את מערך נתוני ההערכה ואיך לבצע את ההערכה באמצעות מסוף Google Cloud , Vertex AI API או Vertex AI SDK ל-Python.

איך פועלת הערכת מודלים שמבוססת על חישובים

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

סוג המדדים שמשמשים להערכה תלוי במשימה שאתם מעריכים. בטבלה הבאה מוצגות המשימות הנתמכות והמדדים שמשמשים להערכת כל משימה:

משימה מדד
סיווג מיקרו F1, מאקרו F1, F1 לכל סיווג
סיכום ROUGE-L
מענה לשאלות התאמה מדויקת
יצירת טקסט ‫BLEU, ‏ ROUGE-L

מודלים נתמכים

אפשר לבצע הערכה של המודלים הבאים:

  • text-bison: גרסאות בסיסיות וגרסאות שעברו התאמה.

  • Gemini: כל המשימות חוץ מסיווג.

הכנת מערך נתונים להערכה

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

פורמט מערך הנתונים

מערך הנתונים להערכה צריך להיות בפורמט JSON Lines ‏ (JSONL), שבו כל שורה מכילה הנחיה אחת וזוג של נתוני אמת שצוינו בשדות input_text ו-output_text, בהתאמה. השדה input_text מכיל את ההנחיה שרוצים להעריך, והשדה output_text מכיל את התשובה האידיאלית להנחיה.

האורך המקסימלי של טוקן עבור input_text הוא 8,192, והאורך המקסימלי של טוקן עבור output_text הוא 1,024.

העלאת מערך נתונים להערכה ל-Cloud Storage

אתם יכולים ליצור קטגוריה חדשה ב-Cloud Storage או להשתמש בקטגוריה קיימת כדי לאחסן את קובץ קבוצת הנתונים. הקטגוריה צריכה להיות באותו אזור שבו נמצא המודל.

אחרי שהקטגוריה מוכנה, מעלים את קובץ מערך הנתונים לקטגוריה.

ביצוע הערכת מודל

אפשר להעריך מודלים באמצעות ה-API בארכיטקטורת REST או מסוף Google Cloud .

REST

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

לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

  • PROJECT_ID: Google Cloud הפרויקט שבו מורכבים רכיבי צינור העיבוד.
  • PIPELINEJOB_DISPLAYNAME: שם מוצג ל-pipelineJob.
  • LOCATION: האזור שבו יופעלו רכיבי צינור עיבוד הנתונים. בשלב הזה יש תמיכה רק ב-us-central1.
  • DATASET_URI: ה-URI של מערך הנתונים להשוואה ב-Cloud Storage. אפשר לציין URI אחד או יותר. הפרמטר הזה תומך בתווים כלליים לחיפוש. מידע נוסף על הפרמטר הזה זמין במאמר בנושא InputConfig.
  • OUTPUT_DIR: ה-URI של Cloud Storage שבו יישמר פלט ההערכה.
  • MODEL_NAME: מציינים מודל של בעל תוכן דיגיטלי או משאב של מודל שעבר התאמה אישית באופן הבא:
    • מודל בעל התוכן הדיגיטלי: publishers/google/models/MODEL@MODEL_VERSION

      לדוגמה: publishers/google/models/text-bison@002

    • מודל שעבר התאמה: projects/PROJECT_NUMBER/locations/LOCATION/models/ENDPOINT_ID

      לדוגמה: projects/123456789012/locations/us-central1/models/1234567890123456789

    משימת ההערכה לא משפיעה על פריסות קיימות של המודל או על המשאבים שלהן.

  • EVALUATION_TASK: המשימה שרוצים להעריך את המודל לגביה. משימת ההערכה מחשבת קבוצה של מדדים שרלוונטיים למשימה הספציפית הזו. הערכים הקבילים כוללים את האפשרויות הבאות:
    • summarization
    • question-answering
    • text-generation
    • classification
  • INSTANCES_FORMAT: הפורמט של מערך הנתונים. בשלב הזה יש תמיכה רק ב-jsonl. מידע נוסף על הפרמטר הזה זמין במאמר בנושא InputConfig.
  • PREDICTIONS_FORMAT: הפורמט של פלט ההערכה. בשלב הזה יש תמיכה רק ב-jsonl. מידע נוסף על הפרמטר הזה זמין במאמר בנושא InputConfig.
  • MACHINE_TYPE: (אופציונלי) סוג המכונה להרצת עבודת ההערכה. ערך ברירת המחדל הוא e2-highmem-16. רשימה של סוגי המכונות הנתמכים זמינה במאמר סוגי מכונות.
  • SERVICE_ACCOUNT: (אופציונלי) חשבון השירות שישמש להפעלת משימת ההערכה. במאמר הגדרת חשבון שירות עם הרשאות גרנולריות מוסבר איך יוצרים חשבון שירות בהתאמה אישית. אם לא צוין סוכן, ייעשה שימוש בסוכן של שירות קוד בהתאמה אישית ב-Vertex AI.
  • NETWORK: (אופציונלי) השם המוגדר במלואו של רשת Compute Engine שאליה רוצים לבצע קישור בין רשתות שכנות (peering) של משימת ההערכה. הפורמט של שם הרשת הוא projects/PROJECT_NUMBER/global/networks/NETWORK_NAME. אם מציינים את השדה הזה, צריך להגדיר קישור בין רשתות שכנות ב-VPC ל-Vertex AI. אם לא מציינים רשת, עבודת ההערכה לא תהיה בעלת קישור עמיתים לאף רשת.
  • KEY_NAME: (אופציונלי) השם של מפתח ההצפנה בניהול הלקוח (CMEK). אם מוגדר, המשאבים שנוצרו על ידי עבודת ההערכה מוצפנים באמצעות מפתח ההצפנה שסופק. הפורמט של שם המפתח הוא projects/PROJECT_ID/locations/REGION/keyRings/KEY_RING/cryptoKeys/KEY. המפתח צריך להיות באותו אזור שבו נמצאת משימת ההערכה.

ה-method של ה-HTTP וכתובת ה-URL:

POST https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/pipelineJobs

גוף בקשת JSON:

{
  "displayName": "PIPELINEJOB_DISPLAYNAME",
  "runtimeConfig": {
    "gcsOutputDirectory": "gs://OUTPUT_DIR",
    "parameterValues": {
      "project": "PROJECT_ID",
      "location": "LOCATION",
      "batch_predict_gcs_source_uris": ["gs://DATASET_URI"],
      "batch_predict_gcs_destination_output_uri": "gs://OUTPUT_DIR",
      "model_name": "MODEL_NAME",
      "evaluation_task": "EVALUATION_TASK",
      "batch_predict_instances_format": "INSTANCES_FORMAT",
      "batch_predict_predictions_format: "PREDICTIONS_FORMAT",
      "machine_type": "MACHINE_TYPE",
      "service_account": "SERVICE_ACCOUNT",
      "network": "NETWORK",
      "encryption_spec_key_name": "KEY_NAME"
    }
  },
  "templateUri": "https://us-kfp.pkg.dev/vertex-evaluation/pipeline-templates/evaluation-llm-text-generation-pipeline/1.0.1"
}

כדי לשלוח את הבקשה עליכם לבחור אחת מהאפשרויות הבאות:

curl

שומרים את גוף הבקשה בקובץ בשם request.json ומריצים את הפקודה הבאה:

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/pipelineJobs"

PowerShell

שומרים את גוף הבקשה בקובץ בשם request.json ומריצים את הפקודה הבאה:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/pipelineJobs" | Select-Object -Expand Content

אתם אמורים לקבל תגובת JSON שדומה לזו: שימו לב שהערך pipelineSpec קוצר כדי לחסוך במקום.

דוגמה לפקודת curl

PROJECT_ID=myproject
REGION=us-central1
MODEL_NAME=publishers/google/models/text-bison@002
TEST_DATASET_URI=gs://my-gcs-bucket-uri/dataset.jsonl
OUTPUT_DIR=gs://my-gcs-bucket-uri/output

curl \
-X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
"https://${REGION}-aiplatform.googleapis.com/v1/projects/${PROJECT_ID}/locations/${REGION}/pipelineJobs" -d \
$'{
  "displayName": "evaluation-llm-text-generation-pipeline",
  "runtimeConfig": {
    "gcsOutputDirectory": "'${OUTPUT_DIR}'",
    "parameterValues": {
      "project": "'${PROJECT_ID}'",
      "location": "'${REGION}'",
      "batch_predict_gcs_source_uris": ["'${TEST_DATASET_URI}'"],
      "batch_predict_gcs_destination_output_uri": "'${OUTPUT_DIR}'",
      "model_name": "'${MODEL_NAME}'",
    }
  },
  "templateUri": "https://us-kfp.pkg.dev/vertex-evaluation/pipeline-templates/evaluation-llm-text-generation-pipeline/1.0.1"
}'

Python

במאמר התקנת Vertex AI SDK ל-Python מוסבר איך להתקין או לעדכן את Vertex AI SDK ל-Python. מידע נוסף מופיע ב מאמרי העזרה של Python API.

import os

from google.auth import default

import vertexai
from vertexai.preview.language_models import (
    EvaluationTextClassificationSpec,
    TextGenerationModel,
)

PROJECT_ID = os.getenv("GOOGLE_CLOUD_PROJECT")


def evaluate_model() -> object:
    """Evaluate the performance of a generative AI model."""

    # Set credentials for the pipeline components used in the evaluation task
    credentials, _ = default(scopes=["https://www.googleapis.com/auth/cloud-platform"])

    vertexai.init(project=PROJECT_ID, location="us-central1", credentials=credentials)

    # Create a reference to a generative AI model
    model = TextGenerationModel.from_pretrained("text-bison@002")

    # Define the evaluation specification for a text classification task
    task_spec = EvaluationTextClassificationSpec(
        ground_truth_data=[
            "gs://cloud-samples-data/ai-platform/generative_ai/llm_classification_bp_input_prompts_with_ground_truth.jsonl"
        ],
        class_names=["nature", "news", "sports", "health", "startups"],
        target_column_name="ground_truth",
    )

    # Evaluate the model
    eval_metrics = model.evaluate(task_spec=task_spec)
    print(eval_metrics)
    # Example response:
    # ...
    # PipelineJob run completed.
    # Resource name: projects/123456789/locations/us-central1/pipelineJobs/evaluation-llm-classification-...
    # EvaluationClassificationMetric(label_name=None, auPrc=0.53833705, auRoc=0.8...

    return eval_metrics

המסוף

כדי ליצור משימת הערכת מודל באמצעות Google Cloud המסוף:

  1. נכנסים לדף מרשם המודלים של Vertex AI במסוף Google Cloud .

    מעבר אל מרשם המודלים של Vertex AI

  2. לוחצים על שם המודל שרוצים להעריך.
  3. בכרטיסייה הערכה, לוחצים על יצירת הערכה ומגדירים אותה כך:
    • יעד: בוחרים את המשימה שרוצים להעריך.
    • עמודת יעד או שדה יעד: (סיווג בלבד) מזינים את עמודת היעד לחיזוי. לדוגמה: ground_truth.
    • נתיב המקור: מזינים או בוחרים את ה-URI של מערך הנתונים של ההערכה.
    • פורמט פלט: מזינים את הפורמט של פלט ההערכה. בשלב הזה יש תמיכה רק ב-jsonl.
    • נתיב Cloud Storage: מזינים או בוחרים את ה-URI לאחסון הפלט של ההערכה.
    • שמות כיתות: (סיווג בלבד) מזינים את רשימת שמות הכיתות האפשריים.
    • מספר צמתי מחשוב: מזינים את מספר צמתי המחשוב להרצת משימת ההערכה.
    • Machine type (סוג המכונה): בוחרים סוג מכונה לשימוש בהרצת משימת ההערכה.
  4. לוחצים על התחלת ההערכה.

צפייה בתוצאות ההערכה

תוצאות ההערכה נמצאות בספריית הפלט של Cloud Storage שציינתם כשיצרתם את משימת ההערכה. שם הקובץ הוא evaluation_metrics.json.

בנוסף, אפשר לראות את תוצאות ההערכה של מודלים שעברו התאמה במסוף Google Cloud :

  1. בקטע Vertex AI במסוף Google Cloud , עוברים לדף מרשם המודלים של Vertex AI.

    מעבר אל מרשם המודלים של Vertex AI

  2. לוחצים על שם המודל כדי לראות את מדדי ההערכה שלו.

  3. בכרטיסייה Evaluate (הערכה), לוחצים על השם של ההרצה של ההערכה שרוצים לראות.

המאמרים הבאים