教師ありファインチューニングを使用して Gemini モデルをチューニングする

このドキュメントでは、教師ありファインチューニングを使用して Gemini モデルをチューニングする方法について説明します。

始める前に

始める前に、教師ありファインチューニング データセットを準備する必要があります。ユースケースに応じて、要件は異なります。

サポートされているモデル

教師ありチューニングは、次の Gemini モデルでサポートされています。

調整ジョブを作成する

教師ありファインチューニング ジョブは、REST API、Vertex AI SDK for Python、Google Gen AI SDK、 Google Cloud コンソール、Colab Enterprise を使用して作成できます。

REST

モデルのチューニング ジョブを作成するには、tuningJobs.create メソッドを使用して POST リクエストを送信します。一部のパラメータは、すべてのモデルでサポートされているわけではありません。チューニングするモデルに適用可能なパラメータのみを含めるようにしてください。

リクエストのデータを使用する前に、次のように置き換えます。

  • PROJECT_ID: 実際のプロジェクト ID
  • TUNING_JOB_REGION: チューニング ジョブを実行するリージョン。これは、チューニング済みのモデルをアップロードするデフォルトのリージョンでもあります。
  • BASE_MODEL: チューニングする基盤モデルの名前。
  • TRAINING_DATASET_URI: トレーニング データセットの Cloud Storage URI。データセットは JSONL ファイル形式でなければなりません。最適な結果を得るには、少なくとも 100~500 個のサンプルを含めます。詳細については、教師ありチューニング データセットについてをご覧ください。
  • VALIDATION_DATASET_URI: 省略可。検証データセット ファイルの Cloud Storage URI。
  • EPOCH_COUNT: 省略可。トレーニング中にモデルがトレーニング データセット全体に対して行った完全なパスの数。事前入力された推奨値を使用する場合は、未設定のままにします。
  • ADAPTER_SIZE省略可: チューニング ジョブに使用するアダプタのサイズ。チューニング ジョブのアダプタのサイズは、トレーニング可能なパラメータの数に影響します。アダプタサイズが大きいほど、モデルはより複雑なタスクを学習できますが、より大きなトレーニング データセットと長いトレーニング時間が必要になります。
  • LEARNING_RATE_MULTIPLIER: 省略可。推奨学習率に適用する乗数。推奨値を使用する場合は、未設定のままにします。
  • EXPORT_LAST_CHECKPOINT_ONLY省略可: 最新のチェックポイントのみを使用する場合は、true に設定します。
  • TUNED_MODEL_DISPLAYNAME: 省略可。チューニングされたモデルの表示名。設定されていない場合は、ランダムな名前が生成されます。
  • KMS_KEY_NAME: 省略可。リソースの保護に使用される顧客管理の暗号鍵の Cloud KMS リソース ID。キーの形式は projects/my-project/locations/my-region/keyRings/my-kr/cryptoKeys/my-key です。鍵は、コンピューティング リソースが作成されているのと同じリージョンに存在する必要があります。詳細については、顧客管理の暗号鍵(CMEK)をご覧ください。
  • SERVICE_ACCOUNT: 省略可。チューニング ジョブ ワークロードが実行されるサービス アカウント。指定しない場合、プロジェクト内の Vertex AI セキュア ファインチューニング サービス エージェントが使用されます。チューニング サービス エージェントをご覧ください。顧客管理のサービス アカウントを使用する場合は、サービス アカウントに roles/aiplatform.tuningServiceAgent ロールを付与する必要があります。また、チューニング サービス エージェントに vertex-ai-service-account 権限も付与します。

HTTP メソッドと URL:

POST https://TUNING_JOB_REGION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/TUNING_JOB_REGION/tuningJobs

リクエストの本文(JSON):

