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 menyesuaikan model teks di balik layanan pembuatan teks di Gemini API.
Sebelum memulai: Siapkan project dan kunci API Anda
Sebelum memanggil Gemini API, Anda perlu menyiapkan project dan mengonfigurasi kunci API.
Penyiapan
Menyiapkan autentikasi
Gemini API memungkinkan Anda menyesuaikan model menggunakan data Anda sendiri. Karena ini adalah data Anda dan model yang Anda sesuaikan, 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.
Cara termudah untuk melakukan penyiapan di Colab adalah menyalin konten file
client_secret.json
Anda 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 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 yang sudah ada 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
Buat model yang di-tuning
Untuk membuat model yang disesuaikan, Anda harus meneruskan set data ke model tersebut dalam
metode genai.create_tuned_model
. Anda dapat melakukannya dengan langsung menentukan
nilai input dan output dalam panggilan atau mengimpor dari file ke dalam dataframe untuk
diteruskan ke metode tersebut.
Untuk contoh ini, Anda akan menyesuaikan model untuk menghasilkan angka berikutnya dalam urutan. 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 akan langsung ditambahkan ke daftar model yang di-tuning, 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 ini 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.
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 telah mengambil tugas meskipun contohnya terbatas, tetapi "berikutnya" adalah konsep yang relatif sederhana. Lihat panduan penyesuaian untuk mendapatkan panduan selengkapnya tentang 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.'
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 membatalkan
tugas tuning, 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.