執行運算式評估管道

您可以在 Vertex AI 上評估基礎模型和微調生成式 AI 模型的效能。系統會根據您提供的評估資料集,使用一組指標評估模型。本頁面說明如何透過評估管道服務,以運算為基礎評估模型,以及如何建立和格式化評估資料集,並使用 Google Cloud 控制台、Vertex AI API 或 Python 適用的 Vertex AI SDK 執行評估。

運算式模型評估的運作方式

如要評估模型成效,請先建立評估資料集,其中包含提示和真值組合。在每個組合中,提示是您要評估的輸入內容,而基準真相是該提示的理想回覆。在評估期間,評估資料集中每個組合的提示會傳給模型以生成內容。模型生成的內容以及評估資料集的基準真相,會用於計算評估指標。

評估時使用的指標類型取決於您要評估的任務。下表列出支援的任務,以及用於評估各項任務的指標:

工作 指標
分類 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 控制台評估模型。

REST

如要建立模型評估工作,請使用 pipelineJobs 方法傳送 POST 要求。

使用任何要求資料之前,請先替換以下項目:

  • PROJECT_ID:執行管道元件的 Google Cloud 專案。
  • PIPELINEJOB_DISPLAYNAME:PipelineJob 的顯示名稱。
  • LOCATION:執行管道元件的區域。 目前僅支援 us-central1
  • DATASET_URI:參照資料集的 Cloud Storage URI。你可以指定一或多個 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 建立虛擬私有雲網路對等互連。如未指定,評估作業不會與任何網路對等互連。
  • KEY_NAME:(選用) 客戶管理的加密金鑰 (CMEK) 名稱。如果已設定,評估作業建立的資源會使用提供的加密金鑰加密。金鑰名稱的格式為 projects/PROJECT_ID/locations/REGION/keyRings/KEY_RING/cryptoKeys/KEY。 金鑰必須與評估工作位於相同區域。

HTTP 方法和網址:

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@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"
}'

Python

如要瞭解如何安裝或更新 Python 適用的 Vertex AI SDK,請參閱「安裝 Python 適用的 Vertex AI SDK」。 詳情請參閱 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 Model Registry」頁面。

    前往 Vertex AI Model Registry

  2. 按一下要評估的模型名稱。
  3. 在「評估」分頁中,按一下「建立評估」,然後按照下列方式設定:
    • 目標:選取要評估的任務。
    • 目標資料欄或欄位:(僅限分類) 輸入用於預測的目標資料欄。範例:ground_truth
    • 來源路徑:輸入或選取評估資料集的 URI。
    • 輸出格式:輸入評估結果的格式。 目前僅支援 jsonl
    • Cloud Storage 路徑:輸入或選取 URI,用於儲存評估輸出內容。
    • 類別名稱:(僅限分類) 輸入可能的類別名稱清單。
    • 運算節點數量:輸入執行評估工作的運算節點數量。
    • 機器類型:選取要用於執行評估工作的機器類型。
  4. 按一下「Start evaluation」(開始評估)

查看評估結果

您可以在建立評估工作時指定的 Cloud Storage 輸出目錄中,找到評估結果。檔案名稱為 evaluation_metrics.json

如果是微調模型,您也可以在 Google Cloud 控制台中查看評估結果:

  1. 在 Google Cloud 控制台的 Vertex AI 專區中,前往「Vertex AI Model Registry」頁面。

    前往 Vertex AI Model Registry

  2. 按一下模型名稱,即可查看評估指標。

  3. 在「評估」分頁中,按一下要查看的評估執行作業名稱。

後續步驟