{
  "baseModel": "BASE_MODEL",
  "supervisedTuningSpec" : {
      "trainingDatasetUri": "TRAINING_DATASET_URI",
      "validationDatasetUri": "VALIDATION_DATASET_URI",
      "hyperParameters": {
          "epochCount": "EPOCH_COUNT",
          "adapterSize": "ADAPTER_SIZE",
          "learningRateMultiplier": "LEARNING_RATE_MULTIPLIER"
      },
      "export_last_checkpoint_only": EXPORT_LAST_CHECKPOINT_ONLY,
  },
  "tunedModelDisplayName": "TUNED_MODEL_DISPLAYNAME",
  "encryptionSpec": {
    "kmsKeyName": "KMS_KEY_NAME"
  },
  "serviceAccount": "SERVICE_ACCOUNT"
}

リクエストを送信するには、次のいずれかのオプションを選択します。

curl

リクエスト本文を request.json という名前のファイルに保存して、次のコマンドを実行します。

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://TUNING_JOB_REGION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/TUNING_JOB_REGION/tuningJobs"

PowerShell

リクエスト本文を request.json という名前のファイルに保存して、次のコマンドを実行します。

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://TUNING_JOB_REGION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/TUNING_JOB_REGION/tuningJobs" | Select-Object -Expand Content

次のような JSON レスポンスが返されます。

curl コマンドの例

PROJECT_ID=myproject
LOCATION=us-central1
curl \
-X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
"https://${LOCATION}-aiplatform.googleapis.com/v1/projects/${PROJECT_ID}/locations/${LOCATION}/tuningJobs" \
-d \
$'{
   "baseModel": "gemini-2.0-flash-001",
   "supervisedTuningSpec" : {
      "training_dataset_uri": "gs://cloud-samples-data/ai-platform/generative_ai/gemini/text/sft_train_data.jsonl",
      "validation_dataset_uri": "gs://cloud-samples-data/ai-platform/generative_ai/gemini/text/sft_validation_data.jsonl"
   },
   "tunedModelDisplayName": "tuned_gemini"
}'

Vertex AI SDK for Python


import time

import vertexai
from vertexai.tuning import sft

# TODO(developer): Update and un-comment below line
# PROJECT_ID = "your-project-id"
vertexai.init(project=PROJECT_ID, location="us-central1")

sft_tuning_job = sft.train(
    source_model="gemini-2.0-flash-001",
    # 1.5 and 2.0 models use the same JSONL format
    train_dataset="gs://cloud-samples-data/ai-platform/generative_ai/gemini-1_5/text/sft_train_data.jsonl",
)

# Polling for job completion
while not sft_tuning_job.has_ended:
    time.sleep(60)
    sft_tuning_job.refresh()

print(sft_tuning_job.tuned_model_name)
print(sft_tuning_job.tuned_model_endpoint_name)
print(sft_tuning_job.experiment)
# Example response:
# projects/123456789012/locations/us-central1/models/1234567890@1
# projects/123456789012/locations/us-central1/endpoints/123456789012345
# <google.cloud.aiplatform.metadata.experiment_resources.Experiment object at 0x7b5b4ae07af0>

Google Gen AI SDK

import time

from google import genai
from google.genai.types import HttpOptions, CreateTuningJobConfig

client = genai.Client(http_options=HttpOptions(api_version="v1"))

tuning_job = client.tunings.tune(
    base_model="gemini-2.5-flash",
    training_dataset="gs://cloud-samples-data/ai-platform/generative_ai/gemini/text/sft_train_data.jsonl",
    config=CreateTuningJobConfig(
        tuned_model_display_name="Example tuning job",
    ),
)

running_states = set([
    "JOB_STATE_PENDING",
    "JOB_STATE_RUNNING",
])

while tuning_job.state in running_states:
    print(tuning_job.state)
    tuning_job = client.tunings.get(name=tuning_job.name)
    time.sleep(60)

