İ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, Python istemci kitaplığı. Buradan, videonuzun Gemini API'nin metin oluşturma hizmetinin arkasındaki metin modeli.

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.

Kurulum

Kimlik doğrulamayı ayarlayın

Gemini API, modelleri kendi verilerinize göre ayarlamanıza olanak tanır. Bu sizin verileriniz ve bu nedenle, API Anahtarlarının sağlayabileceğinden daha sıkı erişim denetimlerine ihtiyaç vardır.

Bu eğiticiyi çalıştırmadan önce uygulamanızda OAuth'u kurmanız gerekir: inceleyebilirsiniz.

Colab'de kurulumu yapmanın en kolay yolu client_secret.json dosyasını Colab'in "Secrets manager"a kaydedin (şuradaki anahtar simgesinin altında: sol panelde) CLIENT_SECRET gizli adıyla değiştirin.

Bu gcloud komutu, client_secret.json dosyasını kimlik bilgilerine dönüştürür. hizmetle kimlik doğrulaması yapmak için kullanılabilir.

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 ile kontrol edebilirsiniz yöntemidir.

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 modele genai.create_tuned_model yöntemini çağırın. Bunu, tablodaki anahtar kelimeleri veya bir dosyadan veri çerçevesine aktarılarak oluşturulan dosyadaki giriş ve çıkış değerlerinin yöntemini de kullanabilirsiniz.

Bu örnekte, bir sonraki sayıyı oluşturmak için bir modeli tıklayın. Örneğin, giriş 1 ise model 2 çıktısı vermelidir. Öğe giriş one hundred, çı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 durum "oluşturuluyor" olarak ayarlanmıştır. otomatik olarak devreye girer.

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() aracını kullanarak eğitimin tamamlanmasını bekleyin veya operation.wait_bar()

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çıklamayı kaldır aşağıdaki satırı tıklayın ve kod hücresini çalıştırarak işinizi tamamlanmadan iptal edin.

# operation.cancel()

Ayarlama tamamlandıktan sonra kayıp eğrisini ince ayardan görüntüleyebilirsiniz sonuç. Kayıp eğri 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

genai.generate_text yöntemini kullanarak modelinizin adını belirtebilirsiniz test edin.

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 八!
'八'

Fazla sayıda örnek olmasına rağmen bu süreç pek de başarılı oldu gibi görünüyor. "sonraki" nispeten basit bir kavramdır; daha fazla bilgi için bu rehberine performansı artırmaya yardımcı olur.

Açıklamayı güncelle

Hassaslaştırılmış modelinizin açıklamasını istediğiniz zaman genai.update_tuned_model yöntemini çağırın.

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 ince ayar yapan işlerin performansını artırmak, öngörülemez.

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.