הרצת הערכה

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

לפני שמתחילים

התקנה של Vertex AI SDK

כדי להתקין את מודול ההערכה של Gen AI מ-Vertex AI SDK ל-Python, מריצים את הפקודה הבאה:

!pip install -q google-cloud-aiplatform[evaluation]

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

אימות של Vertex AI SDK

אחרי שמתקינים את Vertex AI SDK ל-Python, צריך לבצע אימות. בנושאים הבאים מוסבר איך לבצע אימות באמצעות Vertex AI SDK אם אתם עובדים באופן מקומי או ב-Colaboratory:

  • אם אתם מפתחים באופן מקומי, אתם צריכים להגדיר את Application Default Credentials (ADC) בסביבה המקומית:

    1. מתקינים את ה-CLI של Google Cloud ומאתחלים אותו באמצעות הפקודה הבאה:

      gcloud init
      
    2. יצירת פרטי כניסה לאימות מקומי בחשבון Google:

      gcloud auth application-default login
      

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

  • אם אתם עובדים ב-Colaboratory, מריצים את הפקודה הבאה בתא Colab כדי לבצע אימות:

    from google.colab import auth
    auth.authenticate_user()
    

    הפקודה הזו פותחת חלון שבו אפשר להשלים את האימות.

הסבר על חשבונות שירות

חשבון השירות משמש את שירות ההערכה של AI גנרטיבי כדי לקבל תחזיות מ-Gemini API ב-Vertex AI למדדים של הערכה מבוססת-מודל. חשבון השירות הזה מוקצה באופן אוטומטי בבקשה הראשונה לשירות ההערכה של AI גנרטיבי.

שם תיאור כתובת האימייל תפקיד
סוכן שירות ההערכה המהירה של Vertex AI חשבון השירות שמשמש לקבלת תחזיות להערכה מבוססת-מודל. service-PROJECT_NUMBER@gcp-sa-vertex-eval.iam.gserviceaccount.com roles/aiplatform.rapidevalServiceAgent

ההרשאות שמשויכות לסוכן השירות של ההערכה המהירה הן:

תפקיד הרשאות
סוכן שירות ההערכה המהירה של Vertex AI‏ (roles/aiplatform.rapidevalServiceAgent) aiplatform.endpoints.predict

הרצת ההערכה

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

EvalTask כיתה

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

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

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

from vertexai.evaluation import (
    EvalTask,
    PairwiseMetric,
    PairwiseMetricPromptTemplate,
    PointwiseMetric,
    PointwiseMetricPromptTemplate,
    MetricPromptTemplateExamples
)

eval_task = EvalTask(
    dataset=DATASET,
    metrics=[METRIC_1, METRIC_2, METRIC_3],
    experiment=EXPERIMENT_NAME,
)

eval_result = eval_task.evaluate(
    model=MODEL,
    prompt_template=PROMPT_TEMPLATE,
    experiment_run=EXPERIMENT_RUN,
)

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

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

שימוש בדוגמאות של מדדים מבוססי-מודל

אפשר להשתמש ישירות בקבוע המובנה Metric Prompt Template Examples ב-Vertex AI SDK. אפשר גם לשנות אותם ולשלב אותם בממשק ההגדרה של מדדים בפריסה גמישה.

כאן אפשר לראות רשימה מלאה של תבניות הנחיות למדדים, שכוללת את רוב תרחישי השימוש המרכזיים.

המסוף

כשמריצים הערכות ב-notebook של Colab Enterprise, אפשר לגשת לתבניות של הנחיות למדדים ישירות ממסוף Google Cloud .

  1. לוחצים על הקישור למחברת שירות ההערכה המועדף של AI גנרטיבי.

  2. ה-notebook נפתח ב-GitHub. לוחצים על פתיחה ב-Colab Enterprise. אם מופיע תיבת דו-שיח שמבקשת להפעיל ממשקי API, לוחצים על הפעלה.

  3. בסרגל הצד, לוחצים על הסמל הערכה של AI גנרטיבי. תיפתח החלונית Pre-built metric templates (תבניות מדדים שנוצרו מראש).

  4. בוחרים במדדים Pointwise או Pairwise.

  5. לוחצים על המדד שבו רוצים להשתמש, כמו Fluency (שטף הדיבור). תוצג דוגמת הקוד למדד.

  6. לוחצים על העתקה כדי להעתיק את דוגמת הקוד. אופציונלי: לוחצים על התאמה אישית כדי לשנות את השדות שהוגדרו מראש למדד.

  7. מדביקים את דוגמת הקוד בתיקיית ה-Notebook.