print(tuning_job.tuned_model.model)
print(tuning_job.tuned_model.endpoint)
print(tuning_job.experiment)
# Example response:
# projects/123456789012/locations/us-central1/models/1234567890@1
# projects/123456789012/locations/us-central1/endpoints/123456789012345
# projects/123456789012/locations/us-central1/metadataStores/default/contexts/tuning-experiment-2025010112345678

if tuning_job.tuned_model.checkpoints:
    for i, checkpoint in enumerate(tuning_job.tuned_model.checkpoints):
        print(f"Checkpoint {i + 1}: ", checkpoint)
    # Example response:
    # Checkpoint 1:  checkpoint_id='1' epoch=1 step=10 endpoint='projects/123456789012/locations/us-central1/endpoints/123456789000000'
    # Checkpoint 2:  checkpoint_id='2' epoch=2 step=20 endpoint='projects/123456789012/locations/us-central1/endpoints/123456789012345'

コンソール

Google Cloud コンソールを使用して教師ありファインチューニングでテキストモデルをチューニングするには、次の操作を行います。

  1. コンソールの [Vertex AI] セクションで、[Vertex AI Studio] ページに移動します。 Google Cloud

    Vertex AI Studio に移動

  2. [チューニング済みモデルを作成] をクリックします。

  3. [チューニング方法] で、[教師ありチューニング] のラジオボタンを選択します。

  4. [モデルの詳細] で、次のように構成します。

    1. [チューニング済みモデル名] フィールドに、新しいチューニング済みモデルの名前を入力します(最大 128 文字)。
    2. [ベースモデル] フィールドで、[gemini-2.0-flash-001] を選択します。
    3. [リージョン] プルダウン フィールドで、パイプライン チューニング ジョブが実行されるリージョンと、チューニングされたモデルがデプロイされるリージョンを選択します。
  5. [チューニング設定] で、次のように構成します。

    1. [エポック数] フィールドに、モデルのチューニングで実行するステップ数を入力します。
    2. [アダプタサイズ] フィールドに、モデルのチューニングに使用するアダプタサイズを入力します。
    3. [学習率の乗数] フィールドに、各イテレーションのステップサイズを入力します。デフォルト値は 1 です。.
  6. 省略可: 中間チェックポイントを無効にして最新のチェックポイントのみを使用するには、[最後のチェックポイントのみをエクスポート] 切り替えボタンをクリックします。

  7. [続行] をクリックします。

    [チューニング用データセット] ページが開きます。

  8. データセット ファイルをアップロードするには、次のいずれかを選択します。

    1. まだデータセットをアップロードしていない場合は、[ファイルを Cloud Storage にアップロード] のラジオボタンを選択します。
    2. [JSONL ファイルの選択] フィールドで [参照] をクリックし、データセット ファイルを選択します。
    3. [データセットの場所] で [参照] をクリックし、データセット ファイルを保存する Cloud Storage バケットを選択します。
    4. データセット ファイルがすでに Cloud Storage バケットにある場合は、[Cloud Storage 上の既存ファイル] のラジオボタンを選択します。
    5. [Cloud Storage のファイルパス] フィールドで [参照] をクリックし、データセット ファイルがある Cloud Storage バケットを選択します。
  9. (省略可)トレーニング中に検証指標を取得するには、[モデル検証を有効にする] 切り替えボタンをクリックします。

    1. [検証データセット] に、検証データセットの Cloud Storage パスを入力します。
  10. [チューニングを開始] をクリックします。

    新しいモデルは、[チューニングと抽出] ページの [Gemini Pro チューニング済みモデル] セクションに表示されます。モデルのチューニングが完了すると、[ステータス] に「成功」と表示されます。

Colab Enterprise

