Tutorial fine-tuning

Lihat di ai.google.dev Berjalan di Google Colab Lihat sumber di GitHub

Di notebook ini, Anda akan mempelajari cara memulai layanan tuning menggunakan library klien Python untuk Gemini API. Di sini, Anda akan mempelajari cara model teks di balik layanan pembuatan teks Gemini API.

Sebelum memulai: Siapkan project dan kunci API Anda

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

Penyiapan

Menyiapkan autentikasi

Gemini API memungkinkan Anda menyesuaikan model menggunakan data Anda sendiri. Karena itu data Anda dan model yang telah disesuaikan, hal ini memerlukan kontrol akses yang lebih ketat daripada yang dapat disediakan oleh Kunci API.

Sebelum dapat menjalankan tutorial ini, Anda harus menyiapkan OAuth untuk project Anda.

Cara termudah untuk melakukan penyiapan di Colab adalah menyalin konten client_secret.json file ke "Pengelola rahasia" Colab (di bawah ikon kunci di panel kiri) dengan nama rahasia CLIENT_SECRET.

Perintah gcloud ini mengubah file client_secret.json menjadi kredensial yang dapat digunakan untuk melakukan otentikasi terhadap layanan.

import os
if 'COLAB_RELEASE_TAG' in os.environ:
  from google.colab import userdata
  import pathlib
  pathlib.Path('client_secret.json').write_text(userdata.get('CLIENT_SECRET'))

  # Use `--no-browser` in colab
  !gcloud auth application-default login --no-browser --client-id-file client_secret.json --scopes='https://www.googleapis.com/auth/cloud-platform,https://www.googleapis.com/auth/generative-language.tuning'
else:
  !gcloud auth application-default login --client-id-file client_secret.json --scopes='https://www.googleapis.com/auth/cloud-platform,https://www.googleapis.com/auth/generative-language.tuning'

Menginstal library klien

pip install -q google-generativeai

Mengimpor library

import google.generativeai as genai

Anda dapat memeriksa model yang sudah ada yang telah disesuaikan dengan genai.list_tuned_model .

for i, m in zip(range(5), genai.list_tuned_models()):
  print(m.name)
tunedModels/my-model-8527
tunedModels/my-model-7092
tunedModels/my-model-2778
tunedModels/my-model-1298
tunedModels/my-model-3883

Buat model yang di-tuning

Untuk membuat model yang di-tuning, Anda harus meneruskan set data ke model tersebut di bagian Metode genai.create_tuned_model. Anda bisa melakukannya dengan langsung mendefinisikan nilai input dan output dalam panggilan atau mengimpor dari file ke dalam sebuah {i>dataframe<i} diteruskan ke metode tersebut.

Untuk contoh ini, Anda akan menyesuaikan model untuk menghasilkan angka berikutnya dalam . Misalnya, jika inputnya adalah 1, model akan menghasilkan 2. Jika inputnya adalah one hundred, output-nya harus one hundred one.

base_model = [
    m for m in genai.list_models()
    if "createTunedModel" in m.supported_generation_methods][0]
base_model
Model(name='models/gemini-1.0-pro-001',
      base_model_id='',
      version='001',
      display_name='Gemini 1.0 Pro',
      description=('The best model for scaling across a wide range of tasks. This is a stable '
                   'model that supports tuning.'),
      input_token_limit=30720,
      output_token_limit=2048,
      supported_generation_methods=['generateContent', 'countTokens', 'createTunedModel'],
      temperature=0.9,
      top_p=1.0,
      top_k=1)
import random

name = f'generate-num-{random.randint(0,10000)}'
operation = genai.create_tuned_model(
    # You can use a tuned model here too. Set `source_model="tunedModels/..."`
    source_model=base_model.name,
    training_data=[
        {
             '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',
        }
    ],
    id = name,
    epoch_count = 100,
    batch_size=4,
    learning_rate=0.001,
)

Model Anda yang di-tuning segera ditambahkan ke daftar model yang telah di-tuning, tetapi ditetapkan ke "{i>create<i}" selagi model di-tuning.

model = genai.get_tuned_model(f'tunedModels/{name}')

