ai.google.dev'de görüntüleyin | Google Colab'de çalıştır | Kaynağı GitHub'da görüntüleyin |
Bu not defterinde, Gemini API için Python istemci kitaplığını kullanarak ince ayar hizmetini nasıl kullanmaya başlayacağınızı öğreneceksiniz. Burada, Gemini API'nin metin oluşturma hizmetinin temelindeki metin modelini nasıl ayarlayabileceğinizi öğreneceksiniz.
Kurulum
Kimliği doğrula
Gemini API, modelleri kendi verilerinize göre ayarlamanıza olanak tanır. Söz konusu olan sizin verileriniz ve hassaslaştırılmış modelleriniz olduğu için bu, API Anahtarlarının sağlayabileceğinden daha sıkı erişim denetimleri gerektirir.
Bu eğiticiyi çalıştırmadan önce projeniz için OAuth'u kurmanız gerekir.
Colab'de kurulumun en kolay yolu, client_secret.json
dosyanızın içeriğini CLIENT_SECRET
gizli adıyla Colab'ın "Secrets Manager"ına (sol paneldeki anahtar simgesinin altında) kopyalamaktır.
Bu gcloud komutu, client_secret.json
dosyasını hizmetle kimlik doğrulamak amacıyla kullanılabilecek kimlik bilgilerine dönüştürür.
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'
İstemci kitaplığını yükleme
pip install -q google-generativeai
Kitaplıkları içe aktar
import google.generativeai as genai
Mevcut hassaslaştırılmış modellerinizi genai.list_tuned_model
yöntemini kullanarak kontrol edebilirsiniz.
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
Hassaslaştırılmış model oluşturun
Hassaslaştırılmış model oluşturmak için veri kümenizi genai.create_tuned_model
yönteminde modele geçirmeniz gerekir. Bunu, çağrıdaki giriş ve çıkış değerlerini doğrudan tanımlayarak veya yönteme geçirmek üzere bir dosyadan veri çerçevesine içe aktararak yapabilirsiniz.
Bu örnekte, dizideki bir sonraki sayıyı oluşturmak için bir modeli ayarlayacaksınız. Örneğin, giriş 1
ise modelin çıkışı 2
olmalıdır. Giriş one hundred
ise çıkış one hundred one
olmalıdır.
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,
)
Hassaslaştırılmış modeliniz, hassaslaştırılmış modeller listesine hemen eklenir, ancak model ayarlanırken durumu "oluşturuluyor" olarak ayarlanır.
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>
Ayarlama işleminin ilerleme durumunu kontrol etme
Durumu kontrol etmek için metadata
öğesini kullanın:
operation.metadata
total_steps: 375 tuned_model: "tunedModels/generate-num-2946"
operation.result()
veya operation.wait_bar()
ile eğitimin tamamlanmasını bekleyin.
import time
for status in operation.wait_bar():
time.sleep(30)
0%| | 0/375 [00:00<?, ?it/s]
Ayarlama işinizi istediğiniz zaman cancel()
yöntemini kullanarak iptal edebilirsiniz. Aşağıdaki satırın açıklamasını kaldırın ve tamamlanmadan önce işinizi iptal etmek için kod hücresini çalıştırın.
# operation.cancel()
Ayarlama tamamlandıktan sonra, ayarlama sonuçlarından kayıp eğrisini görüntüleyebilirsiniz. Kayıp eğrisi, modelin tahminlerinin ideal çıktılardan ne kadar farklı olduğunu gösterir.
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'>
Modelinizi değerlendirme
Model performansınızı test etmek için genai.generate_text
yöntemini kullanabilir ve modelinizin adını belirtebilirsiniz.
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 八!
'八'
Az sayıda örneğe rağmen, bu görevin üstesinden gelinmiş gibi görünüyor. Ancak "sonraki" basit bir kavramdır. Performansı artırmayla ilgili daha fazla yardım için ayarlama kılavuzuna bakın.
Açıklamayı güncelle
Hassaslaştırılmış modelinizin açıklamasını, genai.update_tuned_model
yöntemini kullanarak istediğiniz zaman güncelleyebilirsiniz.
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.'
Modeli silin
Artık ihtiyacınız olmayan modelleri silerek hassaslaştırılmış model listenizi temizleyebilirsiniz. Bir modeli silmek için genai.delete_tuned_model
yöntemini kullanın. Ayarlama işlerini iptal ettiyseniz performansları tahmin edilemeyeceği için bunları silmek isteyebilirsiniz.
genai.delete_tuned_model(f'tunedModels/{name}')
Model artık mevcut değil:
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.