モデルの作成と管理

このドキュメントでは、カスタム翻訳 LLM モデルをチューニングして使用する方法について説明します。

始める前に

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

Vertex AI API を有効にする

カスタム TLLM モデルをチューニングするには、次の操作を行う必要があります。

Vertex AI API を有効にします。

API を有効にするために必要なロール

API を有効にするには、serviceusage.services.enable 権限を含む Service Usage 管理者 IAM ロール(roles/serviceusage.serviceUsageAdmin)が必要です。詳しくは、ロールを付与する方法をご覧ください。

API の有効化

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

  • translation-llm-002(テキスト チューニングをサポートします。プレビュー版)。

チューニング ジョブを作成する

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

REST

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

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

  • PROJECT_ID: PROJECT_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 レスポンスが返されます。

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-2_0/text/sft_train_data.jsonl",
    # The following parameters are optional
    validation_dataset="gs://cloud-samples-data/ai-platform/generative_ai/gemini-2_0/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: PROJECT_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

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

コンソール

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

    [Vertex AI Studio] に移動

  2. [Translation LLM チューニング済みモデル] セクションの表に、Translation LLM チューニング ジョブが表示されます。

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

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

REST

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

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

  • PROJECT_ID: PROJECT_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

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

コンソール

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

    [Vertex AI Studio] に移動

  2. [Translation LLM tuned models] の表でモデルを見つけて、[詳細] をクリックします。

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

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

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

REST

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

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

  • PROJECT_ID: PROJECT_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

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

    [Vertex AI Studio] に移動

  2. [Translation LLM tuned models] の表で、[ 実行を管理] をクリックします。

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

モデルに関する情報を取得する

トレーニングが完了すると、モデル ID などのモデルに関する情報を取得できます。

使用可能なモデルの一覧を表示するには、Vertex AI エンドポイント ページに移動します。

Vertex AI の [エンドポイント] ページに移動

チューニング済みモデルを使用する

次の例では、モデル ID が 1395675701985363739 のカスタムモデルを使用してテキストを翻訳します。カスタム翻訳 LLM を使用するには、モデル ID として models/translation-llm-custom/{model-id} を指定します。

翻訳に使用するモデルを指定するには、model クエリ パラメータを使用します。

REST

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

  • PROJECT_ID: 実際の Google Cloud プロジェクト ID。
  • LOCATION: カスタムモデルが配置されているリージョン(us-central1 など)。

HTTP メソッドと URL:

POST https://translation.googleapis.com/v3/projects/PROJECT_ID/locations/LOCATION:translateText

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

{
  "model": "projects/PROJECT_ID/locations/LOCATION/model/translation-llm-custom/1395675701985363739",
  "sourceLanguageCode": "en",
  "targetLanguageCode": "ru",
  "contents": ["Dr. Watson, please discard your trash. You've shared unsolicited email with me.
  Let's talk about spam and importance ranking in a confidential mode."]
}

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

curl

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

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "x-goog-user-project: PROJECT_ID" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://translation.googleapis.com/v3/projects/PROJECT_ID/locations/LOCATION:translateText"

PowerShell

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

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred"; "x-goog-user-project" = "PROJECT_ID" }

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

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

{
  "translation": {
    "translatedText": "Доктор Ватсон, пожалуйста, откажитесь от своего мусора.
    Вы поделились нежелательной электронной почтой со мной. Давайте поговорим о
    спаме и важности рейтинга в конфиденциальном режиме.",
    "model": "projects/PROJECT_NUMBER/locations/LOCATION/model/translation-llm-custom/1395675701985363739"
  }
}

Python

from google.cloud import translate
def translate_text_with_model(
    text: str = "YOUR_TEXT_TO_TRANSLATE",
    project_id: str = "YOUR_PROJECT_ID",
    model_id: str = "YOUR_MODEL_ID",
) -> translate.TranslationServiceClient:
    """Translates a given text using Translation custom model."""

    client = translate.TranslationServiceClient()

    location = "us-central1"
    parent = f"projects/{project_id}/locations/{location}"
    model_path = f"{parent}/models/translation-llm-custom/{model_id}"

    # Supported language codes: https://cloud.google.com/translate/docs/languages
    response = client.translate_text(
        request={
            "contents": [text],
            "target_language_code": "ja",
            "model": model_path,
            "source_language_code": "en",
            "parent": parent,
            "mime_type": "text/plain",  # mime types: text/plain, text/html
        }
    )
    # Display the translation for each input text provided
    for translation in response.translations:
        print(f"Translated text: {translation.translated_text}")

    return response

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

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

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

    [Vertex AI Studio] に移動

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

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

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

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

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

モデル検証の指標

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

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

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

次のステップ