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

このチュートリアルでは、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 メソッドで確認できます。

import google.generativeai as genai

for model_info in genai.list_tuned_models():
    print(model_info.name)

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

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

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

import google.generativeai as genai

import time

base_model = "models/gemini-1.5-flash-001-tuning"
training_data = [
    {"text_input": "1", "output": "2"},
    # ... more examples ...
    # ...
    {"text_input": "seven", "output": "eight"},
]
operation = genai.create_tuned_model(
    # You can use a tuned model here too. Set `source_model="tunedModels/..."`
    display_name="increment",
    source_model=base_model,
    epoch_count=20,
    batch_size=4,
    learning_rate=0.001,
    training_data=training_data,
)

for status in operation.wait_bar():
    time.sleep(10)

result = operation.result()
print(result)
# # You can plot the loss curve with:
# snapshots = pd.DataFrame(result.tuning_task.snapshots)
# sns.lineplot(data=snapshots, x='epoch', y='mean_loss')

model = genai.GenerativeModel(model_name=result.name)
result = model.generate_content("III")
print(result.text)  # IV

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

モデルのチューニングにはかなりの時間がかかる可能性があるため、この API はチューニングが完了するまで待機しません。代わりに、チューニング ジョブのステータスを確認したり、完了を待機して結果を確認したりできる google.api_core.operation.Operation オブジェクトを返します。

チューニング済みモデルは、チューニング済みモデルのリストにすぐに追加されますが、モデルのチューニング中は状態が「作成中」に設定されます。

チューニングの進捗状況を確認する

チューニング オペレーションの進行状況は、wait_bar() メソッドを使用して確認できます。

for status in operation.wait_bar():
    time.sleep(10)

operation.metadata を使用してチューニング ステップの合計数を確認したり、operation.update() を使用してオペレーションのステータスを更新したりすることもできます。

cancel() メソッドを使用して、いつでもチューニング ジョブをキャンセルできます。

operation.cancel()

モデルを試す

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

import google.generativeai as genai

model = genai.GenerativeModel(model_name="tunedModels/my-increment-model")
result = model.generate_content("III")
print(result.text)  # "IV"

説明を更新する

チューニング済みモデルの説明は、genai.update_tuned_model メソッドを使用していつでも更新できます。

genai.update_tuned_model('tunedModels/my-increment-model', {"description":"This is my model."})

モデルを削除する

不要になったモデルを削除して、チューニング済みモデルのリストをクリーンアップできます。モデルを削除するには、tunedModels.delete メソッドを使用します。チューニング ジョブをキャンセルした場合は、パフォーマンスが予測できない可能性があるため、削除することをおすすめします。

genai.delete_tuned_model("tunedModels/my-increment-model")