Vertex AI でモデル チューニング ジョブを作成するには、Colab Enterprise のサイドパネルを使用します。サイドパネルで、関連するコード スニペットをノートブックに追加します。次に、コード スニペットを修正して実行し、チューニング ジョブを作成します。Vertex AI でのチューニング ジョブでサイドパネルを使用する方法の詳細については、Vertex AI を操作してモデルをチューニングするをご覧ください。

  1. Google Cloud コンソールで、Colab Enterprise の [マイ ノートブック] ページに移動します。

    [マイ ノートブック] に移動

  2. [リージョン] メニューで、ノートブックを含むリージョンを選択します。

  3. 開きたいノートブックをクリックします。ノートブックをまだ作成していない場合は、ノートブックを作成します。

  4. ノートブックの右側のサイドパネルで、 [チューニング] ボタンをクリックします。

    サイドパネルで [チューニング] タブが開きます。

  5. [Gemini モデルをチューニングする] ボタンをクリックします。

    Colab Enterprise により、Gemini モデルをチューニングするためのコードセルがノートブックに追加されます。

  6. ノートブックで、パラメータ値を格納するコードセルを探します。これらのパラメータを使用して Vertex AI を操作します。

  7. 次のパラメータの値を更新します。

    • PROJECT_ID: ノートブックが含まれるプロジェクトの ID。
    • REGION: ノートブックが配置されているリージョン。
    • TUNED_MODEL_DISPLAY_NAME: チューニング済みモデルの名前。
  8. 次のコードセルのモデル チューニング パラメータを更新します。

    • source_model: 使用する Gemini モデル(例: gemini-2.0-flash-001)。
    • train_dataset: トレーニング データセットの URL。
    • validation_dataset: 検証データセットの URL。
    • 必要に応じて、残りのパラメータを調整します。
  9. サイドパネルからノートブックに追加されたコードセルを実行します。

  10. 最後のコードセルが実行されたら、表示された  [チューニング ジョブを表示] ボタンをクリックします。

  11. サイドパネルには、モデル チューニング ジョブに関する情報が表示されます。

    • 指標の準備が整うと、[モニタリング] タブにチューニング指標が表示されます。
    • [データセット] タブには、データセットが処理された後、データセットに関するサマリーと指標が表示されます。
    • [詳細] タブには、チューニング方法や使用したベースモデル(ソースモデル)など、チューニング ジョブに関する情報が表示されます。
  12. チューニング ジョブが完了したら、[チューニングの詳細] タブから直接、モデルをテストできるページに移動できます。[テスト] をクリックします。

    コンソールで Vertex AI の [テキスト チャット] ページが開きます。ここでモデルをテストできます。 Google Cloud

ハイパーパラメータの調整

最初のチューニング ジョブは、ハイパーパラメータを変更せずに送信することをおすすめします。デフォルト値はモデル出力の品質を最大限に高めることが期待される、ベンチマークの結果に基づく推奨値です。

  • エポック: トレーニング中にモデルがトレーニング データセット全体に対して行う完全なパスの数。Vertex AI では、トレーニング データセットのサイズに合わせてデフォルト値が自動的に調整されます。この値はベンチマークの結果に基づいて、モデル出力の品質を最適化します。
  • アダプタのサイズ: チューニング ジョブに使用するアダプタのサイズ。チューニング ジョブのアダプタのサイズは、トレーニング可能なパラメータの数に影響します。アダプタサイズが大きいほど、モデルはより複雑なタスクを学習できますが、より大きなトレーニング データセットと長いトレーニング時間が必要になります。
  • 学習率の乗数: 推奨学習率に適用する乗数。この値を増やすと収束が早まり、値を減らすと過学習を回避できます。

教師ありファインチューニングのベスト プラクティスについては、ブログ投稿「Gemini の教師ありファインチューニング: ベスト プラクティス ガイド」をご覧ください。

チューニング ジョブのリストを表示する

現在のプロジェクトのチューニング ジョブのリストを表示するには、 Google Cloud コンソール、Vertex AI SDK for Python、Google Gen AI SDK を使用するか、tuningJobs メソッドを使用して GET リクエストを送信します。

REST

モデルのチューニング ジョブのリストを表示するには、tuningJobs.list メソッドを使用して GET リクエストを送信します。