Vertex AI SDK

בדוגמה הבאה של Vertex AI SDK מוצג איך להשתמש במחלקה MetricPromptTemplateExamples כדי להגדיר את המדדים:

# View all the available examples of model-based metrics
MetricPromptTemplateExamples.list_example_metric_names()

# Display the metric prompt template of a specific example metric
print(MetricPromptTemplateExamples.get_prompt_template('fluency'))

# Use the pre-defined model-based metrics directly
eval_task = EvalTask(
    dataset=EVAL_DATASET,
    metrics=[MetricPromptTemplateExamples.Pointwise.FLUENCY],
)

eval_result = eval_task.evaluate(
    model=MODEL,
)

שימוש בממשק מבוסס-תבניות של מדדים מבוססי-מודלים

כדי להתאים אישית את המדדים, מאכלסים שדות כמו Criteria ו-Rating Rubrics באמצעות המחלקות PointwiseMetricPromptTemplate ו-PairwiseMetricPromptTemplate ב-Vertex AI SDK. לשדות מסוימים, כמו Instruction, מוקצה ערך ברירת מחדל אם לא מספקים קלט.

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

מידע נוסף זמין בקטע 'מבנה של תבנית הנחיה למדד' במאמר תבניות הנחיות למדדים.

# Define a pointwise metric with two custom criteria
custom_text_quality = PointwiseMetric(
    metric="custom_text_quality",
    metric_prompt_template=PointwiseMetricPromptTemplate(
        criteria={
          "fluency": "Sentences flow smoothly and are easy to read, avoiding awkward phrasing or run-on sentences. Ideas and sentences connect logically, using transitions effectively where needed.",
          "entertaining": "Short, amusing text that incorporates emojis, exclamations and questions to convey quick and spontaneous communication and diversion.",
        },
        rating_rubric={
          "1": "The response performs well on both criteria.",
          "0": "The response is somewhat aligned with both criteria",
          "-1": "The response falls short on both criteria",
        },
        input_variables=["prompt"],
    ),
)

# Display the serialized metric prompt template
print(custom_text_quality.metric_prompt_template)

# Run evaluation using the custom_text_quality metric
eval_task = EvalTask(
    dataset=EVAL_DATASET,
    metrics=[custom_text_quality],
)
eval_result = eval_task.evaluate(
    model=MODEL,
)

שימוש בממשק SDK חופשי מבוסס-מודל

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

# Define a pointwise multi-turn chat quality metric
pointwise_chat_quality_metric_prompt = """Evaluate the AI's contribution to a meaningful conversation, considering coherence, fluency, groundedness, and conciseness.
 Review the chat history for context. Rate the response on a 1-5 scale, with explanations for each criterion and its overall impact.

# Conversation History
{history}

# Current User Prompt
{prompt}

# AI-generated Response
{response}
"""

freeform_multi_turn_chat_quality_metric = PointwiseMetric(
    metric="multi_turn_chat_quality_metric",
    metric_prompt_template=pointwise_chat_quality_metric_prompt,
)

# Run evaluation using the freeform_multi_turn_chat_quality_metric metric
eval_task = EvalTask(
    dataset=EVAL_DATASET,
    metrics=[freeform_multi_turn_chat_quality_metric],
)
eval_result = eval_task.evaluate(
    model=MODEL,
)

הערכה של מודל תרגום

כדי להעריך את מודל התרגום, אפשר לציין את המדדים BLEU,‏ MetricX או COMET כמדדי הערכה כשמשתמשים ב-Vertex AI SDK.

#Prepare the dataset for evaluation.
sources = [
    "Dem Feuer konnte Einhalt geboten werden",
    "Schulen und Kindergärten wurden eröffnet.",
]

responses = [
    "The fire could be stopped",
    "Schools and kindergartens were open",
]

references = [
    "They were able to control the fire.",
    "Schools and kindergartens opened",
]