model
TunedModel(name='tunedModels/generate-num-2946',
           source_model='models/gemini-1.0-pro-001',
           base_model='models/gemini-1.0-pro-001',
           display_name='',
           description='',
           temperature=0.9,
           top_p=1.0,
           top_k=1,
           state=<State.CREATING: 1>,
           create_time=datetime.datetime(2024, 2, 21, 20, 4, 16, 448050, tzinfo=datetime.timezone.utc),
           update_time=datetime.datetime(2024, 2, 21, 20, 4, 16, 448050, tzinfo=datetime.timezone.utc),
           tuning_task=TuningTask(start_time=datetime.datetime(2024, 2, 21, 20, 4, 16, 890698, tzinfo=datetime.timezone.utc),
                                  complete_time=None,
                                  snapshots=[],
                                  hyperparameters=Hyperparameters(epoch_count=100,
                                                                  batch_size=4,
                                                                  learning_rate=0.001)))
model.state
<State.CREATING: 1>

Memeriksa progres tuning

Gunakan metadata untuk memeriksa status:

operation.metadata
total_steps: 375
tuned_model: "tunedModels/generate-num-2946"

Tunggu hingga pelatihan selesai menggunakan operation.result(), atau operation.wait_bar()

import time

for status in operation.wait_bar():
  time.sleep(30)
0%|          | 0/375 [00:00<?, ?it/s]

Anda dapat membatalkan tugas tuning kapan saja menggunakan metode cancel(). Hapus tanda komentar baris di bawah dan menjalankan sel kode untuk membatalkan tugas sebelum selesai.

# operation.cancel()

Setelah tuning selesai, Anda bisa melihat kurva kerugian dari tuning hasil pengujian tersebut. Kerugian kurva menunjukkan seberapa besar penyimpangan prediksi model dari output ideal.

import pandas as pd
import seaborn as sns

model = operation.result()

snapshots = pd.DataFrame(model.tuning_task.snapshots)

sns.lineplot(data=snapshots, x = 'epoch', y='mean_loss')
<Axes: xlabel='epoch', ylabel='mean_loss'>

png

Mengevaluasi model Anda

Anda dapat menggunakan metode genai.generate_text dan menentukan nama model Anda untuk menguji performa model Anda.

model = genai.GenerativeModel(model_name=f'tunedModels/{name}')
result = model.generate_content('55')
result.text
'56'
result = model.generate_content('123455')
result.text
'123456'
result = model.generate_content('four')
result.text
'five'
result = model.generate_content('quatre') # French 4
result.text                               # French 5 is "cinq"
'cinq'
result = model.generate_content('III')    # Roman numeral 3
result.text                               # Roman numeral 4 is IV
'IV'
result = model.generate_content('七')  # Japanese 7
result.text                            # Japanese 8 is 八!
'八'

Tampaknya benar-benar telah mengambil tugas meskipun contohnya terbatas, tetapi "berikutnya" adalah konsep yang relatif sederhana, lihat untuk mendapatkan panduan lebih lanjut tentang peningkatan performa.

Memperbarui deskripsi

Anda dapat memperbarui deskripsi model yang telah disesuaikan kapan saja menggunakan Metode genai.update_tuned_model.

genai.update_tuned_model(f'tunedModels/{name}', {"description":"This is my model."});
model = genai.get_tuned_model(f'tunedModels/{name}')

model.description
'This is my model.'

Hapus model

Anda dapat membersihkan daftar model yang telah disesuaikan dengan menghapus model yang tidak lagi diperlukan. Gunakan metode genai.delete_tuned_model untuk menghapus model. Jika Anda membatalkan tuning tugas, Anda dapat menghapusnya karena performanya mungkin tidak dapat diprediksi.

genai.delete_tuned_model(f'tunedModels/{name}')

Model ini sudah tidak ada:

try:
  m = genai.get_tuned_model(f'tunedModels/{name}')
  print(m)
except Exception as e:
  print(f"{type(e)}: {e}")
<class 'google.api_core.exceptions.NotFound'>: 404 Tuned model tunedModels/generate-num-2946 does not exist.