教師ありチューニングでは、ラベル付けされた例を使用してモデルをチューニングします。それぞれの例は、推論時にテキストモデルから期待される出力を示しています。教師ありチューニングは、モデルの出力がそれほど複雑ではなく、定義が簡単な場合に適しています。
- モデルからの出力を定義するのが難しい場合は、人間からのフィードバックを用いた強化学習(RLHF)チューニングを使用して、テキストモデルをチューニングすることを検討してください。
- 教師ありチューニングによるコードモデルのチューニングについては、コードモデルをチューニングするをご覧ください。
テキストモデルの教師ありチューニングの詳細なガイダンス
次のガイド付きチュートリアルでは、教師ありチューニングを使用して、Google Cloud コンソールでテキストの基盤モデルをチューニングする方法について説明します。
このタスクを Google Cloud コンソールで直接行う際の順を追ったガイダンスについては、「ガイドを表示」をクリックしてください。
教師ありモデルのチューニングのワークフロー
Vertex AI での教師ありモデルのチューニング ワークフローには、次の手順が含まれます。
- モデルのチューニング用データセットを準備します。
- モデルのチューニング用データセットを Cloud Storage バケットにアップロードします。
- 教師ありモデルのチューニング ジョブを作成します。
モデルのチューニングが完了すると、チューニング済みモデルが Vertex AI エンドポイントにデプロイされます。エンドポイントの名前は、チューニング済みモデルの名前と同じです。新しいプロンプトを作成するときに、チューニング済みモデルを Vertex AI Studio で選択できます。
サポートされているモデル
次のテキスト基盤モデルは、教師ありチューニングをサポートしています。
- テキスト生成 -
text-bison@002
とtext-bison-32k@002
- テキスト チャット -
chat-bison@002
とchat-bison-32k@002
- コードの生成 -
code-bison@002
とtext-bison-32k@002
- コードチャット -
codechat-bison@002
とcodechat-bison-32k@002
- テキスト エンべディング -
textembedding-gecko@001
(プレビュー)
テキストモデルで教師ありチューニングを使用するユースケース
基盤テキストモデルは、期待される出力やタスクがプロンプトで明確かつ簡潔に定義可能で、プロンプトが常に期待される出力を生成する場合に適しています。一般的な言語パターンから逸脱するニッチな、または特定の情報をモデルに学習させるときは、そのモデルのチューニングを検討してください。たとえば、モデルのチューニングを使用して、モデルに次のことを学習させられます。
- 出力を生成するための特定の構造や形式
- 場合に応じて出力を簡潔または詳細にするなどの、特定の動作
- 入力のタイプに合わせてカスタマイズされた特定の出力
次の例は、プロンプトの指示だけではキャプチャが難しいユースケースです。
分類: 期待されるレスポンスが特定の単語やフレーズ。
モデルをチューニングすると、モデルが冗長なレスポンスを生成しないようにできます。
要約: 要約は特定の形式に従っています。たとえば、チャットの概要で個人情報(PII)の削除が必要な場合があります。
この形式では、話者の名前を
#Person1
と#Person2
で置き換えていますが、記述しにくく、基盤モデルではこのようなレスポンスが自然に得られない可能性があります。抜粋された質問応答: 質問はコンテキストに関するもので、回答はコンテキストの部分文字列です。
「最終氷期極大期」というレスポンスは、コンテキストから抜き出した特定のフレーズです。
チャット: ペルソナ、ロール、キャラクターに合わせて、モデルのレスポンスをカスタマイズする必要があります。
次のような状況でも、モデルをチューニングできます。
- プロンプトが、希望する結果を十分に一貫して生成しない。
- タスクが複雑すぎて、プロンプトで定義できない。たとえば、プロンプトで表現するのが難しい動作について、モデルに動作を再現させることができます。
- タスクについての直感が複雑で、引き出すのは簡単だが、プロンプトとして定式化するのが難しい。
- 少数ショットの例を削除して、コンテキストを短くしたい。
教師ありチューニングのデータセットを準備する
基盤モデルのチューニングに使用するデータセットには、モデルで実行するタスクに応じたサンプルを含める必要があります。テキストからテキストへの形式で、トレーニング データセットを構造化します。データセット内の各レコード(または行)には入力テキスト(プロンプトとも呼ばれます)が含まれており、このテキストはモデルから予測される出力と対になります。教師ありチューニングでは、データセットを使用し、必要とする動作(タスク)を示す数百のサンプルを与えて、その動作を模倣するようモデルに学習させます。
データセットは少なくとも 10 個のサンプルを含む必要があります。良好な結果を得るには、最低でも 100~500 個のサンプルを含めることをおすすめします。データセットに含まれているサンプルが多いほど、良い結果が得られます。
サンプル データセットについては、このページのサンプル データセットをご覧ください。
データセットのフォーマット
モデルのチューニング用データセットは、JSON Lines(JSONL)形式で、各行に 1 つのチューニング サンプルが含まれている必要があります。テキスト生成モデルのチューニングに使用されるデータセットのフォーマットは、テキスト チャットモデルのチューニングに使用されるデータセットのフォーマットとは異なります。モデルをチューニングする前に、データセットを Cloud Storage バケットにアップロードする必要があります。
テキスト
それぞれのサンプルは、モデルへのプロンプトを含む input_text
フィールドと、チューニング済みのモデルで生成が期待されるレスポンスのサンプルを含む output_text
フィールドで構成されます。構造化プロンプトからの追加フィールド(context
など)は無視されます。
input_text
の最大トークン長は 8,192 で、output_text
の最大トークン長は 1,024 です。いずれかのフィールドがトークンの最大長を超えると、超過分のトークンは切り捨てられます。
テキスト生成モデル用のデータセットに含めることができるサンプルの最大数は 10,000 です。
データセットの例
{"input_text": "question: How many people live in Beijing? context: With over 21 million residents, Beijing is the world's most populous national capital city and is China's second largest city after Shanghai. It is located in Northern China, and is governed as a municipality under the direct administration of the State Council with 16 urban, suburban, and rural districts.[14] Beijing is mostly surrounded by Hebei Province with the exception of neighboring Tianjin to the southeast; together, the three divisions form the Jingjinji megalopolis and the national capital region of China.", "output_text": "over 21 million people"}
{"input_text": "question: How many parishes are there in Louisiana? context: The U.S. state of Louisiana is divided into 64 parishes (French: paroisses) in the same manner that 48 other states of the United States are divided into counties, and Alaska is divided into boroughs.", "output_text": "64"}
サンプルに手順を含める
分類などのタスクでは、手順を含まないサンプルのデータセットを作成できます。ただし、データセットのサンプルから手順を除外すると、特に小さなデータセットの場合、手順を含める場合よりもチューニング後のパフォーマンスが低下します。
手順を除外:
{"input_text": "5 stocks to buy now", "output_text": "business"}
手順を含む:
{"input_text": "Classify the following text into one of the following classes: [business, entertainment] Text: 5 stocks to buy now", "output_text": "business"}
チャット
チャット チューニング用データセットの各会話のサンプルは、messages
フィールド(必須)と context
フィールド(省略可)で構成されています。
messages
フィールドは、作成者とコンテンツのペアの配列で構成されます。author
フィールドはメッセージの作成者を参照し、交互に user
または assistant
に設定されます。content
フィールドはメッセージの内容です。各会話のサンプルには、ユーザーからのメッセージとモデルからのレスポンスを表す、2~3 のユーザー アシスタント メッセージのペアが必要です。
context
フィールドでは、チャットのコンテキストを指定できます。サンプルのコンテキストを指定すると、default_context
で指定された値がオーバーライドされます。
各会話のサンプルで、context
と messages
を合わせたトークンの最大長は 8,192 トークンです。また、assistant
の各 content
フィールドは 1,024 トークンを超えないようにしてください。
テキスト チャットモデル用のデータセットのサンプルに含めることができる author
フィールドの最大数は 10,000 です。この最大値は、すべてのサンプルのすべての messages
に含まれている、すべての author
フィールドの合計です。
例
{
"context": "You are a pirate dog named Captain Barktholomew.",
"messages": [
{
"author": "user",
"content": "Hi"
},
{
"author": "assistant",
"content": "Argh! What brings ye to my ship?"
},
{
"author": "user",
"content": "What's your name?"
},
{
"author": "assistant",
"content": "I be Captain Barktholomew, the most feared pirate dog of the seven seas."
}
]
}
サンプル データセット
サンプル データセットを使用して、text-bison@002
モデルのチューニングを開始できます。以下に示すのは、さまざまな医療専門分野向けの医療用音声文字変換のサンプルを含む、分類タスクのデータセットです。このデータは mtsamples.com からのもので、Kaggle で入手できます。
サンプル チューニング用データセットの URI:
gs://cloud-samples-data/vertex-ai/model-evaluation/peft_train_sample.jsonl
サンプル評価用データセットの URI:
gs://cloud-samples-data/vertex-ai/model-evaluation/peft_eval_sample.jsonl
これらのデータセットを使用するには、テキストモデルの教師ありチューニング ジョブの作成時に、該当するパラメータで URI を指定します。
例:
...
"dataset_uri": "gs://cloud-samples-data/vertex-ai/model-evaluation/peft_train_sample.jsonl",
...
"evaluation_data_uri": "gs://cloud-samples-data/vertex-ai/model-evaluation/peft_eval_sample.jsonl",
...
本番環境データとの整合性を維持する
データセットに含まれるサンプルは、想定される本番環境のトラフィックと一致していなければなりません。データセットに特定の書式、キーワード、指示、情報が含まれている場合は、本番環境のデータも同じ形式にし、同じ指示を含んでいる必要があります。
たとえば、データセットのサンプルに "question:"
と "context:"
が含まれている場合は、本番環境のトラフィックにも、データセットの例と同じ順序で "question:"
と "context:"
が含まれるように整形する必要があります。コンテキストを除外すると、データセット内のサンプルに同じ質問が含まれていても、モデルはパターンを認識しません。
チューニング用データセットを Cloud Storage にアップロードする
チューニング ジョブを実行するには、1 つ以上のデータセットを Cloud Storage バケットにアップロードする必要があります。新しい Cloud Storage バケットを作成するか、既存のバケットを使用してデータセット ファイルを保存できます。バケットのリージョンは重要ではありませんが、モデルをチューニングする Google Cloud プロジェクトのバケットを使用することをおすすめします。
バケットの準備ができたら、データセット ファイルをバケットにアップロードします。
教師ありチューニング リージョンの設定
教師ありチューニング ジョブを構成するときに、3 つの Google Cloud リージョン設定を指定できます。1 つのリージョンは、モデルをチューニングするパイプラインが実行される場所です。もう 1 つのリージョンは、モデル チューニング ジョブが実行され、チューニングされたモデルがアップロードされる場所です。
パイプライン ジョブ リージョン
パイプライン ジョブ リージョンは、パイプライン ジョブが実行されるリージョンです。オプションのモデル アップロード リージョンが指定されていない場合、モデルはパイプライン ジョブ リージョンにアップロード、デプロイされます。変換済みデータセットなどの中間データは、パイプライン ジョブ リージョンに保存されます。パイプライン ジョブ リージョンに使用できるリージョンについては、サポートされているパイプライン ジョブとモデル アップロード リージョンをご覧ください。パイプライン ジョブ リージョンは、次のいずれかの方法で指定する必要があります。
Vertex AI SDK を使用する場合は、チューニングするモデルを表すオブジェクトの
tune_model
メソッド(TextGenerationModel.tune_model
メソッドなど)でtuning_job_location
パラメータを使用して、パイプライン ジョブを実行するリージョンを指定できます。pipelineJobs.create
メソッドで POST リクエストを送信して教師ありチューニング ジョブを作成する場合は、URL を使用してパイプライン ジョブが実行されるリージョンを指定します。次の URL で、PIPELINE_JOB_REGION
の両方のインスタンスをパイプラインが実行されるリージョンに置き換えます。https://PIPELINE_JOB_REGION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/PIPELINE_JOB_REGION/pipelineJobs
Google Cloud コンソールを使用して教師ありモデルのチューニング ジョブを作成する場合は、チューニング ジョブを作成する際に [リージョン] コントロールでパイプライン ジョブ リージョンを指定します。Google Cloud コンソールでは、[リージョン] コントロールでパイプライン ジョブ リージョンとモデル アップロード リージョンの両方を指定します。Google Cloud コンソールを使用して教師ありモデルのチューニング ジョブを作成する場合、両方のリージョンが常に同じです。
モデル アップロード リージョン
オプションの tuned_model_location
パラメータを使用して、チューニングされたモデルのアップロード先を指定します。モデル アップロード リージョンが指定されていない場合、チューニングされたモデルは、パイプライン ジョブ リージョンにアップロードされます。モデル アップロード リージョンの場合は、サポートされているパイプライン ジョブ リージョンとモデル アップロード リージョンのいずれかを使用できます。モデル アップロード リージョンは、次のいずれかの方法で指定できます。
Vertex AI SDK を使用する場合は、
tuned_model_location
パラメータは、チューニングしているモデルを表すオブジェクトのtune_model
メソッド(例:TextGenerationModel.tune_model
メソッド)で指定されます。pipelineJobs
メソッドで POST リクエストを送信して教師ありモデルのチューニング ジョブを作成する場合は、location
パラメータを使用してモデル アップロード リージョンを指定します。Google Cloud コンソールで教師ありモデルのチューニング ジョブを作成する場合は、チューニング ジョブを作成するときに [リージョン] コントロールでモデル アップロード リージョンを指定します。Google Cloud コンソールでは、[リージョン] コントロールでモデル アップロード リージョンとパイプライン ジョブ リージョンの両方を指定します。Google Cloud コンソールを使用して教師ありモデルのチューニング ジョブを作成する場合、両方のリージョンが常に同じです。
モデル チューニング リージョン
モデル チューニング リージョンは、モデル チューニングの計算が行われる場所です。このリージョンは、選択したアクセラレータ タイプによって決まります。アクセラレータ タイプに TPU
を指定すると、モデル チューニングの計算は europe-west4
で行われます。アクセラレータ タイプに GPU
を指定すると、モデル チューニングは us-central1
で行われます。
サポートされているパイプライン ジョブ リージョンとモデル アップロード リージョン
次のいずれかのリージョンを使用して、モデル アップロード リージョンとパイプライン ジョブ リージョンを指定できます。
us-central1
europe-west4
asia-southeast1
us-west1
europe-west3
europe-west2
asia-northeast1
us-east4
us-west4
northamerica-northeast1
europe-west9
europe-west1
asia-northeast3
テキストモデルの教師ありチューニング ジョブを作成する
テキストモデルの教師ありチューニング ジョブは、Google Cloud コンソール、API、または Vertex AI SDK for Python を使用して作成できます。モデルのチューニング構成のガイダンスについては、推奨構成をご覧ください。
REST
モデルのチューニング ジョブを作成するには、pipelineJobs
メソッドを使用して POST リクエストを送信します。一部のパラメータは、すべてのモデルでサポートされているわけではないことに注意してください。チューニングするモデルに適用可能なパラメータのみを含めるようにしてください。
リクエストのデータを使用する前に、次のように置き換えます。
- PIPELINEJOB_DISPLAYNAME: pipelineJob の表示名。
- OUTPUT_DIR: パイプライン アーティファクトの出力先となるバケットの URI。
- PROJECT_ID: 実際のプロジェクト ID。
- MODEL_DISPLAYNAME: pipelineJob によってアップロード(作成)されるモデルの表示名。
- DATASET_URI: データセット ファイルの URI。
- PIPELINE_JOB_REGION: パイプライン チューニング ジョブを実行するリージョン。これは、チューニング済みのモデルをアップロードするデフォルトのリージョンでもあります。モデルを別のリージョンにアップロードする場合は、
location
パラメータを使用して、チューニング済みのモデルをアップロードするリージョンを指定します。詳細については、モデル アップロードのリージョンをご覧ください。 - MODEL_UPLOAD_REGION: (省略可)チューニング済みモデルがアップロードされるリージョン。モデルのアップロード リージョンを指定しない場合、チューニング済みのモデルは、パイプライン ジョブが実行されるリージョンにアップロードされます。詳細については、モデル アップロードのリージョンをご覧ください。
- ACCELERATOR_TYPE: (省略可、デフォルト
GPU
)モデルのチューニングに使用するアクセラレータのタイプ。有効なオプションは次のとおりです。GPU
: チューニングに 8 個の A100 80 GB GPU を使用します。割り当てが十分にあることを確認してください。GPU
を選択した場合、VPC‐SC がサポートされます。CMEK は、チューニングの場所とモデルのアップロード場所がus-centra1
の場合にサポートされます。詳しくは、管理対象のチューニング リージョンの設定をご覧ください。GPU
を選択すると、モデル チューニングの計算はus-central1
リージョンで行われます。TPU
: チューニングに TPU v3 Pod の 64 コアを使用します。割り当てが十分にあることを確認してください。CMEK はサポートされていませんが、VPC‐SC はサポートされています。TPU
を選択すると、モデル チューニングの計算はeurope-west4
リージョンで行われます。
- LARGE_MODEL_REFERENCE: チューニングする基盤モデルの名前。次のオプションがあります。
text-bison@002
chat-bison@002
- DEFAULT_CONTEXT (chat only): チューニング データセット内のすべてのチューニング サンプルに適用されるコンテキスト。サンプルで
context
フィールドを設定すると、デフォルトのコンテキストがオーバーライドされます。 - STEPS: モデルのチューニングで実行するステップ数。デフォルト値は 300 です。バッチサイズは、チューニングを行うロケーションとモデルサイズによって異なります。8k モデル(
text-bison@002
、chat-bison@002
、code-bison@002
、codechat-bison@002
など)の場合:us-central1
のバッチサイズは 8 です。europe-west4
のバッチサイズは 24 です。
text-bison-32k
、chat-bison-32k
、code-bison-32k
、codechat-bison-32k
など)の場合:us-central1
のバッチサイズは 8 です。europe-west4
のバッチサイズは 8 です。
たとえば、
europe-west4
でtext-bison@002
をトレーニングする場合、トレーニング データセットに 240 のサンプルがあり、steps
を 20 に設定すると、トレーニングのサンプル数は、20 ステップとバッチサイズ 24 の積、つまり 480 トレーニング ステップになります。この場合、サンプルを 2 回実行するため、トレーニング プロセスにはエポックが 2 つあります。us-central1
では、トレーニング データセットに 240 のサンプルがあり、steps
を 15 に設定した場合、トレーニング サンプル数は 15 ステップとバッチサイズ 8 の積、つまり 120 トレーニング ステップになります。この場合、トレーニング ステップ数がサンプルの半分であるため、エポックが 0.5 個になります。 - LEARNING_RATE_MULTIPLIER: 推奨学習率に適用する乗数。推奨学習率を使用するには、
1.0
を使用します。 - EVAL_DATASET_URI (text only): (省略可)バッチ予測と評価用の評価データセットを含む JSONL ファイルの URI。
chat-bison
では、評価はサポートされていません。詳細については、コードモデルをチューニングするためのデータセット形式をご覧ください。評価データセットには 10~250 個のサンプルが必要です。 - EVAL_INTERVAL (text only): (省略可、デフォルト
20
)各評価間のチューニング ステップの数。評価間隔はチャットモデルではサポートされていません。評価は評価データセット全体で実行されるため、評価間隔が短いほどチューニング時間が長くなります。たとえば、steps
が 200 でEVAL_INTERVAL
が 100 の場合、評価指標のデータポイントは 2 つのみになります。このパラメータを使用するには、evaluation_data_uri
を設定する必要があります。 - ENABLE_EARLY_STOPPING (text only): (省略可、デフォルトは
true
)boolean
。true
に設定すると、評価の実行でモデルのパフォーマンス(予測されたトークンの正確性)に十分な改善が見られなかった場合、すべてのチューニング ステップが完了する前にチューニングが停止します。false
の場合、すべてのチューニング ステップが完了するまでチューニングが続行されます。このパラメータを使用するには、evaluation_data_uri
を設定する必要があります。早期停止の有効化は、チャットモデルではサポートされていません。 - TENSORBOARD_RESOURCE_ID:(省略可)Vertex AI TensorBoard インスタンスの ID。Vertex AI TensorBoard インスタンスは、チューニング ジョブの完了後にテストを作成するために使用されます。Vertex AI TensorBoard インスタンスは、チューニング パイプラインと同じリージョンに存在する必要があります。
- ENCRYPTION_KEY_NAME:(省略可)データの暗号化に使用する顧客管理の暗号鍵(CMEK)の完全修飾名。CMEK は
us-central1
でのみ使用できます。us-central1
を使用して CMEK を指定しない場合は、Google が所有して管理する鍵が使用されます。その他のすべての利用可能なリージョンでは、Google が所有して管理する鍵がデフォルトで使用されます。詳細については、CMEK の概要をご覧ください。 - TEMPLATE_URI: 使用するチューニング テンプレートは、チューニングするモデルによって異なります。
- テキストモデル:
https://us-kfp.pkg.dev/ml-pipeline/large-language-model-pipelines/tune-large-model/v2.0.0
- チャットモデル:
https://us-kfp.pkg.dev/ml-pipeline/large-language-model-pipelines/tune-large-chat-model/v3.0.0
- テキストモデル:
- SERVICE_ACCOUNT: (省略可)Vertex AI がパイプライン ジョブの実行に使用するサービス アカウント。デフォルトでは、プロジェクトの Compute Engine のデフォルト サービス アカウント(
PROJECT_NUMBER‑compute@developer.gserviceaccount.com
)が使用されます。詳細については、カスタム サービス アカウントの接続をご覧ください。
HTTP メソッドと URL:
POST https://PIPELINE_JOB_REGION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/PIPELINE_JOB_REGION/pipelineJobs
リクエストの本文(JSON):
{ "displayName": "PIPELINEJOB_DISPLAYNAME", "runtimeConfig": { "gcsOutputDirectory": "gs://OUTPUT_DIR", "parameterValues": { "project": "PROJECT_ID", "model_display_name": "MODEL_DISPLAYNAME", "dataset_uri": "gs://DATASET_URI", "location": "MODEL_UPLOAD_REGION", "accelerator_type": "ACCELERATOR_TYPE", "large_model_reference": "LARGE_MODEL_REFERENCE", "default_context": "DEFAULT_CONTEXT (chat only)", "train_steps": STEPS, "learning_rate_multiplier": LEARNING_RATE_MULTIPLIER, "evaluation_data_uri": "gs://EVAL_DATASET_URI (text only)", "evaluation_interval": EVAL_INTERVAL (text only), "enable_early_stopping": ENABLE_EARLY_STOPPING (text only), "enable_checkpoint_selection": "ENABLE_CHECKPOINT_SELECTION (text only)", "tensorboard_resource_id": "TENSORBOARD_ID", "encryption_spec_key_name": "ENCRYPTION_KEY_NAME" } }, "encryptionSpec": { "kmsKeyName": "ENCRYPTION_KEY_NAME" }, "serviceAccount": "SERVICE_ACCOUNT", "templateUri": "TEMPLATE_URI" }
リクエストを送信するには、次のいずれかのオプションを選択します。
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://PIPELINE_JOB_REGION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/PIPELINE_JOB_REGION/pipelineJobs"
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://PIPELINE_JOB_REGION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/PIPELINE_JOB_REGION/pipelineJobs" | Select-Object -Expand Content
次のような JSON レスポンスが返されます。容量を節約するために、pipelineSpec
は切り捨てられています。
Python
Vertex AI SDK for Python のインストールまたは更新の方法については、Vertex AI SDK for Python をインストールするをご覧ください。 詳細については、Python API リファレンス ドキュメントをご覧ください。
Node.js
このサンプルを試す前に、Vertex AI クイックスタート: クライアント ライブラリの使用にある Node.js の設定手順を完了してください。詳細については、Vertex AI Node.js API のリファレンス ドキュメントをご覧ください。
Vertex AI に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。
Java
このサンプルを試す前に、Vertex AI クイックスタート: クライアント ライブラリの使用にある Java の設定手順を完了してください。詳細については、Vertex AI Java API のリファレンス ドキュメントをご覧ください。
Vertex AI に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。
コンソール
Google Cloud コンソールを使用し、教師ありチューニングでテキストモデルをチューニングするには、次のステップを実行します。
- Google Cloud コンソールの [Vertex AI] セクションで、[Vertex AI Studio] ページに移動します。
- [チューニングと抽出] タブをクリックします。
- [ チューニング済みモデルを作成] をクリックします。
- [教師ありチューニング] をクリックします。
- モデルの詳細を構成します。
- チューニング済みモデル名: チューニングされたモデルの名前を入力します。
- ベースモデル: チューニングするモデルを選択します。
- リージョン: パイプライン チューニング ジョブが実行されるリージョンとチューニングされたモデルがデプロイされるリージョンを選択します。
- 出力ディレクトリ: モデルのチューニング時にアーティファクトが保存される Cloud Storage のロケーションを入力します。
- [詳細オプション] を開いて、詳細設定を構成します。
- トレーニングのステップ: モデルのチューニングのために実行するステップ数を入力します。デフォルト値は 300 です。バッチサイズは、チューニングを行うロケーションとモデルサイズによって異なります。8k モデル(
text-bison@002
、chat-bison@002
、code-bison@002
、codechat-bison@002
など)の場合:us-central1
のバッチサイズは 8 です。europe-west4
のバッチサイズは 24 です。
text-bison-32k
、chat-bison-32k
、code-bison-32k
、codechat-bison-32k
など)の場合:us-central1
のバッチサイズは 8 です。europe-west4
のバッチサイズは 8 です。
たとえば、
europe-west4
でtext-bison@002
をトレーニングする場合、トレーニング データセットに 240 のサンプルがあり、steps
を 20 に設定すると、トレーニングのサンプル数は、20 ステップとバッチサイズ 24 の積、つまり 480 トレーニング ステップになります。この場合、サンプルを 2 回実行するため、トレーニング プロセスにはエポックが 2 つあります。us-central1
では、トレーニング データセットに 240 のサンプルがあり、steps
を 15 に設定した場合、トレーニング サンプル数は 15 ステップとバッチサイズ 8 の積、つまり 120 トレーニング ステップになります。この場合、トレーニング ステップ数がサンプルの半分であるため、エポックが 0.5 個になります。 - 学習率の乗数: 各イテレーションのステップサイズを入力します。デフォルト値は 1 です。
- アクセラレータ タイプ: (省略可)モデルのチューニングに使用するアクセラレータのタイプを入力します。有効なオプションは次のとおりです。
GPU
: チューニングに 8 個の A100 80 GB GPU を使用します。割り当てが十分にあることを確認してください。GPU
を選択した場合、VPC‐SC がサポートされます。CMEK は、チューニングの場所とモデルのアップロード場所がus-centra1
の場合にサポートされます。詳しくは、管理対象のチューニング リージョンの設定をご覧ください。GPU
を選択すると、モデル チューニングの計算はus-central1
リージョンで行われます。TPU
: チューニングに TPU v3 Pod の 64 コアを使用します。割り当てが十分にあることを確認してください。CMEK はサポートされていませんが、VPC‐SC はサポートされています。TPU
を選択すると、モデル チューニングの計算はeurope-west4
リージョンで行われます。
- TensorBoard インスタンスを追加する: (省略可)Vertex AI TensorBoard インスタンスの ID。Vertex AI TensorBoard インスタンスは、チューニング ジョブの完了後にテストを作成するために使用されます。Vertex AI TensorBoard インスタンスは、チューニング パイプラインと同じリージョンに存在する必要があります。
- 暗号化: (省略可)Google が所有して管理する鍵または顧客管理の暗号鍵(CMEK)のいずれかを選択します。CMEK は
us-central1
リージョンでのみ暗号化に利用できます。他のすべての使用可能なリージョンでは、Google が所有して管理する鍵が使用されます。詳細については、CMEK の概要をご覧ください。 - サービス アカウント: (省略可)ユーザー管理のサービス アカウントを選択します。サービスコードがアクセスできる Google Cloud リソースはサービス アカウントにより決定されます。サービス アカウントを選択しない場合は、ほとんどのモデルに適した権限を含むサービス エージェントが使用されます。
- トレーニングのステップ: モデルのチューニングのために実行するステップ数を入力します。デフォルト値は 300 です。バッチサイズは、チューニングを行うロケーションとモデルサイズによって異なります。8k モデル(
- [続行] をクリックする
- データセット ファイルをアップロードする場合は、[
JSONL ファイルをアップロードする
- [JSONL ファイルの選択] で [参照] をクリックし、データセット ファイルを選択します。
- [データセットの場所] で [参照] をクリックし、データセット ファイルを保存する Cloud Storage バケットを選択します。
既存の JSONL ファイルを使用する
[Cloud Storage のファイルパス] で [参照] をクリックし、データセット ファイルがある Cloud Storage バケットを選択します。
JSONL ファイルを Cloud Storage にアップロードする] を選択します。データセット ファイルがすでに Cloud Storage バケットにある場合、[ Cloud Storage 上の既存の JSONL ファイル] を選択します。 - (省略可)チューニング済みモデルを評価するには、[モデル評価を有効にする] を選択して、モデル評価を構成します。
- 評価データセット: (省略可)バッチ予測と評価用の評価データセットを含む JSONL ファイルの URI。
chat-bison
では、評価はサポートされていません。詳細については、コードモデルをチューニングするためのデータセット形式をご覧ください。評価データセットには 10~250 個のサンプルが必要です。 - 評価間隔: (省略可、デフォルトは
20
)各評価間のチューニング ステップの数。評価間隔はチャットモデルではサポートされていません。評価は評価データセット全体で実行されるため、評価間隔が短いほどチューニング時間が長くなります。たとえば、steps
が 200 でEVAL_INTERVAL
が 100 の場合、評価指標のデータポイントは 2 つのみになります。このパラメータを使用するには、evaluation_data_uri
を設定する必要があります。 - 早期停止を有効にする: (省略可、デフォルトは
true
)boolean
で、true
に設定すると、評価の実行間でモデルのパフォーマンス(予測されるトークンの正確性により測定されます)に十分な改善が見られなかった場合、すべてのチューニング ステップが完了する前にチューニングを停止します。false
の場合、すべてのチューニング ステップが完了するまでチューニングが続行されます。このパラメータを使用するには、evaluation_data_uri
を設定する必要があります。早期停止の有効化は、チャットモデルではサポートされていません。 - チェックポイントの選択を有効にする: 有効にすると、Vertex AI はチューニング ジョブ中に作成されたすべてのチェックポイントから、最適なモデル評価パフォーマンスを持つチェックポイントを選択して返します。無効にすると、チューニング ジョブ中に作成された最後のチェックポイントが返されます。各チェックポイントは、チューニング ジョブ中のモデルのスナップショットを参照します。
- TensorBoard インスタンス: (省略可)Vertex AI TensorBoard インスタンスの ID。Vertex AI TensorBoard インスタンスは、チューニング ジョブの完了後にテストを作成するために使用されます。Vertex AI TensorBoard インスタンスは、チューニング パイプラインと同じリージョンに存在する必要があります。
- 評価データセット: (省略可)バッチ予測と評価用の評価データセットを含む JSONL ファイルの URI。
- [チューニングを開始] をクリックします。
curl コマンドの例
PROJECT_ID=myproject
DATASET_URI=gs://my-gcs-bucket-uri/dataset
OUTPUT_DIR=gs://my-gcs-bucket-uri/output
ACCELERATOR_TYPE=GPU
LOCATION=us-central1
curl \
-X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
"https://europe-west4-aiplatform.googleapis.com/v1/projects/${PROJECT_ID}/locations/europe-west4/pipelineJobs?pipelineJobId=tune-large-model-$(date +%Y%m%d%H%M%S)" -d \
$'{
"displayName": "tune-llm",
"runtimeConfig": {
"gcsOutputDirectory": "'${OUTPUT_DIR}'",
"parameterValues": {
"project": "'${PROJECT_ID}'",
"model_display_name": "The display name for your model in the UI",
"dataset_uri": "'${DATASET_URI}'",
"location": "'${LOCATION}'",
"accelerator_type:": "'${ACCELERATOR_TYPE}'",
"large_model_reference": "text-bison@002",
"train_steps": 300,
"learning_rate_multiplier": 1,
"encryption_spec_key_name": "projects/myproject/locations/us-central1/keyRings/sample-key/cryptoKeys/sample-key"
}
},
"encryptionSpec": {
"kmsKeyName": "projects/myproject/locations/us-central1/keyRings/sample-key/cryptoKeys/sample-key"
},
"templateUri": "https://us-kfp.pkg.dev/ml-pipeline/large-language-model-pipelines/tune-large-model/v2.0.0"
}'
推奨構成
タスクごとに基盤モデルをチューニングするための推奨構成を、次の表に示します。
タスク | データセットのサンプル数 | ステップをトレーニング |
---|---|---|
分類 | 100 以上 | 100~500 |
要約 | 100~500 以上 | 200~1,000 |
抽出型の QA | 100 以上 | 100~500 |
チャット | 200 以上 | 1,000 |
トレーニングのステップでは、特定のデータセットに対して最高のパフォーマンスを得るために、複数の値(100、200、500 など)を試すことができます。
チューニング済みモデルのリストを表示する
現在のプロジェクトに含まれるモデルのリスト(チューニング済みモデルを含む)を表示するには、Google Cloud コンソールまたは Vertex AI SDK for Python を使用します。
Python
このサンプルを試す前に、Vertex AI クイックスタート: クライアント ライブラリの使用にある Python の設定手順を完了してください。詳細については、Vertex AI Python API のリファレンス ドキュメントをご覧ください。
Vertex AI に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。
コンソール
チューニング済みモデルを Google Cloud コンソールで表示するには、[Vertex AI Model Registry] ページに移動します。
チューニング済みテキストモデルを読み込む
次のサンプルコードでは、Vertex AI SDK for Python を使用して、教師ありチューニングでチューニングされたテキスト生成モデルを読み込みます。
import vertexai from vertexai.preview.language_models import TextGenerationModel model = TextGenerationModel.get_tuned_model(TUNED_MODEL_NAME)
TUNED_MODEL_NAME
は、チューニング済みモデルの修飾リソース名に置き換えます。この名前は、projects/PROJECT_ID/locations/LOCATION/models/MODEL_ID
の形式です。チューニング済みモデルのモデル ID は、Vertex AI Model Registry で確認できます。
チューニングと評価の指標
モデルのチューニングとモデルの評価の指標を収集して報告するよう、モデルのチューニング ジョブを構成できます。その後で、Vertex AI TensorBoard を使用してこれらの指標を可視化できます。
モデル チューニングの指標
モデルのチューニング ジョブを構成して、chat-bison
、code-bison
、codechat-bison
、text-bison
のチューニング指標を収集できます。
/train_total_loss
: トレーニング ステップでのチューニング データセットの損失。/train_fraction_of_correct_next_step_preds
: トレーニング ステップでのトークンの精度。1 回の予測は一連のトークンで構成されます。この指標は、チューニング用データセットのグラウンド トゥルースと比較したときに予測される、トークンの精度を測定します。/train_num_predictions:
トレーニング ステップで予測されるトークンの数。
モデル評価の指標
モデルのチューニング ジョブを構成して、code-bison
と text-bison
について次の評価指標を収集できます。
/eval_total_loss
: 評価ステップでの評価データセットの損失。/eval_fraction_of_correct_next_step_preds
: 評価ステップでのトークンの精度。1 回の予測は一連のトークンで構成されます。この指標は、評価データセットのグラウンド トゥルースと比較したときに予測される、トークンの精度を測定します。/eval_num_predictions
: 評価ステップで予測されるトークンの数。
指標の可視化は、モデルのチューニング ジョブの完了後に利用できます。チューニング ジョブの作成時に Vertex AI TensorBoard のインスタンス ID のみを指定し、評価データセットを指定しなかった場合、チューニング指標の可視化のみを使用できます。
トラブルシューティング
以下のトピックは、教師ありチューニングを使用した基盤テキストモデルのチューニングに関する問題の解決に役立ちます。
モデルをチューニングしようとすると、500 エラーまたは Internal error encountered
が返される
モデルをチューニングしようとしたときにこの 500 エラーが発生した場合は、次の回避策を試してください。
次の cURL コマンドを実行して、空の Vertex AI データセットを作成します。コマンドの中でプロジェクト ID を構成していることを確認してください。
curl \
-X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
https://europe-west4-aiplatform.googleapis.com/ui/projects/$PROJECT_ID/locations/europe-west4/datasets \
-d '{
"display_name": "test-name1",
"metadata_schema_uri": "gs://google-cloud-aiplatform/schema/dataset/metadata/image_1.0.0.yaml",
"saved_queries": [{"display_name": "saved_query_name", "problem_type": "IMAGE_CLASSIFICATION_MULTI_LABEL"}]
}'
コマンドが完了したら、5 分待ってから再度モデルのチューニングを試みます。
Error: Permission 'aiplatform.metadataStores.get' denied on resource '...europe-west4/metadataStores/default'.
Compute Engine API が有効で、デフォルトの Compute Engine サービス アカウント(PROJECT_NUM‑compute@developer.gserviceaccount.com
)に aiplatform.admin
ロールと storage.objectAdmin
ロールが付与されていることを確認します。
aiplatform.admin
ロールと storage.objectAdmin
ロールを Compute Engine サービス アカウントに付与するには、次のコマンドを実行します。
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
マシンのターミナルを使用する場合は、Google Cloud CLI をインストールして構成します。
gcloud projects add-iam-policy-binding
コマンドを使用して、aiplatform.admin
ロールを Compute Engine サービス アカウントに追加します。次のように置き換えます。
PROJECT_ID
は、Google Cloud プロジェクト ID に置き換えます。PROJECT_NUM
は、Google Cloud プロジェクト番号に置き換えます。
gcloud projects add-iam-policy-binding PROJECT_ID --member serviceAccount:PROJECT_NUM-compute@developer.gserviceaccount.com --role roles/aiplatform.admin
gcloud projects add-iam-policy-binding
コマンドを使用して、storage.objectAdmin
ロールを Compute Engine サービス アカウントに追加します。PROJECT_ID
は、Google Cloud プロジェクト ID に置き換えます。PROJECT_NUM
は、Google Cloud プロジェクト番号に置き換えます。
gcloud projects add-iam-policy-binding PROJECT_ID --member serviceAccount:PROJECT_NUM-compute@developer.gserviceaccount.com --role roles/storage.objectAdmin
Error: Vertex AI Service Agent service-{project-number}@gcp-sa-aiplatform.iam.gserviceaccount.com does not have permission to access Artifact Registry repository projects/vertex-ai-restricted/locations/us/repositories/llm.
この権限エラーは、伝播の遅延が原因です。再試行すると、このエラーは解決するはずです。
次のステップ
- チューニング済みモデルを評価する方法を学ぶ。
- RLHF チューニングを使用して基盤モデルをチューニングする方法を学ぶ。
- コードモデルをチューニングする方法を学ぶ。