מדריך לכוונון עדין

במדריך הזה נסביר איך להתחיל להשתמש בשירות לכוונון של Gemini API באמצעות ה-SDK ל-Python או באמצעות ה-API ל-REST באמצעות curl. בדוגמאות מוסבר איך לשפר את מודל הטקסט שמאחורי שירות היצירה של טקסט ב-Gemini API.

הצגה ב-ai.google.dev רוצים לנסות notebook של Colab? הצגת ה-notebook ב-GitHub

מגבלות

לפני שמכווננים מודל, חשוב לדעת על המגבלות הבאות:

כוונון עדין של מערכי נתונים

כשמשנים את מערכי הנתונים של Gemini 1.5 Flash, יש מגבלות הבאות:

  • הגודל המקסימלי של קלט לכל דוגמה הוא 40,000 תווים.
  • הגודל המקסימלי של הפלט לכל דוגמה הוא 5,000 תווים.
  • יש תמיכה רק בדוגמאות של זוגות קלט-פלט. אין תמיכה בשיחות בסגנון צ'אט עם מספר תשובות.

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

למדדים מותאמים יש את המגבלות הבאות:

  • מגבלת הקלט של מודל Gemini 1.5 Flash מכוונן היא 40,000 תווים.
  • אין תמיכה במצב JSON עם מודלים מותאמים.
  • יש תמיכה רק בהזנת טקסט.

לפני שמתחילים: מגדירים את הפרויקט ומפתח ה-API

לפני שמפעילים את Gemini API, צריך להגדיר את הפרויקט ולהגדיר את מפתח ה-API.

הצגת רשימה של מודלים שעברו כוונון

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

# Sending a page_size is optional
curl -X GET https://generativelanguage.googleapis.com/v1beta/tunedModels?page_size=5 \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer ${access_token}" \
    -H "x-goog-user-project: ${project_id}" > tuned_models.json

jq .tunedModels[].name < tuned_models.json

# Send the nextPageToken to get the next page.
page_token=$(jq .nextPageToken < tuned_models.json | tr -d '"')

if [[ "$page_token" != "null"" ]]; then
curl -X GET https://generativelanguage.googleapis.com/v1beta/tunedModels?page_size=5\&page_token=${page_token}?key=$GOOGLE_API_KEY \
    -H "Content-Type: application/json"  > tuned_models2.json
jq .tunedModels[].name < tuned_models.json
fi

יצירת מודל שעבר כוונון

כדי ליצור מודל שעבר כוונון, צריך להעביר את מערך הנתונים למודל בשיטה tunedModels.create.

בדוגמה הזו, תכווננו מודל כדי ליצור את המספר הבא ברצף. לדוגמה, אם הקלט הוא 1, הפלט של המודל אמור להיות 2. אם הקלט הוא one hundred, הפלט אמור להיות one hundred one.

curl -X POST "https://generativelanguage.googleapis.com/v1beta/tunedModels?key=$GOOGLE_API_KEY" \
    -H 'Content-Type: application/json' \
    -d '
      {
        "display_name": "number generator model",
        "base_model": "models/gemini-1.5-flash-001-tuning",
        "tuning_task": {
          "hyperparameters": {
            "batch_size": 2,
            "learning_rate": 0.001,
            "epoch_count":5,
          },
          "training_data": {
            "examples": {
              "examples": [
                {
                    "text_input": "1",
                    "output": "2",
                },{
                    "text_input": "3",
                    "output": "4",
                },{
                    "text_input": "-3",
                    "output": "-2",
                },{
                    "text_input": "twenty two",
                    "output": "twenty three",
                },{
                    "text_input": "two hundred",
                    "output": "two hundred one",
                },{
                    "text_input": "ninety nine",
                    "output": "one hundred",
                },{
                    "text_input": "8",
                    "output": "9",
                },{
                    "text_input": "-98",
                    "output": "-97",
                },{
                    "text_input": "1,000",
                    "output": "1,001",
                },{
                    "text_input": "10,100,000",
                    "output": "10,100,001",
                },{
                    "text_input": "thirteen",
                    "output": "fourteen",
                },{
                    "text_input": "eighty",
                    "output": "eighty one",
                },{
                    "text_input": "one",
                    "output": "two",
                },{
                    "text_input": "three",
                    "output": "four",
                },{
                    "text_input": "seven",
                    "output": "eight",
                }
              ]
            }
          }
        }
      }' | tee tunemodel.json

# Check the operation for status updates during training.
# Note: you can only check the operation on v1/
operation=$(cat tunemodel.json | jq ".name" | tr -d '"')
tuning_done=false

while [[ "$tuning_done" != "true" ]];
do
  sleep 5
  curl -X GET "https://generativelanguage.googleapis.com/v1/${operation}?key=$GOOGLE_API_KEY" \
    -H 'Content-Type: application/json' \
     2> /dev/null > tuning_operation.json

  complete=$(jq .metadata.completedPercent < tuning_operation.json)
  tput cuu1
  tput el
  echo "Tuning...${complete}%"
  tuning_done=$(jq .done < tuning_operation.json)
done

# Or get the TunedModel and check it's state. The model is ready to use if the state is active.
modelname=$(cat tunemodel.json | jq ".metadata.tunedModel" | tr -d '"')
curl -X GET  https://generativelanguage.googleapis.com/v1beta/${modelname}?key=$GOOGLE_API_KEY \
    -H 'Content-Type: application/json' > tuned_model.json

cat tuned_model.json | jq ".state"

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

המודל המכוונן מתווסף באופן מיידי לרשימת המודלים המכווננים, אבל הסטטוס שלו מוגדר כ'יצירה' בזמן הכוונון.

ניסיון של המודל

כדי לבדוק את הביצועים של המודל המכוונן, אפשר להשתמש ב-method‏ tunedModels.generateContent ולציין את השם שלו.

curl -X POST https://generativelanguage.googleapis.com/v1beta/$modelname:generateContent?key=$GOOGLE_API_KEY \
    -H 'Content-Type: application/json' \
    -d '{
        "contents": [{
        "parts": [{
          "text": "LXIII"
          }]
        }]
        }' 2> /dev/null

מחיקת המודל

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

curl -X DELETE https://generativelanguage.googleapis.com/v1beta/${modelname}?key=$GOOGLE_API_KEY \
    -H 'Content-Type: application/json'