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

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

ai.google.dev で表示 Colab ノートブックを試す GitHub でノートブックを表示

制限事項

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

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

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

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

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

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

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

始める前に: プロジェクトと API キーを設定する

Gemini API を呼び出す前に、プロジェクトを設定し、API キーを構成する必要があります。

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

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

from google import genai
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 メソッドでデータセットをモデルに渡す必要があります。

この例では、シーケンスの次の番号を生成するようにモデルをチューニングします。たとえば、入力が 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.0-pro-001',
    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 にまだ実装されていません。