リクエストのデータを使用する前に、次のように置き換えます。

  • PROJECT_ID: 実際のプロジェクト ID
  • TUNING_JOB_REGION: チューニング ジョブを実行するリージョン。これは、チューニング済みのモデルをアップロードするデフォルトのリージョンでもあります。

HTTP メソッドと URL:

GET https://TUNING_JOB_REGION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/TUNING_JOB_REGION/tuningJobs

リクエストを送信するには、次のいずれかのオプションを選択します。

curl

次のコマンドを実行します。

curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://TUNING_JOB_REGION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/TUNING_JOB_REGION/tuningJobs"

PowerShell

次のコマンドを実行します。

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://TUNING_JOB_REGION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/TUNING_JOB_REGION/tuningJobs" | Select-Object -Expand Content

次のような JSON レスポンスが返されます。

Vertex AI SDK for Python

import vertexai
from vertexai.tuning import sft

# TODO(developer): Update and un-comment below line
# PROJECT_ID = "your-project-id"
vertexai.init(project=PROJECT_ID, location="us-central1")

responses = sft.SupervisedTuningJob.list()

for response in responses:
    print(response)
# Example response:
# <vertexai.tuning._supervised_tuning.SupervisedTuningJob object at 0x7c85287b2680>
# resource name: projects/12345678/locations/us-central1/tuningJobs/123456789012345

Google Gen AI SDK

from google import genai
from google.genai.types import HttpOptions

client = genai.Client(http_options=HttpOptions(api_version="v1"))

responses = client.tunings.list()
for response in responses:
    print(response.name)
    # Example response:
    # projects/123456789012/locations/us-central1/tuningJobs/123456789012345

コンソール

コンソールでチューニング ジョブを表示するには、[Vertex AI Studio] ページに移動します。 Google Cloud

Vertex AI Studio に移動

Gemini チューニング ジョブは、[Gemini Pro チューニング済みモデル] セクションの表に表示されます。

チューニング ジョブの詳細を取得する

現在のプロジェクトのチューニング ジョブの詳細を取得するには、 Google Cloud コンソール、Vertex AI SDK for Python、Google Gen AI SDK を使用します。また、tuningJobs メソッドを使用して GET リクエストを送信することで取得することもできます。

REST

モデルのチューニング ジョブのリストを表示するには、tuningJobs.get メソッドを使用して GET リクエストを送信し、TuningJob_ID を指定します。

リクエストのデータを使用する前に、次のように置き換えます。

  • PROJECT_ID: 実際のプロジェクト ID
  • TUNING_JOB_REGION: チューニング ジョブを実行するリージョン。これは、チューニング済みのモデルをアップロードするデフォルトのリージョンでもあります。
  • TUNING_JOB_ID: チューニング ジョブの ID。

HTTP メソッドと URL:

GET https://TUNING_JOB_REGION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/TUNING_JOB_REGION/tuningJobs/TUNING_JOB_ID

リクエストを送信するには、次のいずれかのオプションを選択します。

curl

次のコマンドを実行します。

curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://TUNING_JOB_REGION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/TUNING_JOB_REGION/tuningJobs/TUNING_JOB_ID"

PowerShell

次のコマンドを実行します。

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://TUNING_JOB_REGION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/TUNING_JOB_REGION/tuningJobs/TUNING_JOB_ID" | Select-Object -Expand Content

次のような JSON レスポンスが返されます。

Vertex AI SDK for Python

import vertexai
from vertexai.tuning import sft

# TODO(developer): Update and un-comment below lines
# PROJECT_ID = "your-project-id"
# LOCATION = "us-central1"
vertexai.init(project=PROJECT_ID, location=LOCATION)

tuning_job_id = "4982013113894174720"
response = sft.SupervisedTuningJob(
    f"projects/{PROJECT_ID}/locations/{LOCATION}/tuningJobs/{tuning_job_id}"
)

