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'>
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.