このドキュメントでは、教師ありファインチューニングを使用して翻訳 LLM モデルをチューニングする方法について説明します。
始める前に
始める前に、教師ありファインチューニング データセットを準備する必要があります。ユースケースに応じて、要件は異なります。
- チューニング用のテキスト データセットを準備する: テキスト チューニング
サポートされているモデル
translation-llm-002
(プレビュー版、テキスト チューニングのみをサポート)
調整ジョブを作成する
教師ありファインチューニング ジョブは、REST API または Vertex AI SDK for Python を使用して作成できます。
REST
モデルのチューニング ジョブを作成するには、tuningJobs.create
メソッドを使用して POST リクエストを送信します。一部のパラメータは、すべてのモデルでサポートされているわけではありません。チューニングするモデルに適用可能なパラメータのみを含めるようにしてください。
リクエストのデータを使用する前に、次のように置き換えます。
- PROJECT_ID: 実際のプロジェクト ID。
- TUNING_JOB_REGION: チューニング ジョブを実行するリージョン。これは、チューニング済みのモデルをアップロードするデフォルトのリージョンでもあります。サポートされているリージョン:
us-central1
。 - BASE_MODEL: チューニングする翻訳モデルの名前。サポートされる値:
translation-llm-002
。 - TRAINING_DATASET_URI: トレーニング データセットの Cloud Storage URI。データセットは JSONL ファイル形式でなければなりません。最適な結果を得るには、少なくとも 100~500 個のサンプルを含めます。詳細については、教師ありチューニング データセットについて をご覧ください。
- VALIDATION_DATASET_URI: 省略可。検証データセット ファイルの Cloud Storage URI。
- TUNED_MODEL_DISPLAYNAME: 省略可。チューニングされたモデルの表示名。設定されていない場合は、ランダムな名前が生成されます。
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", }, "tunedModelDisplayName": "TUNED_MODEL_DISPLAYNAME" }
リクエストを送信するには、次のいずれかのオプションを選択します。
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": "translation-llm-002",
"supervisedTuningSpec" : {
"training_dataset_uri": "gs://cloud-samples-data/ai-platform/generative_ai/sft_train_data.jsonl",
"validation_dataset_uri": "gs://cloud-samples-data/ai-platform/generative_ai/sft_validation_data.jsonl"
},
"tunedModelDisplayName": "tuned_translation_llm"
}'
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))
import time
import vertexai
from vertexai.tuning import sft
# TODO(developer): Update and un-comment below line.
# PROJECT_ID = os.environ["GOOGLE_CLOUD_PROJECT"]
vertexai.init(project=PROJECT_ID, location="us-central1")
sft_tuning_job = sft.train(
source_model="translation-llm-002",
train_dataset="gs://cloud-samples-data/ai-platform/generative_ai/gemini-1_5/text/sft_train_data.jsonl",
# The following parameters are optional
validation_dataset="gs://cloud-samples-data/ai-platform/generative_ai/gemini-1_5/text/sft_validation_data.jsonl",
tuned_model_display_name="tuned_translation_llm_002",
)
# 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 Cloud コンソール、Vertex AI SDK for Python を使用するか、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 レスポンスが返されます。
Python
コンソール
Google Cloud コンソールでチューニング ジョブを表示するには、[Vertex AI Studio] ページに移動します。
Translation LLM チューニング ジョブは、[Translation LLM チューニング済みモデル] セクションの表に表示されます。
チューニング ジョブの詳細を取得する
現在のプロジェクトのチューニング ジョブの詳細を取得するには、Google Cloud コンソールまたは Vertex AI SDK for Python を使用します。また、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 レスポンスが返されます。
Python
コンソール
チューニング済みモデルの詳細を Google Cloud コンソールで表示するには、[Vertex AI Studio] ページに移動します。
[Translation LLM チューニング済みモデル] の表でモデルを見つけて、[詳細] をクリックします。
モデルの詳細が表示されます。
チューニング ジョブをキャンセルする
現在のプロジェクトのチューニング ジョブをキャンセルするには、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 レスポンスが返されます。
Python
コンソール
Google Cloud コンソールでチューニング ジョブをキャンセルするには、[Vertex AI Studio] ページに移動します。
[翻訳チューニング済みモデル] の表で、[
実行を管理] をクリックします。[キャンセル] をクリックします。
プロンプトを使用してチューニングしたモデルをテストする
現在のプロジェクトのチューニング ジョブをテストするには、Vertex AI SDK for Python を使用するか、tuningJobs
メソッドを使用して POST リクエストを送信します。
次の例では、「空はなぜ青いの?」という質問をモデルに提示します。
REST
プロンプトを使用してチューニング済みモデルをテストするには、POST リクエストを送信して TUNED_ENDPOINT_ID
を指定します。
データをリクエストする前に、次のように置き換えます。
- PROJECT_ID: 実際のプロジェクト ID。
- TUNING_JOB_REGION: チューニング ジョブを実行するリージョン。これは、チューニング済みのモデルをアップロードするデフォルトのリージョンでもあります。
- ENDPOINT_ID: GET API から取得したチューニング済みモデルのエンドポイント ID。
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" : "English: Hello. Spanish:" } } ], }
リクエストを送信するには、次のいずれかのオプションを選択します。
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 レスポンスが返されます。
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))
チューニングと検証の指標
モデルのチューニングとモデルの評価の指標を収集して報告するよう、モデルのチューニング ジョブを構成できます。その後、Vertex AI Studio でこれらの指標を可視化できます。
チューニング済みモデルの詳細を Google Cloud コンソールで表示するには、[Vertex AI Studio] ページに移動します。
[チューニングと抽出] テーブルで、指標を表示する調整済みモデルの名前をクリックします。
チューニング指標は [モニタリング] タブに表示されます。
モデル チューニングの指標
モデルのチューニング ジョブは、translation-llm-002
について次のチューニング指標を自動的に収集します。
/train_total_loss
: トレーニング ステップでのチューニング データセットの損失。/train_fraction_of_correct_next_step_preds
: トレーニング ステップでのトークンの精度。1 回の予測は一連のトークンで構成されます。この指標は、チューニング用データセットのグラウンド トゥルースと比較したときに予測される、トークンの精度を測定します。/train_num_predictions:
トレーニング ステップで予測されるトークンの数。
モデル検証の指標
モデルのチューニング ジョブを構成して、translation-llm-002
について次の検証指標を収集できます。
/eval_total_loss
: 検証ステップでの検証データセットの損失。/eval_fraction_of_correct_next_step_preds
: 評価ステップでのトークンの精度。1 回の予測は一連のトークンで構成されます。この指標は、検証データセットのグラウンド トゥルースと比較したときに予測される、トークンの精度を測定します。/eval_num_predictions
: 検証ステップで予測されるトークンの数。
指標の可視化は、チューニング ジョブの実行が開始された後に利用できます。チューニングの進捗に応じてリアルタイムで更新されます。チューニング ジョブの作成時に検証データセットを指定しなかった場合、チューニング指標の可視化のみを行うことができます。
次のステップ
- 生成 AI ナレッジベースを構築するソリューションで教師ありファインチューニングを使用する方法について、ジャンプ スタート ソリューション: 生成 AI ナレッジベースを確認する。