שיפור המודלים של Gemini באמצעות שיפור לפי העדפות

במאמר הזה מוסבר איך לשפר את ההעדפות של מודל Gemini.

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

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

יצירת משימת שיפור

המסוף

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

  1. בקטע Gemini Enterprise Agent Platform במסוף Google Cloud , עוברים לדף Agent Platform Studio.

    מעבר אל Agent Platform Studio

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

  3. בוחרים באפשרות התאמת העדפות.

  4. בקטע פרטי המודל, מגדירים את האפשרויות הבאות:

    1. בשדה Tuned model name (שם המודל שעבר התאמה), מזינים שם למודל החדש שעבר התאמה (עד 128 תווים).
    2. בשדה מודל בסיסי, בוחרים את מודל הבסיס שרוצים לכוונן.
    3. בשדה הנפתח אזור, בוחרים את האזור שבו יפעל תהליך ההתאמה של צינור העיבוד ושבו יתבצע פריסת המודל המותאם.
  5. בקטע הגדרת כוונון, מגדירים את האפשרויות הבאות:

    1. בשדה מספר התקופות של זמן המערכת, מזינים את מספר השלבים להרצה לצורך כוונון המודל.
    2. בשדה גודל המתאם, מזינים את גודל המתאם שבו רוצים להשתמש לצורך כוונון המודל.
    3. אופציונלי: בשדה Beta, מזינים את ערך הבטא הרצוי. בטא הוא המקדם שקובע עד כמה המודל המכוונן תואם לקו הבסיס שלו.
    4. בשדה Learning rate multiplier (מקדם קצב הלמידה), מזינים את גודל הצעד בכל איטרציה. ערך ברירת המחדל הוא 1. .
  6. אופציונלי: כדי להשבית את נקודות השמירה הביניים ולהשתמש רק בנקודת השמירה האחרונה, לוחצים על המתג ייצוא של נקודת השמירה האחרונה בלבד.

  7. לוחצים על Continue.

    ייפתח הדף Tuning dataset (קבוצת נתונים לצורך שיפור).

  8. כדי להעלות קובץ של מערך נתונים, בוחרים באחת מהאפשרויות הבאות:

    1. אם עדיין לא העליתם מערך נתונים, בוחרים בלחצן הבחירה העלאת קובץ ל-Cloud Storage.
    2. בשדה Select JSONL file, לוחצים על Browse ובוחרים את קובץ מערך הנתונים.
    3. בשדה Dataset location (מיקום מערך הנתונים), לוחצים על Browse (עיון) ובוחרים את קטגוריית Cloud Storage שבה רוצים לאחסן את קובץ מערך הנתונים.
    4. אם קובץ מערך הנתונים כבר נמצא בקטגוריה של Cloud Storage, בוחרים את לחצן הבחירה Existing file on Cloud Storage (קובץ קיים ב-Cloud Storage).
    5. בשדה Cloud Storage file path, לוחצים על Browse ובוחרים את הקטגוריה של Cloud Storage שבה נמצא קובץ מערך הנתונים.
  9. (אופציונלי) כדי לקבל מדדי אימות במהלך האימון, לוחצים על המתג הפעלת אימות המודל.

    1. בקובץ Validation dataset (מערך נתונים לאימות), מזינים את הנתיב של מערך הנתונים לאימות ב-Cloud Storage.
  10. לוחצים על התחלת הכוונון.

    המודל החדש יופיע בקטע Managed tuning בדף Tune and Distill. כשהתאמת המודל מסתיימת, בסטטוס מופיע הכיתוב הושלם.

