Tutorial fine-tuning

Tutorial ini akan membantu Anda memulai layanan penyesuaian Gemini API menggunakan Python SDK atau REST API curl. Contoh ini menunjukkan cara menyesuaikan model teks di balik layanan pembuatan teks Gemini API.

Lihat di ai.google.dev Mencoba notebook Colab Lihat notebook di GitHub

Batasan

Sebelum menyesuaikan model, Anda harus mengetahui batasan berikut:

Melakukan fine-tuning set data

Menyempurnakan set data untuk Gemini 1.5 Flash memiliki batasan berikut:

  • Ukuran input maksimum per contoh adalah 40.000 karakter.
  • Ukuran output maksimum per contoh adalah 5.000 karakter.
  • Hanya contoh pasangan input-output yang didukung. Percakapan multi-giliran gaya chat tidak didukung.

Model yang disesuaikan

Model yang disesuaikan memiliki batasan berikut:

  • Batas input model Gemini 1.5 Flash yang dioptimalkan adalah 40.000 karakter.
  • Mode JSON tidak didukung dengan model yang disesuaikan.
  • Hanya input teks yang didukung.

Sebelum memulai: Siapkan project dan kunci API Anda

Sebelum memanggil Gemini API, Anda perlu menyiapkan project dan mengonfigurasi kunci API.

Membuat daftar model yang disesuaikan

Anda dapat memeriksa model yang telah disesuaikan yang ada dengan Metode 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

Membuat model yang di-tuning

Untuk membuat model yang disesuaikan, Anda harus meneruskan dataset ke model di tunedModels.create .

Untuk contoh ini, Anda akan menyesuaikan model untuk menghasilkan angka berikutnya dalam urutan. Misalnya, jika inputnya adalah 1, model akan menghasilkan output 2. Jika inputnya adalah one hundred, outputnya harus 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"

Nilai optimal untuk jumlah epoch, ukuran batch, dan kecepatan belajar bergantung pada set data dan batasan kasus penggunaan Anda lainnya. Untuk mempelajari lebih lanjut tentang nilai-nilai ini, lihat Setelan penyesuaian lanjutan dan Hyperparameter.

Model yang disesuaikan akan segera ditambahkan ke daftar model yang disesuaikan, tetapi statusnya ditetapkan ke "membuat" saat model disesuaikan.

Mencoba model

Anda dapat menggunakan metode tunedModels.generateContent dan menentukan nama model yang dioptimalkan untuk menguji performanya.

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

Hapus model

Anda dapat membersihkan daftar model yang dioptimalkan dengan menghapus model yang tidak lagi diperlukan. Gunakan metode tunedModels.delete untuk menghapus model. Jika Anda membatalkan tugas penyesuaian, sebaiknya hapus tugas tersebut karena performanya mungkin tidak dapat diprediksi.

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