コンピューティング ベースの評価を行う

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 の基本バージョンとチューニング済みバージョンでサポートされています。

評価データセットを準備する

モデル評価に使用される評価データセットには、評価対象となるタスクに対応するプロンプトと正解のペアが含まれます。データセットは少なくとも 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 コンソールを使用して評価できます。

REST

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

    • チューニング済みモデル: 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"
}

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

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://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/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://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/pipelineJobs" | Select-Object -Expand Content

次のような JSON レスポンスが返されます。容量を節約するために、pipelineSpec は切り捨てられています。

curl コマンドの例

PROJECT_ID=myproject
REGION=us-central1
MODEL_NAME=publishers/google/models/text-bison@001
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"
}'

Python

Python をインストールまたは更新する方法については、Vertex AI SDK for Python をインストールするをご覧ください。詳細については、Python API リファレンス ドキュメントをご覧ください。


from google.auth import default
import vertexai
from vertexai.preview.language_models import (
    EvaluationTextClassificationSpec,
    TextGenerationModel,
)

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

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

    vertexai.init(project=project_id, location=location, 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)

    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. [評価] タブで、表示する評価実行の名前をクリックします。

次のステップ