print(response)
# Example response:
# <vertexai.tuning._supervised_tuning.SupervisedTuningJob object at 0x7cc4bb20baf0>
# resource name: projects/1234567890/locations/us-central1/tuningJobs/4982013113894174720

Google Gen AI SDK

from google import genai
from google.genai.types import HttpOptions

client = genai.Client(http_options=HttpOptions(api_version="v1"))

# Get the tuning job and the tuned model.
# Eg. tuning_job_name = "projects/123456789012/locations/us-central1/tuningJobs/123456789012345"
tuning_job = client.tunings.get(name=tuning_job_name)

print(tuning_job.tuned_model.model)
print(tuning_job.tuned_model.endpoint)
print(tuning_job.experiment)
# Example response:
# projects/123456789012/locations/us-central1/models/1234567890@1
# projects/123456789012/locations/us-central1/endpoints/123456789012345
# projects/123456789012/locations/us-central1/metadataStores/default/contexts/tuning-experiment-2025010112345678

コンソール

  1. チューニング済みモデルの詳細をコンソールで表示するには、[Vertex AI Studio] ページに移動します。 Google Cloud

    Vertex AI Studio に移動

  2. [Gemini Pro チューニング済みモデル] の表でモデルを見つけて、[詳細] をクリックします。

    モデルの詳細が表示されます。

チューニング ジョブをキャンセルする

現在のプロジェクトのチューニング ジョブをキャンセルするには、 Google Cloud コンソールまたは Vertex AI SDK for Python を使用します。また、tuningJobs メソッドを使用して POST リクエストを送信することでキャンセルすることもできます。

REST

モデルのチューニング ジョブのリストを表示するには、tuningJobs.cancel メソッドを使用して GET リクエストを送信し、TuningJob_ID を指定します。

リクエストのデータを使用する前に、次のように置き換えます。

  • PROJECT_ID: 実際のプロジェクト ID
  • TUNING_JOB_REGION: チューニング ジョブを実行するリージョン。これは、チューニング済みのモデルをアップロードするデフォルトのリージョンでもあります。
  • TUNING_JOB_ID: チューニング ジョブの ID。

HTTP メソッドと URL:

POST https://TUNING_JOB_REGION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/TUNING_JOB_REGION/tuningJobs/TUNING_JOB_ID:cancel

リクエストを送信するには、次のいずれかのオプションを選択します。

curl

次のコマンドを実行します。

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d "" \
"https://TUNING_JOB_REGION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/TUNING_JOB_REGION/tuningJobs/TUNING_JOB_ID:cancel"

PowerShell

次のコマンドを実行します。

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-Uri "https://TUNING_JOB_REGION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/TUNING_JOB_REGION/tuningJobs/TUNING_JOB_ID:cancel" | Select-Object -Expand Content

次のような JSON レスポンスが返されます。

Vertex AI SDK for Python

import vertexai
from vertexai.tuning import sft

# TODO(developer): Update and un-comment below lines
# PROJECT_ID = "your-project-id"
# LOCATION = "us-central1"
vertexai.init(project=PROJECT_ID, location=LOCATION)

tuning_job_id = "4982013113894174720"
job = sft.SupervisedTuningJob(
    f"projects/{PROJECT_ID}/locations/{LOCATION}/tuningJobs/{tuning_job_id}"
)
job.cancel()

コンソール

  1. コンソールでチューニング ジョブをキャンセルするには、[Vertex AI Studio] ページに移動します。 Google Cloud

    Vertex AI Studio に移動

  2. [Gemini Pro チューニング済みモデル] の表で、[ 実行を管理] をクリックします。

  3. [キャンセル] をクリックします。

チューニング済みモデルを評価する

チューニング済みモデル エンドポイントは、Vertex AI SDK for Python または Google Gen AI SDK を使用してベース Gemini と同じ方法で操作できます。
また、generateContent メソッドを使用して POST リクエストを送信することもできます。