eval_dataset = pd.DataFrame({
    "source": sources,
    "response": responses,
    "reference": references,
})

# Set the metrics.

metrics = [
    "bleu",
    pointwise_metric.Comet(),
    pointwise_metric.MetricX(),
]

eval_task = evaluation.EvalTask(
    dataset=eval_dataset,
    metrics=metrics,
)
eval_result = eval_task.evaluate()

הרצת הערכה עם השוואות מבוססות-מחשוב

אפשר להשתמש במדדים מבוססי-חישוב בנפרד או יחד עם מדדים מבוססי-מודל.

# Combine computation-based metrics "ROUGE" and "BLEU" with model-based metrics
eval_task = EvalTask(
    dataset=EVAL_DATASET,
    metrics=["rouge_l_sum", "bleu", custom_text_quality],
)
eval_result = eval_task.evaluate(
    model=MODEL,
)

הרצת הערכות בקנה מידה נרחב

אם יש לכם מערכי נתונים גדולים להערכה או שאתם מריצים הערכות בסביבת ייצור באופן תקופתי, אתם יכולים להשתמש ב-EvaluateDataset API בשירות ההערכה של AI גנרטיבי כדי להריץ הערכות בהיקף נרחב.

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

  • PROJECT_NUMBER: מספר הפרויקט.
  • DATASET_URI: הנתיב ב-Cloud Storage לקובץ JSONL שמכיל מקרים להערכה. כל שורה בקובץ צריכה לייצג מופע יחיד, עם מפתחות שמתאימים לשדות קלט שהוגדרו על ידי המשתמש ב-metric_prompt_template (למדדים שמבוססים על מודלים) או לפרמטרים של קלט שנדרשים (להשוואות מבוססות-מחשוב). אפשר לציין רק קובץ JSONL אחד. הדוגמה הבאה היא שורה של מופע הערכה נקודתי:
    {"response": "The Roman Senate was filled with exuberance due to Pompey's defeat in Asia."}
  • METRIC_SPEC: מפרטי מדדים שבהם אתם משתמשים להערכה. יכול להיות מפרט אחד או יותר. אפשר להשתמש במפרטי המדדים הבאים כשמריצים הערכות בהיקף נרחב: "pointwise_metric_spec",‏ "pairwise_metric_spec",‏ "exact_match_spec", "bleu_spec" ו-"rouge_spec".
  • METRIC_SPEC_FIELD_NAME: השדות הנדרשים למפרט המדד שבחרתם. לדוגמה, "metric_prompt_template"
  • METRIC_SPEC_FIELD_CONTENT: תוכן השדה של מפרט המדד שבחרתם. לדוגמה, אפשר להשתמש בתוכן השדה הבא להערכה נקודתית: "Evaluate the fluency of this sentence: {response}. Give score from 0 to 1. 0 - not fluent at all. 1 - very fluent."
  • OUTPUT_BUCKET: השם של קטגוריית Cloud Storage שבה רוצים לאחסן את תוצאות ההערכה.

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

POST https://us-central1-aiplatform.googleapis.com/v1beta1/projects/PROJECT_NUMBER/locations/us-central1/evaluateDataset

גוף בקשת JSON:

{
  "dataset": {
    "gcs_source": {
      "uris": "DATASET_URI"
    }
  },
  "metrics": [
    {
      METRIC_SPEC: {
        METRIC_SPEC_FIELD_NAME: METRIC_SPEC_FIELD_CONTENT
      }
    }
  ],
  "output_config": {
    "gcs_destination": {
      "output_uri_prefix": "OUTPUT_BUCKET"
    }
  }
}

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

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://us-central1-aiplatform.googleapis.com/v1beta1/projects/PROJECT_NUMBER/locations/us-central1/evaluateDataset"

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://us-central1-aiplatform.googleapis.com/v1beta1/projects/PROJECT_NUMBER/locations/us-central1/evaluateDataset" | Select-Object -Expand Content

אתם אמורים לקבל תגובת JSON שדומה לזו:

אפשר להשתמש ב-OPERATION_ID שמתקבל בתגובה כדי לבקש את סטטוס ההערכה:

