コンピューティング ベースの評価パイプラインを実行する

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_textoutput_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 データ閲覧者 パイプラインを実行するプロジェクト
RESTPythonコンソール

モデル評価ジョブを作成するには、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"
}

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

curlPowerShell

リクエスト本文を 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 リファレンス ドキュメントをご覧ください。

import os

from google.auth import default

import vertexai
from vertexai.preview.language_models import (
    EvaluationTextClassificationSpec,
    TextGenerationModel,
)

PROJECT_ID = os.getenv("GOOGLE_CLOUD_PROJECT")


def evaluate_model() -> object:
    """Evaluate the performance of a generative AI model."""

    # Set credentials for the pipeline components used in the evaluation task
    credentials, _ = default(scopes=["https://www.googleapis.com/auth/cloud-platform"])

    vertexai.init(project=PROJECT_ID, location="us-central1", credentials=credentials)

    # Create a reference to a generative AI model
    model = TextGenerationModel.from_pretrained("text-bison@002")

    # Define the evaluation specification for a text classification task
    task_spec = EvaluationTextClassificationSpec(
        ground_truth_data=[
            "gs://cloud-samples-data/ai-platform/generative_ai/llm_classification_bp_input_prompts_with_ground_truth.jsonl"
        ],
        class_names=["nature", "news", "sports", "health", "startups"],
        target_column_name="ground_truth",
    )

    # Evaluate the model
    eval_metrics = model.evaluate(task_spec=task_spec)
    print(eval_metrics)
    # Example response:
    # ...
    # PipelineJob run completed.
    # Resource name: projects/123456789/locations/us-central1/pipelineJobs/evaluation-llm-classification-...
    # EvaluationClassificationMetric(label_name=None, auPrc=0.53833705, auRoc=0.8...

    return eval_metrics

Google Cloud コンソールでモデル評価ジョブを作成するには、次の操作を行います。

  1. Google Cloud コンソールで、Vertex AI の [Vertex AI Model Registry] ページに移動します。

    Vertex AI Model Registry に移動

  2. 評価するモデルの名前をクリックします。
  3. [評価] タブで [評価を作成] をクリックし、次のように構成します。
    • 目標: 評価するタスクを選択します。
    • ターゲット列またはターゲット フィールド:(分類のみ)予測のターゲット列を入力します。例: ground_truth
    • 転送元のパス: 評価データセットの URI を入力または選択します。
    • 出力形式: 評価出力の形式を入力します。現在、jsonl だけがサポートされています。
    • Cloud Storage パス: 評価出力を保存する URI を入力または選択します。
    • クラス名:(分類のみ)利用可能なクラス名のリストを入力します。
    • コンピューティング ノードの数: 評価ジョブを実行するコンピューティング ノードの数を入力します。
    • マシンタイプ: 評価ジョブの実行に使用するマシンタイプを選択します。
  4. [評価を開始] をクリックします。

評価の結果を表示する

評価結果は、評価ジョブの作成時に指定した Cloud Storage 出力ディレクトリにあります。ファイル名は evaluation_metrics.json です。

チューニングされたモデルについては、Google Cloud コンソールで評価結果を確認することもできます。

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

    Vertex AI Model Registry に移動

  2. モデルの名前をクリックすると、評価指標が表示されます。

  3. [評価] タブで、表示する評価実行の名前をクリックします。

次のステップ