İnce ayar eğiticisi

ai.google.dev'de görüntüleyin Google Colab'de çalıştır Kaynağı GitHub'da görüntüle

Bu not defterinde, Gemini API için Python istemci kitaplığını kullanarak ayarlama hizmetine nasıl başlayacağınızı öğreneceksiniz. Burada, Gemini API'nin metin oluşturma hizmetinin arkasındaki metin modelini ayarlamayı öğreneceksiniz.

Başlamadan önce: Projenizi ve API anahtarınızı oluşturun

Gemini API'yi çağırmadan önce projenizi ayarlamanız ve API anahtarınızı yapılandırmanız gerekir.

Kurulum

Kimlik doğrulamayı ayarlayın

Gemini API, modelleri kendi verilerinize göre ayarlamanıza olanak tanır. Bunlar sizin verileriniz ve hassaslaştırılmış modelleriniz olduğundan, API Anahtarlarının sağlayabileceğinden daha sıkı erişim denetimlerine ihtiyaç vardır.

Bu eğiticiyi çalıştırabilmeniz için projenizde OAuth'u kurmanız gerekir.

Colab'de kurulum yapmanın en kolay yolu, client_secret.json dosyanızın içeriğini Colab'in "Gizli Anahtar Yöneticisi"ne (sol paneldeki anahtar simgesinin altında) CLIENT_SECRET gizli adıyla kopyalamaktır.

Bu gcloud komutu, client_secret.json dosyasını hizmetle kimlik doğrulamak için 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

Hassaslaştırılmış mevcut modellerinizi genai.list_tuned_model yöntemiyle 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ış bir model oluşturmak için veri kümenizi genai.create_tuned_model yöntemini kullanarak modele aktarmanız gerekir. Bunu, çağrıda doğrudan giriş ve çıkış değerlerini tanımlayarak veya yönteme iletmek için bir dosyadan veri çerçevesine aktararak yapabilirsiniz.

Bu örnekte, sıradaki bir sonraki sayıyı oluşturmak için bir modeli ayarlar. Örneğin, giriş 1 ise model 2 çıktısı vermelidir. 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>

Ayarlamanın ilerleme durumunu kontrol etme

Eyaleti 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() kullanarak 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 cancel() yöntemini kullanarak dilediğiniz zaman iptal edebilirsiniz. Aşağıdaki satırın açıklamasını iptal edin ve işiniz tamamlanmadan 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 çıkışlardan ne kadar saptığını 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'>

png

Modelinizi değerlendirme

Model performansınızı test etmek için genai.generate_text yöntemini kullanıp 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 八!
'八'

Sınırlı sayıda örnek olmasına rağmen gerçekten bu görevi tamamlamış gibi görünüyor ancak "sonraki" nispeten basit bir kavramdır. Performansı iyileştirmeyle ilgili daha fazla yardım için ayarlama kılavuzuna bakın.

Açıklamayı güncelle

Hassaslaştırılmış modelinizin açıklamasını dilediğiniz zaman genai.update_tuned_model yöntemini kullanarak 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 ihtiyaç duymadığınız modelleri silerek hassaslaştırılmış model listenizi temizleyebilirsiniz. Bir modeli silmek için genai.delete_tuned_model yöntemini kullanın. Herhangi bir ayarlama işlemini iptal ettiyseniz, performansları tahmin edilemeyeceği için bu işleri 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.