ファインチューニングのチュートリアル

このチュートリアルでは、Python SDK または curl を使用して REST API のいずれかを使用して、Gemini API チューニング サービスを開始する方法について説明します。これらの例では、Gemini API テキスト生成サービスの背後にあるテキストモデルをチューニングする方法を示します。

始める前に

Gemini API を呼び出す前に、任意の SDK がインストールされ、Gemini API キーが構成され、使用可能であることを確認してください。

制限事項

モデルをチューニングする前に、次の制限事項に注意してください。

ファインチューニング データセット

Gemini 1.5 Flash のファインチューニング データセットには次の制限があります。

  • 1 つの例あたりの最大入力サイズは 40,000 文字です。
  • 1 つの例あたりの出力の最大サイズは 5,000 文字です。
  • 入出力ペアの例のみがサポートされます。チャット形式のマルチターンの会話はサポートされていません。

チューニングされたモデル

チューニング済みモデルには次の制限があります。

  • チューニング済みの Gemini 1.5 Flash モデルの入力上限は 40,000 文字です。
  • JSON モードは、チューニング済みモデルではサポートされていません。
  • テキスト入力のみがサポートされています。

チューニング済みモデルを一覧表示する

既存のチューニング済みモデルは、tunedModels.list メソッドで確認できます。

from google import genai
from google.genai import types
client = genai.Client() # Get the key from the GOOGLE_API_KEY env variable

for model_info in client.models.list():
    print(model_info.name)

チューニング済みモデルの作成

チューニング済みモデルを作成するには、tunedModels.create メソッドでdatasetをモデルに渡す必要があります。

この例では、シーケンスの次の番号を生成するようにモデルをチューニングします。たとえば、入力が 1 の場合、モデルは 2 を出力します。入力が one hundred の場合、出力は one hundred one になります。

# create tuning model
training_dataset =  [
    ["1", "2"],
    ["3", "4"],
    ["-3", "-2"],
    ["twenty two", "twenty three"],
    ["two hundred", "two hundred one"],
    ["ninety nine", "one hundred"],
    ["8", "9"],
    ["-98", "-97"],
    ["1,000", "1,001"],
    ["10,100,000", "10,100,001"],
    ["thirteen", "fourteen"],
    ["eighty", "eighty one"],
    ["one", "two"],
    ["three", "four"],
    ["seven", "eight"],
]
training_dataset=types.TuningDataset(
        examples=[
            types.TuningExample(
                text_input=i,
                output=o,
            )
            for i,o in training_dataset
        ],
    )
tuning_job = client.tunings.tune(
    base_model='models/gemini-1.5-flash-001-tuning',
    training_dataset=training_dataset,
    config=types.CreateTuningJobConfig(
        epoch_count= 5,
        batch_size=4,
        learning_rate=0.001,
        tuned_model_display_name="test tuned model"
    )
)

# generate content with the tuned model
response = client.models.generate_content(
    model=tuning_job.tuned_model.model,
    contents='III',
)

print(response.text)

エポック数、バッチサイズ、学習率の最適な値は、データセットとユースケースのその他の制約によって異なります。これらの値の詳細については、詳細なチューニング設定ハイパーパラメータをご覧ください。

モデルを試す

tunedModels.generateContent メソッドを使用して、チューニング済みモデルの名前を指定し、そのパフォーマンスをテストできます。

response = client.models.generate_content(
    model=tuning_job.tuned_model.model,
    contents='III'
)

実装されていません

一部の機能(進行状況レポート、説明の更新、チューニング済みモデルの削除)は、新しい SDK にまだ実装されていません。