Lihat di ai.google.dev | Menjalankan 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 menyesuaikan model teks di balik layanan pembuatan teks Gemini API.
Penyiapan
Autentikasikan
Gemini API memungkinkan Anda menyesuaikan model dengan data Anda sendiri. Karena data Anda adalah data Anda dan model yang telah disesuaikan, hal ini memerlukan kontrol akses yang lebih ketat daripada yang dapat diberikan oleh Kunci API.
Sebelum dapat menjalankan tutorial ini, Anda harus menyiapkan OAuth untuk project Anda.
Di Colab, langkah yang paling mudah untuk disiapkan adalah dengan menyalin konten file client_secret.json
Anda ke "Secret Manager" 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 autentikasi dengan 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 telah disesuaikan dengan metode 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
Membuat model yang di-tuning
Untuk membuat model yang disesuaikan, Anda harus meneruskan set data ke model dalam metode genai.create_tuned_model
. Anda dapat melakukan ini dengan langsung menentukan nilai input dan output dalam panggilan atau mengimpor dari file ke dalam dataframe untuk diteruskan ke metode.
Untuk contoh ini, Anda akan men-tuning model untuk menghasilkan angka berikutnya dalam urutan tersebut. Misalnya, jika inputnya adalah 1
, model akan menghasilkan 2
. Jika inputnya adalah one hundred
, outputnya 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 yang telah Anda sesuaikan akan langsung ditambahkan ke daftar model yang telah disesuaikan, tetapi statusnya ditetapkan ke "membuat" saat model tersebut 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 pada baris di bawah dan jalankan sel kode untuk membatalkan tugas sebelum tugas selesai.
# operation.cancel()
Setelah tuning selesai, Anda dapat melihat kurva kerugian dari hasil tuning. Kurva kerugian 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'>
Mengevaluasi model Anda
Anda dapat menggunakan metode genai.generate_text
dan menentukan nama model 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 八!
'八'
Sepertinya tugas tersebut berhasil diterapkan meskipun contohnya terbatas, tetapi "berikutnya" adalah konsep yang sederhana. Lihat panduan penyesuaian untuk mendapatkan panduan lebih lanjut tentang cara meningkatkan 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.'
Menghapus model
Anda dapat merapikan daftar model yang telah disesuaikan dengan menghapus model yang tidak lagi diperlukan. Gunakan metode genai.delete_tuned_model
untuk menghapus model. Jika membatalkan tugas tuning, Anda dapat menghapusnya karena performanya mungkin tidak dapat diprediksi.
genai.delete_tuned_model(f'tunedModels/{name}')
Model 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.