Gemini 2.5 Flash などの思考モデルでは、パフォーマンスと費用対効果を最適化するために、思考予算を 0 に設定して、チューニング済みタスクでの思考をオフにすることをおすすめします。教師ありファインチューニングでは、モデルは思考プロセスを省略して、チューニング データセットのグラウンド トゥルースを模倣することを学習します。そのため、チューニング済みモデルは、予算を気にすることなくタスクを効果的に処理できます。

次の例では、「空はなぜ青いの?」という質問をモデルに提示します。

REST

プロンプトを使用してチューニング済みモデルをテストするには、POST リクエストを送信して TUNED_ENDPOINT_ID を指定します。

データをリクエストする前に、次のように置き換えます。

  • PROJECT_ID: 実際のプロジェクト ID
  • TUNING_JOB_REGION: チューニング ジョブを実行するリージョン。これは、チューニング済みのモデルをアップロードするデフォルトのリージョンでもあります。
  • ENDPOINT_ID: GET API から取得したチューニング済みモデルのエンドポイント ID。
  • TEMPERATURE: 温度は、topPtopK が適用された場合に発生するレスポンス生成時のサンプリングに使用されます。温度は、トークン選択のランダム性の度合いを制御します。温度が低いほど、確定的で自由度や創造性を抑えたレスポンスが求められるプロンプトに適しています。一方、温度が高いと、より多様で創造的な結果を導くことができます。温度が 0 の場合、確率が最も高いトークンが常に選択されます。この場合、特定のプロンプトに対するレスポンスはほとんど確定的ですが、わずかに変動する可能性は残ります。

    モデルが返すレスポンスが一般的すぎる、短すぎる、あるいはフォールバック(代替)レスポンスが返ってくる場合は、温度を高く設定してみてください。

  • TOP_P: Top-P は、モデルが出力用にトークンを選択する方法を変更します。確率の合計が Top-P の値と等しくなるまで、最も確率が高いものから最も確率が低いものの順に、トークンが選択されます。たとえば、トークン A、B、C の確率が 0.3、0.2、0.1 であり、トップ P 値が 0.5 であるとします。この場合、モデルは温度を使用して A または B を次のトークンとして選択し、C は候補から除外します。

    ランダムなレスポンスを減らしたい場合は小さい値を、ランダムなレスポンスを増やしたい場合は大きい値を指定します。

  • TOP_K: Top-K は、モデルが出力用にトークンを選択する方法を変更します。Top-K が 1 の場合、次に選択されるトークンは、モデルの語彙内のすべてのトークンで最も確率の高いものであることになります(グリーディ デコードとも呼ばれます)。Top-K が 3 の場合は、最も確率が高い上位 3 つのトークンから次のトークン選択されることになります(温度を使用します)。

    トークン選択のそれぞれのステップで、最も高い確率を持つ Top-K のトークンがサンプリングされます。その後、トークンはトップ P に基づいてさらにフィルタリングされ、最終的なトークンは温度サンプリングを用いて選択されます。

    ランダムなレスポンスを減らしたい場合は小さい値を、ランダムなレスポンスを増やしたい場合は大きい値を指定します。

  • MAX_OUTPUT_TOKENS: レスポンスで生成できるトークンの最大数。1 トークンは約 4 文字です。100 トークンは約 60~80 語に相当します。

    回答を短くしたい場合は小さい値を、長くしたい場合は大きい値を指定します。

HTTP メソッドと URL:

POST https://TUNING_JOB_REGION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/TUNING_JOB_REGION/endpoints/ENDPOINT_ID:generateContent

リクエストの本文(JSON):

{
    "contents": [
        {
            "role": "USER",
            "parts": {
                "text" : "Why is sky blue?"
            }
        }
    ],
    "generation_config": {
        "temperature":TEMPERATURE,
        "topP": TOP_P,
        "topK": TOP_K,
        "maxOutputTokens": MAX_OUTPUT_TOKENS
    }
}