REST

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

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

  • PROJECT_ID: מזהה הפרויקט.
  • TUNING_JOB_REGION: האזור שבו פועלת משימת ההתאמה. זה גם אזור ברירת המחדל שאליו מועלה המודל שעבר התאמה.
  • BASE_MODEL: השם של המודל הבסיסי שרוצים לכוונן.
  • TRAINING_DATASET_URI: ה-URI של מערך נתוני האימון ב-Cloud Storage. מערך הנתונים צריך להיות בפורמט של קובץ JSONL. כדי לקבל את התוצאות הטובות ביותר, מומלץ לספק לפחות 100 עד 500 דוגמאות. מידע נוסף זמין במאמר מידע על מערכי נתונים מבוססי-פיקוח להתאמה אישית .
  • VALIDATION_DATASET_URIאופציונלי: ה-URI של Cloud Storage של קובץ מערך הנתונים של האימות.
  • EPOCH_COUNTאופציונלי: מספר המעברים המלאים שהמודל מבצע על מערך הנתונים המלא לאימון במהלך האימון. כדי להשתמש בערך המומלץ שמאוכלס מראש, לא צריך להגדיר את השדה.
  • BETAאופציונלי: המקדם שקובע עד כמה המודל המכוונן תואם לבסיס שלו.
  • ADAPTER_SIZEאופציונלי: גודל המתאם שבו רוצים להשתמש למשימת ההתאמה. גודל המתאם משפיע על מספר הפרמטרים שאפשר לאמן במשימת ההתאמה. גודל מתאם גדול יותר מרמז שהמודל יכול ללמוד משימות מורכבות יותר, אבל הוא דורש מערך נתונים גדול יותר לאימון וזמני אימון ארוכים יותר.
  • LEARNING_RATE_MULTIPLIER: אופציונלי: מכפיל שחל על קצב הלמידה המומלץ. אם לא מגדירים ערך, נעשה שימוש בערך המומלץ.
  • EXPORT_LAST_CHECKPOINT_ONLYאופציונלי: מגדירים את הערך true כדי להשתמש רק בנקודת השמירה האחרונה.
  • TUNED_MODEL_DISPLAYNAMEאופציונלי: שם תצוגה של המודל שעבר התאמה. אם לא מגדירים שם, המערכת יוצרת שם אקראי.
  • KMS_KEY_NAMEאופציונלי: מזהה משאב Cloud KMS של מפתח ההצפנה בניהול הלקוח שמשמש להגנה על משאב. המפתח הוא בפורמט: projects/my-project/locations/my-region/keyRings/my-kr/cryptoKeys/my-key. המפתח צריך להיות באותו אזור שבו נוצר משאב המחשוב. מידע נוסף מופיע במאמר בנושא מפתחות הצפנה בניהול הלקוח (CMEK).
  • SERVICE_ACCOUNTאופציונלי: חשבון השירות שעומס העבודה של tuningJob פועל דרכו. אם לא מציינים סוכן, המערכת משתמשת בסוכן של שירות הכוונון המדויק המאובטח של Agent Platform בפרויקט. מידע נוסף מופיע במאמר בנושא התאמה של סוכן שירות. אם אתם מתכננים להשתמש בחשבון שירות בניהול הלקוח, אתם צריכים להקצות לחשבון השירות את התפקיד roles/aiplatform.tuningServiceAgent. מקצים גם את התפקיד Tuning Service Agent roles/iam.serviceAccountTokenCreator לחשבון השירות בניהול הלקוח.

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

POST https://TUNING_JOB_REGION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/TUNING_JOB_REGION/tuningJobs

תוכן בקשת JSON:

{
  "baseModel": "BASE_MODEL",
  "preferenceOptimizationSpec" : {
      "trainingDatasetUri": "TRAINING_DATASET_URI",
      "validationDatasetUri": "VALIDATION_DATASET_URI",
      "hyperParameters": {
          "epochCount": "EPOCH_COUNT",
          "beta": "BETA",
          "adapterSize": "ADAPTER_SIZE",
          "learningRateMultiplier": "LEARNING_RATE_MULTIPLIER"
      },
      "exportLastCheckpointOnly": EXPORT_LAST_CHECKPOINT_ONLY,
  },
  "tunedModelDisplayName": "TUNED_MODEL_DISPLAYNAME",
  "encryptionSpec": {
    "kmsKeyName": "KMS_KEY_NAME"
  },
  "serviceAccount": "SERVICE_ACCOUNT"
}

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

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

PROJECT_ID=myproject
LOCATION=global
curl \
-X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
"https://${LOCATION}-aiplatform.googleapis.com/v1/projects/${PROJECT_ID}/locations/${LOCATION}/tuningJobs" \
-d \
$'{
   "baseModel": "${BASE_MODEL}",
   "preferenceOptimizationSpec" : {
      "trainingDatasetUri": "gs://mybucket/preference_tuning/data/train_data.jsonl",
      "validationDatasetUri": "gs://mybucket/preference_tuning/data/validation_data.jsonl"
   },
   "tunedModelDisplayName": "tuned_gemini"
}'

Google Gen AI SDK

import time

from google import genai
from google.genai.types import CreateTuningJobConfig, HttpOptions, TuningDataset

