Vertex AI では、基盤モデルとチューニング済みの生成 AI モデルのパフォーマンスを評価できます。モデルは、提供した評価データセットに対する一連の指標を使用して評価されます。このページでは、評価パイプライン サービスによるコンピューティング ベースのモデル評価の仕組み、評価データセットの作成とフォーマット、Google Cloud コンソール、Vertex AI API、Vertex AI SDK for Python を使用して評価を行う方法について説明します。
コンピューティング ベースのモデル評価の仕組み
モデルのパフォーマンスを評価するには、まずプロンプトと正解のペアを含む評価データセットを作成します。各ペアにおいて、プロンプトは評価対象となる入力であり、正解はそのプロンプトに対する理想的なレスポンスです。評価時に、評価データセットの各ペアのプロンプトがモデルに渡され、出力が生成されます。モデルによって生成された出力と評価データセットの正解を使用して、評価指標が計算されます。
評価に使用される指標の種類は、評価するタスクによって異なります。次の表に、サポートされているタスクと、各タスクの評価に使用する指標を示します。
タスク | 指標 |
---|---|
分類 | Micro-F1、Macro-F1、クラスごとの F1 |
要約 | ROUGE-L |
質問応答 | 完全一致 |
テキスト生成 | BLEU、ROUGE-L |
サポートされているモデル
モデル評価は、次のモデルでサポートされています。
text-bison
: ベース バージョンと調整済みバージョン。Gemini: 分類を除くすべてのタスク。
評価データセットを準備する
モデル評価に使用される評価データセットには、評価対象となるタスクに対応するプロンプトと正解のペアが含まれます。データセットは少なくとも 1 つのプロンプトと正解のペアを含む必要があります。また、有益な指標を得るには、少なくとも 10 個のペアを含む必要があります。渡すサンプルが多いほど、意味のある結果が得られます。
データセットのフォーマット
評価データセットは、JSON Lines (JSONL)形式で用意します。この形式では、それぞれ input_text
と output_text
フィールドで指定した単一のプロンプトと正解のペアが各行に格納されます。input_text
フィールドには評価対象となるプロンプトが格納され、output_text
フィールドにはプロンプトに対する理想的なレスポンスが格納されます。
input_text
の最大トークン長は 8,192 で、output_text
の最大トークン長は 1,024 です。
評価データセットを Cloud Storage にアップロードする
新しい Cloud Storage バケットを作成するか、既存のバケットを使用してデータセット ファイルを保存できます。バケットは、モデルと同じリージョンに配置されている必要があります。
バケットの準備ができたら、データセット ファイルをバケットにアップロードします。
モデル評価を行う
モデルは、REST API または Google Cloud コンソールを使用して評価できます。
このタスクに必要な権限
このタスクを実行するには、次の各サービス アカウントに Identity and Access Management(IAM)ロールを付与する必要があります。
サービス アカウント | デフォルトのプリンシパル | 説明 | ロール |
---|---|---|---|
Vertex AI サービス エージェント | service-PROJECT_NUMBER@gcp-sa-aiplatform.iam.gserviceaccount.com |
Vertex AI サービス エージェントがプロジェクトに自動的にプロビジョニングされ、事前定義ロールが付与されます。ただし、組織のポリシーで Vertex AI Service エージェントのデフォルトの権限が変更されている場合は、サービス エージェントにロールを手動で付与する必要があります。 | Vertex AI サービス エージェント(roles/aiplatform.serviceAgent ) |
Vertex AI Pipelines サービス アカウント | PROJECT_NUMBER-compute@developer.gserviceaccount.com |
パイプラインを実行するサービス アカウント使用されるデフォルトのサービス アカウントは、Compute Engine のデフォルトのサービス アカウントです。必要に応じて、デフォルトのサービス アカウントの代わりにカスタム サービス アカウントを使用できます。 |
入力データソースと出力データソースによっては、Vertex AI Pipelines サービス アカウントに次のロールを付与する必要もあります。
データソース | ロール | ロールを付与する場所 |
---|---|---|
標準の BigQuery テーブル | BigQuery データ編集者 | パイプラインを実行するプロジェクト |
BigQuery データ閲覧者 | テーブルが属するプロジェクト | |
標準の BigQuery テーブルの BigQuery ビュー | BigQuery データ編集者 | パイプラインを実行するプロジェクト |
BigQuery データ閲覧者 | ビューが属するプロジェクト | |
BigQuery データ閲覧者 | テーブルが属するプロジェクト | |
ソースの Cloud Storage ファイルを含む BigQuery 外部テーブル | BigQuery データ編集者 | パイプラインを実行するプロジェクト |
BigQuery データ閲覧者 | 外部テーブルが属するプロジェクト | |
Storage オブジェクト閲覧者 | ソースファイルが属するプロジェクト | |
ソースの Cloud Storage ファイルを含む BigQuery 外部テーブルの BigQuery ビュー | BigQuery データ編集者 | パイプラインを実行するプロジェクト |
BigQuery データ閲覧者 | ビューが属するプロジェクト | |
BigQuery データ閲覧者 | 外部テーブルが属するプロジェクト | |
Storage オブジェクト閲覧者 | ソースファイルが属するプロジェクト | |
Cloud Storage ファイル | BigQuery データ閲覧者 | パイプラインを実行するプロジェクト |
モデル評価ジョブを作成するには、pipelineJobs メソッドを使用して POST
リクエストを送信します。
リクエストのデータを使用する前に、次のように置き換えます。
PROJECT_ID : パイプライン コンポーネントを実行する Google Cloud プロジェクト。PIPELINEJOB_DISPLAYNAME : pipelineJob の表示名。LOCATION : パイプライン コンポーネントを実行するリージョン。現在、us-central1
だけがサポートされています。DATASET_URI : 参照データセットの Cloud Storage URI。1 つまたは複数の URI を指定できます。このパラメータはワイルドカードをサポートしています。このパラメータの詳細については、InputConfig をご覧ください。OUTPUT_DIR : 評価出力を保存する Cloud Storage URI。MODEL_NAME : パブリッシャー モデルまたはチューニング済みモデルのリソースを次のように指定します。- パブリッシャーのモデル:
publishers/google/models/MODEL@MODEL_VERSION
例:
publishers/google/models/text-bison@002
- チューニング済みモデル:
projects/PROJECT_NUMBER/locations/LOCATION/models/ENDPOINT_ID
例:
projects/123456789012/locations/us-central1/models/1234567890123456789
評価ジョブは、モデルまたはそのリソースの既存デプロイに影響しません。
- パブリッシャーのモデル:
EVALUATION_TASK : モデルを評価するタスク。評価ジョブは、その特定のタスクに関連する一連の指標を計算します。指定できる値は次のとおりです。summarization
question-answering
text-generation
classification
INSTANCES_FORMAT : データセットの形式。現在、jsonl
だけがサポートされています。このパラメータの詳細については、InputConfig をご覧ください。PREDICTIONS_FORMAT : 評価出力の形式。現在、jsonl
だけがサポートされています。このパラメータの詳細については、InputConfig をご覧ください。MACHINE_TYPE :(省略可)評価ジョブの実行に使用するマシンタイプ。デフォルト値はe2-highmem-16
です。サポートされているマシンタイプの一覧については、マシンタイプをご覧ください。SERVICE_ACCOUNT :(省略可)評価ジョブの実行に使用するサービス アカウント。カスタム サービス アカウントを作成する方法については、詳細な権限を持つサービス アカウントを構成するをご覧ください。このパラメータを指定しない場合は、Vertex AI カスタムコード サービス エージェントが使用されます。NETWORK :(省略可)評価ジョブをピアリングする Compute Engine ネットワークの完全修飾名。ネットワーク名の形式はprojects/PROJECT_NUMBER/global/networks/NETWORK_NAME
です。このフィールドを指定する場合は、Vertex AI の VPC ネットワーク ピアリングが必要です。このパラメータを指定しない場合、評価ジョブはどのネットワークともピアリングされません。KEY_NAME :(省略可)顧客管理の暗号鍵(CMEK)の名前。構成した場合、評価ジョブによって作成されたリソースは、指定された暗号鍵で暗号化されます。鍵名の形式はprojects/PROJECT_ID/locations/REGION/keyRings/KEY_RING/cryptoKeys/KEY
です。鍵は、評価ジョブと同じリージョンに存在する必要があります。
HTTP メソッドと URL:
POST https://LOCATION -aiplatform.googleapis.com/v1/projects/PROJECT_ID /locations/LOCATION /pipelineJobs
リクエストの本文(JSON):
{ "displayName": "PIPELINEJOB_DISPLAYNAME ", "runtimeConfig": { "gcsOutputDirectory": "gs://OUTPUT_DIR ", "parameterValues": { "project": "PROJECT_ID ", "location": "LOCATION ", "batch_predict_gcs_source_uris": ["gs://DATASET_URI "], "batch_predict_gcs_destination_output_uri": "gs://OUTPUT_DIR ", "model_name": "MODEL_NAME ", "evaluation_task": "EVALUATION_TASK ", "batch_predict_instances_format": "INSTANCES_FORMAT ", "batch_predict_predictions_format: "PREDICTIONS_FORMAT ", "machine_type": "MACHINE_TYPE ", "service_account": "SERVICE_ACCOUNT ", "network": "NETWORK ", "encryption_spec_key_name": "KEY_NAME " } }, "templateUri": "https://us-kfp.pkg.dev/vertex-evaluation/pipeline-templates/evaluation-llm-text-generation-pipeline/1.0.1" }
リクエストを送信するには、次のいずれかのオプションを選択します。
リクエスト本文を 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://LOCATION -aiplatform.googleapis.com/v1/projects/PROJECT_ID /locations/LOCATION /pipelineJobs"
リクエスト本文を 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://LOCATION -aiplatform.googleapis.com/v1/projects/PROJECT_ID /locations/LOCATION /pipelineJobs" | Select-Object -Expand Content
次のような JSON レスポンスが返されます。容量を節約するために、pipelineSpec
は切り捨てられています。
レスポンス
...... ..... "state": "PIPELINE_STATE_PENDING", "labels": { "vertex-ai-pipelines-run-billing-id": "1234567890123456789" }, "runtimeConfig": { "gcsOutputDirectory": "gs://my-evaluation-bucket/output", "parameterValues": { "project": "my-project", "location": "us-central1", "batch_predict_gcs_source_uris": [ "gs://my-evaluation-bucket/reference-datasets/eval_data.jsonl" ], "batch_predict_gcs_destination_output_uri": "gs://my-evaluation-bucket/output", "model_name": "publishers/google/models/text-bison@002" } }, "serviceAccount": "123456789012-compute@developer.gserviceaccount.com", "templateUri": "https://us-kfp.pkg.dev/vertex-evaluation/pipeline-templates/evaluation-llm-text-generation-pipeline/1.0.1", "templateMetadata": { "version": "sha256:d4c0d665533f6b360eb474111aa5e00f000fb8eac298d367e831f3520b21cb1a" } }
curl コマンドの例
PROJECT_ID=myproject
REGION=us-central1
MODEL_NAME=publishers/google/models/text-bison@002
TEST_DATASET_URI=gs://my-gcs-bucket-uri/dataset.jsonl
OUTPUT_DIR=gs://my-gcs-bucket-uri/output
curl \
-X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
"https://${REGION}-aiplatform.googleapis.com/v1/projects/${PROJECT_ID}/locations/${REGION}/pipelineJobs" -d \
$'{
"displayName": "evaluation-llm-text-generation-pipeline",
"runtimeConfig": {
"gcsOutputDirectory": "'${OUTPUT_DIR}'",
"parameterValues": {
"project": "'${PROJECT_ID}'",
"location": "'${REGION}'",
"batch_predict_gcs_source_uris": ["'${TEST_DATASET_URI}'"],
"batch_predict_gcs_destination_output_uri": "'${OUTPUT_DIR}'",
"model_name": "'${MODEL_NAME}'",
}
},
"templateUri": "https://us-kfp.pkg.dev/vertex-evaluation/pipeline-templates/evaluation-llm-text-generation-pipeline/1.0.1"
}'
Vertex AI SDK for Python のインストールまたは更新の方法については、Vertex AI SDK for Python をインストールするをご覧ください。 詳細については、Python API リファレンス ドキュメントをご覧ください。
Google Cloud コンソールでモデル評価ジョブを作成するには、次の操作を行います。
- Google Cloud コンソールで、Vertex AI の [Vertex AI Model Registry] ページに移動します。
- 評価するモデルの名前をクリックします。
- [評価] タブで [評価を作成] をクリックし、次のように構成します。
- 目標: 評価するタスクを選択します。
- ターゲット列またはターゲット フィールド:(分類のみ)予測のターゲット列を入力します。例:
ground_truth
。 - 転送元のパス: 評価データセットの URI を入力または選択します。
- 出力形式: 評価出力の形式を入力します。現在、
jsonl
だけがサポートされています。 - Cloud Storage パス: 評価出力を保存する URI を入力または選択します。
- クラス名:(分類のみ)利用可能なクラス名のリストを入力します。
- コンピューティング ノードの数: 評価ジョブを実行するコンピューティング ノードの数を入力します。
- マシンタイプ: 評価ジョブの実行に使用するマシンタイプを選択します。
- [評価を開始] をクリックします。
評価の結果を表示する
評価結果は、評価ジョブの作成時に指定した Cloud Storage 出力ディレクトリにあります。ファイル名は evaluation_metrics.json
です。
チューニングされたモデルについては、Google Cloud コンソールで評価結果を確認することもできます。
Google Cloud コンソールの [Vertex AI] セクションで、[Vertex AI Model Registry] ページに移動します。
モデルの名前をクリックすると、評価指標が表示されます。
[評価] タブで、表示する評価実行の名前をクリックします。
次のステップ
- 生成 AI の評価について学習する。
- Gen AI Evaluation Service によるオンライン評価について学習する。
- 基盤モデルのチューニング方法を学習する。