curl -X GET \
  -H "Authorization: Bearer "$(gcloud auth application-default print-access-token) \
  -H "Content-Type: application/json; charset=utf-8" \
  "https://us-central1-aiplatform.googleapis.com/v1beta1/projects/PROJECT_NUMBER/locations/us-central1/operations/OPERATION_ID"

התאמה אישית נוספת של מדדים

אם אתם רוצים להתאים אישית את המדדים, למשל לבחור מודל שופט אחר למדדים שמבוססים על מודל, או להגדיר מדד חדש שמבוסס על חישוב, אתם יכולים להשתמש במחלקה CustomMetric ב-Vertex AI SDK. לפרטים נוספים, אפשר לעיין במחברות הבאות:

הפעלת הערכה מבוססת-מודל עם מכסות ומגבלות קצב מוגדלות

בקשת הערכה אחת למדד שמבוסס על מודל מובילה לכמה בקשות בסיסיות ל-Gemini API ב-Vertex AI, וצורכת מכסה למודל השופט. במקרים הבאים מומלץ להגדיר מגבלת קצב גבוהה יותר לשירות ההערכה:

  • נפח נתונים גדול יותר: אם אתם מעבדים כמות גדולה משמעותית של נתונים באמצעות המדדים שמבוססים על מודלים, יכול להיות שתגיעו למכסת ברירת המחדל של בקשות לדקה (RPM). הגדלת המכסה מאפשרת לכם לטפל בנפח הגדול יותר בלי לפגוע בביצועים או לגרום להפרעות.

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

  • משימות הערכה מורכבות: מכסת RPM גבוהה יותר מבטיחה שיש לכם מספיק קיבולת לביצוע הערכות שצורכות הרבה משאבים למשימות מורכבות או לכמויות גדולות של טקסט.

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

אם אתם משתמשים במודל השופט שמוגדר כברירת מחדל gemini-2.0-flash או במודלים חדשים יותר, מומלץ להשתמש בהקצאת משאבים לפי התפוקה שנקבעה כדי לנהל את המכסה.

למודלים ישנים יותר מ-gemini-2.0-flash, אפשר להשתמש בהוראות הבאות כדי להגדיל את מכסת ה-RPM של מודל השופט:

  1. במסוף Google Cloud , נכנסים לדף Quotas של IAM & Admin.

    הצגת המכסות ב-Console

  2. בשדה Filter (מסנן), מציינים את המאפיין (מזהה המודל) ואת המדד (מזהה המכסה של מודלי Gemini): base_model:gemini-2.0-flash ו-Metric:aiplatform.googleapis.com/generate_content_requests_per_minute_per_project_per_base_model.

  3. לוחצים על הלחצן של התפריט more actions (פעולות נוספות) ליד המכסה שרוצים להגדיל.

  4. בתפריט הנפתח, לוחצים על עריכת נפח האחסון. החלונית Quota changes תיפתח.

  5. בקטע Edit quota (עריכת מכסה), מזינים ערך מכסה חדש.

  6. לוחצים על Submit request.

  7. בקשה להגדלת מכסה (QIR) מאושרת באימייל, והטיפול בה נמשך בדרך כלל שני ימי עסקים.

כדי להריץ הערכה באמצעות מכסת שימוש חדשה, מגדירים את הפרמטר evaluation_service_qps באופן הבא:

from vertexai.evaluation import EvalTask

# GEMINI_RPM is the requests per minute (RPM) quota for gemini-2.0-flash-001 in your region
# Evaluation Service QPS limit is equal to (gemini-2.0-flash-001 RPM / 60 sec / default number of samples)
CUSTOM_EVAL_SERVICE_QPS_LIMIT = GEMINI_RPM / 60 / 4

eval_task = EvalTask(
    dataset=DATASET,
    metrics=[METRIC_1, METRIC_2, METRIC_3],
)

eval_result = eval_task.evaluate(
    evaluation_service_qps=CUSTOM_EVAL_SERVICE_QPS_LIMIT,
    # Specify a retry_timeout limit for a more responsive evaluation run
    # the default value is 600 (in seconds, or 10 minutes)
    retry_timeout=RETRY_TIMEOUT,
)

מידע נוסף על מכסות ומגבלות זמין במאמרים בנושא מכסות של שירות הערכת AI גנרטיבי וAPI של שירות הערכת AI גנרטיבי.

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