リクエストを送信するには、次のいずれかのオプションを選択します。

curl

リクエスト本文を request.json という名前のファイルに保存して、次のコマンドを実行します。

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://TUNING_JOB_REGION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/TUNING_JOB_REGION/endpoints/ENDPOINT_ID:generateContent"

PowerShell

リクエスト本文を request.json という名前のファイルに保存して、次のコマンドを実行します。

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://TUNING_JOB_REGION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/TUNING_JOB_REGION/endpoints/ENDPOINT_ID:generateContent" | Select-Object -Expand Content

次のような JSON レスポンスが返されます。

Vertex AI SDK for Python

from vertexai.generative_models import GenerativeModel

sft_tuning_job = sft.SupervisedTuningJob("projects/<PROJECT_ID>/locations/<TUNING_JOB_REGION>/tuningJobs/<TUNING_JOB_ID>")
tuned_model = GenerativeModel(sft_tuning_job.tuned_model_endpoint_name)
print(tuned_model.generate_content(content))

Google Gen AI SDK

from google import genai
from google.genai.types import HttpOptions

client = genai.Client(http_options=HttpOptions(api_version="v1"))

# Get the tuning job and the tuned model.
# Eg. tuning_job_name = "projects/123456789012/locations/us-central1/tuningJobs/123456789012345"
tuning_job = client.tunings.get(name=tuning_job_name)

contents = "Why is the sky blue?"

# Predicts with the tuned endpoint.
response = client.models.generate_content(
    model=tuning_job.tuned_model.endpoint,
    contents=contents,
)
print(response.text)
# Example response:
# The sky is blue because ...

コンソール

  1. チューニング済みモデルの詳細をコンソールで表示するには、[Vertex AI Studio] ページに移動します。 Google Cloud

    Vertex AI Studio に移動

  2. [Gemini Pro チューニング済みモデル] の表で、[テスト] を選択します。

    チューニングしたモデルで会話を作成できるページが開きます。

チューニング済みモデルの削除

チューニング済みモデルは削除できません。

チューニングと検証の指標

モデルのチューニングとモデルの評価の指標を収集して報告するよう、モデルのチューニング ジョブを構成できます。その後、Vertex AI Studio でこれらの指標を可視化できます。

  1. チューニング済みモデルの詳細をコンソールで表示するには、[Vertex AI Studio] ページに移動します。 Google Cloud

    Vertex AI Studio に移動

  2. [チューニングと抽出] テーブルで、指標を表示する調整済みモデルの名前をクリックします。

    チューニング指標は [モニタリング] タブに表示されます。

モデル チューニングの指標

モデルのチューニング ジョブは、Gemini 2.0 Flash について次のチューニング指標を自動的に収集します。

  • /train_total_loss: トレーニング ステップでのチューニング データセットの損失。
  • /train_fraction_of_correct_next_step_preds: トレーニング ステップでのトークンの精度。1 回の予測は一連のトークンで構成されます。この指標は、チューニング用データセットのグラウンド トゥルースと比較したときに予測される、トークンの精度を測定します。
  • /train_num_predictions: トレーニング ステップで予測されるトークンの数。

モデル検証の指標

モデルのチューニング ジョブを構成して、Gemini 2.0 Flash について次の検証指標を収集できます。

  • /eval_total_loss: 検証ステップでの検証データセットの損失。
  • /eval_fraction_of_correct_next_step_preds: 評価ステップでのトークンの精度。1 回の予測は一連のトークンで構成されます。この指標は、検証データセットのグラウンド トゥルースと比較したときに予測される、トークンの精度を測定します。
  • /eval_num_predictions: 検証ステップで予測されるトークンの数。

指標の可視化は、チューニング ジョブの実行が開始された後に利用できます。チューニングの進捗に応じてリアルタイムで更新されます。チューニング ジョブの作成時に検証データセットを指定しなかった場合、チューニング指標の可視化のみを行うことができます。

次のステップ