client = genai.Client(http_options=HttpOptions(api_version="v1"))

training_dataset = TuningDataset(
    gcs_uri="gs://mybucket/preference_tuning/data/train_data.jsonl",
)
validation_dataset = TuningDataset(
    gcs_uri="gs://mybucket/preference_tuning/data/validation_data.jsonl",
)

# Refer to https://docs.cloud.google.com/vertex-ai/generative-ai/docs/models/gemini-use-continuous-tuning#google-gen-ai-sdk
# for example to continuous tune from SFT tuned model.
tuning_job = client.tunings.tune(
    base_model="gemini-3.5-flash",
    training_dataset=training_dataset,
    config=CreateTuningJobConfig(
        tuned_model_display_name="Example tuning job",
        method="PREFERENCE_TUNING",
        validation_dataset=validation_dataset,
    ),
)

running_states = set([
    "JOB_STATE_PENDING",
    "JOB_STATE_RUNNING",
])

while tuning_job.state in running_states:
    print(tuning_job.state)
    tuning_job = client.tunings.get(name=tuning_job.name)
    time.sleep(60)

print(tuning_job.tuned_model.model)
print(tuning_job.tuned_model.endpoint)
print(tuning_job.experiment)
# Example response:
# projects/123456789012/locations/us-central1/models/1234567890@1
# projects/123456789012/locations/us-central1/endpoints/123456789012345
# projects/123456789012/locations/us-central1/metadataStores/default/contexts/tuning-experiment-2025010112345678

if tuning_job.tuned_model.checkpoints:
    for i, checkpoint in enumerate(tuning_job.tuned_model.checkpoints):
        print(f"Checkpoint {i + 1}: ", checkpoint)
    # Example response:
    # Checkpoint 1:  checkpoint_id='1' epoch=1 step=10 endpoint='projects/123456789012/locations/us-central1/endpoints/123456789000000'
    # Checkpoint 2:  checkpoint_id='2' epoch=2 step=20 endpoint='projects/123456789012/locations/us-central1/endpoints/123456789012345'

כוונון היפר-פרמטרים

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

  • תקופות של זמן מערכת (epochs): מספר המעברים המלאים שהמודל מבצע על כל מערך הנתונים לאימון במהלך האימון. ‫Gemini Enterprise Agent Platform מתאים אוטומטית את ערך ברירת המחדל לגודל של מערך נתוני האימון. הערך הזה מבוסס על תוצאות השוואה לשוק כדי לשפר את איכות הפלט של המודל.
  • בטא: המקדם שקובע עד כמה המודל שעבר כוונון תואם לקו הבסיס שלו. ערך בטא נמוך יותר מצביע על עדכונים אגרסיביים יותר כדי להגיע לתשובות המועדפות. הטווח המומלץ הוא 0.01 עד 0.5, כולל. ערך בטא של 0 יגרום להפסקת הלמידה של המודל.
  • גודל המתאם: גודל המתאם שבו רוצים להשתמש במשימת ההתאמה. גודל המתאם משפיע על מספר הפרמטרים שאפשר לאמן במשימת הכוונון. גודל מתאם גדול יותר מרמז שהמודל יכול ללמוד משימות מורכבות יותר, אבל הוא דורש מערך נתונים גדול יותר לאימון וזמני אימון ארוכים יותר.
  • מכפיל קצב הלמידה: מכפיל שחל על קצב הלמידה המומלץ. כדי להגיע להתכנסות מהר יותר, אפשר להגדיל את הערך. כדי להימנע מהתאמת יתר, אפשר להקטין את הערך.

הצגה או ביטול של עבודת כוונון

כדי לראות רשימה של משימות אופטימיזציה, פרטים של משימת אופטימיזציה, לבטל משימת אופטימיזציה או למחוק מודל שעבר אופטימיזציה, אפשר לעיין בסעיפים הבאים במסמכי התיעוד בנושא כוונון מפוקח (SFT):

מדדים של התאמת מודל

תהליך כוונון המודל אוסף באופן אוטומטי את מדדי הכוונון הבאים:

  • /preference_optimization_train_loss: הפסד ההעדפה של מערך הנתונים של ההתאמה בשלב האימון.

מדדים של אימות מודל

כשמספקים נתוני אימות, משימת כוונון המודל אוספת באופן אוטומטי את מדדי האימות הבאים:

  • /eval_total_loss: אובדן העדפה עבור מערך האימות בשלב האימות.

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

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