Gemini API でファインチューニングする

少数ショット プロンプトなどのプロンプト設計戦略では、必要な結果が得られない場合があります。ファインチューニングは、指示が不十分な場合に、目的の出力を示す一連のサンプルを使用して、特定のタスクに対するモデルのパフォーマンスを改善したり、モデルを特定の出力要件に沿うようにしたりできるプロセスです。

このページでは、Terraform の背後にあるテキストモデルのファインチューニングのコンセプトの概要を Gemini API テキストサービスを使用します。チューニングを開始する準備ができたら、ファインチューニングのチュートリアルをお試しください。特定のユースケース向けに LLM をカスタマイズする方法について詳しくは、ML 集中講座LLM: ファインチューニング、蒸留、プロンプト エンジニアリングをご覧ください。

ファインチューニングの仕組み

ファインチューニングの目的は、特定のタスクに対するモデルのパフォーマンスをさらに改善することです。ファインチューニングは、モデルにトレーニング タスクの例を多数含むデータセットです。ニッチなタスクの場合は、 パフォーマンスの大幅な向上が期待できます。 例の数になります。この種のモデル チューニングは、他の種類のファインチューニングと区別するために、教師ありファインチューニングと呼ばれることもあります。

トレーニング データは、プロンプト入力を含むサンプルとして構造化する必要があります。 出力を返します。Google AI Studio でサンプルデータを使用してモデルを直接チューニングすることもできます。目的は、その動作やタスクを示す多くの例をモデルに提供して、目的の動作やタスクを模倣するようモデルに学習させることです。

チューニング ジョブを実行すると、モデルは、目的のタスクの実行や目的の動作の学習に必要な情報をエンコードする際に役立つ追加のパラメータを学習します。これらのパラメータは、推論時に使用できます。チューニング ジョブの出力は新しいモデルです。これは、新しく学習したパラメータと元のモデルを組み合わせたものです。

データセットを準備する

ファインチューニングを開始する前に、モデルのチューニングに使用するデータセットが必要です。パフォーマンスを最適化するには、データセット内の例が高品質で多様であり、実際の入力と出力を代表するものである必要があります。

形式

データセットに含まれるサンプルは、想定される本番環境のトラフィックと一致していなければなりません。データセットに特定の書式、キーワード、指示、情報が含まれている場合は、本番データも同じ形式にし、同じ指示を含んでいる必要があります。

たとえば、データセットのサンプルに "question:""context:" が含まれている場合は、本番環境のトラフィックにも、データセットの例と同じ順序で "question:""context:" が含まれるように整形する必要があります。コンテキストを除外すると、データセット内の例に正確な質問が含まれていても、モデルはパターンを認識できません。

別の例として、シーケンス内の次の数値を生成するアプリケーションの Python トレーニング データは次のとおりです。

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"},
]

データセット内の各例にプロンプトまたはプリアンブルを追加すると、チューニング済みモデルのパフォーマンスを向上させることもできます。プロンプトまたはプリアンブルがデータセットに含まれている場合は、推論時にチューニング済みモデルのプロンプトにも含める必要があります。

制限事項

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

  • 例ごとの最大入力サイズは 40,000 文字です。
  • 例あたりの最大出力サイズは 5,000 文字です。

トレーニング データサイズ

20 個のサンプルでモデルをファインチューニングできます。追加データ 一般的に回答の質が向上します。アプリケーションに応じて、100~500 個のサンプルをターゲットにする必要があります。次の表に、さまざまな一般的なタスクのテキストモデルをファインチューニングするための推奨データセット サイズを示します。

タスク データセットのサンプル数
分類 100 以上
要約 100 ~ 500 以上
ドキュメントの検索 100 以上

チューニング データセットをアップロードする

データは、API を使用してインラインで渡すか、Google AI Studio でアップロードされたファイルから渡します。

クライアント ライブラリを使用するには、createTunedModel 呼び出しでデータファイルを指定します。 ファイルサイズの上限は 4 MB です。始める前に、Python によるファインチューニングのクイックスタートをご覧ください。

cURL を使用して REST API を呼び出すには、JSON 形式のトレーニング サンプルを training_data 引数。開始するには、cURL を使用したチューニングのクイックスタートをご覧ください。

高度なチューニング設定

チューニング ジョブを作成するときに、次の詳細設定を指定できます。

  • エポック: 各サンプルが 1 回処理されるように、トレーニング セット全体を完全にトレーニングするパス。
  • バッチサイズ: 1 回のトレーニングの反復処理で使用されるサンプルのセット。バッチサイズによって、バッチ内のサンプル数が決まります。
  • 学習率: 各反復処理でモデル パラメータをどの程度調整するかをアルゴリズムに指示する浮動小数点数。たとえば、 学習率を 0.3 にすると重みとバイアスが 3 倍に調整される 非常に強力です。学習率が高い / 低いことでは、 独自のトレードオフがあり、ユースケースに応じて調整する必要があります。
  • 学習率の乗数: レートの乗数は、モデルの 予測します。値が 1 の場合、モデルの元の学習率が使用されます。1 より大きい値は学習率を増加させ、1~0 の値は学習率を低下させます。

次の表に、Cloud Storage オブジェクトを微調整するための 基盤モデル:

ハイパーパラメータ デフォルト値 推奨される調整
エポック 5

5 エポックより前に損失が横ばいになる場合は、小さい値を使用します。

損失が収束していて、横ばいにならない場合は、値を大きくします。

バッチサイズ 4
学習率 0.001 データセットが小さい場合は、小さい値を使用します。

損失曲線は、モデルの予測が理想からどの程度逸脱しているかを示します。 各エポックの後にトレーニング サンプルで理想的には、曲線が横ばいになる直前に、曲線の最下点でトレーニングを停止します。たとえば 下のグラフはエポック 4 ~ 6 点で損失曲線が横ばい状態になっていることを表しています。 Epoch パラメータを 4 に設定しても、同じパフォーマンスが得られます。

モデルの損失曲線を示す折れ線グラフ入力と出力の間の線は
第 1 エポックと第 2 エポックで 0 に近い値まで急激に減少し、
トレーニングされます。

チューニング ジョブのステータスを確認する

チューニング ジョブのステータスは、Google AI Studio の [マイライブラリ] タブを使用するか、metadata Gemini API

エラーのトラブルシューティングを行う

このセクションでは、チューニング済みモデルの作成中に発生する可能性のあるエラーを解決する方法について説明します。

認証

API とクライアント ライブラリを使用してチューニングを行うには、認証が必要です。Google Chat では API キー(推奨)または OAuth を使用して認証を設定する 認証情報を取得できます。API キーの設定については、API キーを設定するをご覧ください。

'PermissionDenied: 403 Request had insufficient authentication scopes' エラーが発生した場合は、OAuth を使用してユーザー認証を設定する必要があります。 認証情報を取得できます。Python 用の OAuth 認証情報を設定するには、 OAuth 設定チュートリアルをご覧ください。

キャンセルされたモデル

ファインチューニング ジョブは、ジョブが完了する前にいつでもキャンセルできます。ただし、 キャンセルされたモデルの推論パフォーマンスは予測不可能です。 調整ジョブはトレーニングの早い段階でキャンセルされます。前のエポックでトレーニングを停止したためにキャンセルした場合は、新しいチューニング ジョブを作成し、エポックを小さい値に設定する必要があります。

チューニング済みモデルの制限事項

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

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

次のステップ

ファインチューニング チュートリアルを使ってみる: