运行基于计算的评估流水线

本指南介绍了如何运行基于计算的评估流水线,以评估基础模型和经过调优的生成式 AI 模型在 Vertex AI 上的性能。流水线会针对您提供的评估数据集,使用一组指标来评估模型。

本页面涵盖以下主题:

下图总结了运行基于计算的评估的总体工作流程:

如需了解最新的基于计算的评估功能,请参阅定义指标

基于计算的模型评估的运作方式

如需评估模型的性能,请提供包含提示和标准答案对的评估数据集。对于每个对,提示是要评估的输入,标准答案是该提示的理想回答。

在评估过程中,该流程会将每对中的提示传递给模型以生成输出。然后,该流程会使用模型生成的输出和相应的标准答案来计算评估指标。

用于评估的指标类型取决于您所评估的任务。下表显示了支持的任务以及用于评估每种任务的指标:

任务 指标
分类 Micro-F1Macro-F1、Per class F1
摘要 ROUGE-L
问题回答 完全匹配
文本生成 BLEUROUGE-L

支持的模型

您可以评估以下模型:

  • text-bison:基础版本和调优后的版本。
  • Gemini:除分类任务以外的所有任务。

准备并上传评估数据集

评估数据集包含与您要评估的任务相配的提示和标准答案对。数据集必须至少包含一个提示和标准答案对;为获得有意义的指标,至少包含 10 个对。您提供的示例越多,结果就越有意义。

数据集格式

评估数据集必须采用 JSON 行 (JSONL) 格式,其中每行都是一个 JSON 对象。每个对象都必须包含一个 input_text 字段(包含您要评估的提示)和一个 output_text 字段(包含该提示的理想回答)。

input_text 的词元长度上限为 8,192,output_text 的词元长度上限为 1,024。

将数据集上传到 Cloud Storage

您可以创建新的 Cloud Storage 存储桶,也可以使用现有存储分区来存储数据集文件。存储桶必须与模型位于同一区域。

存储桶准备就绪后,将数据集文件上传到存储桶。

选择评估方法

您可以使用 Google Cloud 控制台、REST API 或 Vertex AI SDK for Python 运行基于计算的评估作业。下表可帮助您为您的使用场景选择最佳方案。

方法 说明 使用场景
Google Cloud 控制台 一种图形界面 (GUI),可提供引导式分步工作流,用于创建和监控评估作业。
  • 正在学习评估工作流程的新用户。
  • 快速的一次性评估。
  • 无需编写代码即可直观呈现设置和结果。
REST API 一种程序化接口,用于通过向端点发送 JSON 请求来创建评估作业。
  • 将模型评估集成到现有应用或多语言工作流中。
  • 构建非基于 Python 的自定义工具或自动化。
Python 版 Vertex AI SDK 一个高级 Python 库,可简化与 Vertex AI API 的交互。
  • 主要在 Python 环境(例如 Jupyter 笔记本)中工作的数据科学家和机器学习工程师。
  • 自动化 MLOps 流水线和复杂的评估工作流。

执行模型评估

您可以使用以下方法之一来执行模型评估作业。

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 Custom Code Service Agent
  • 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 方法和网址:

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

如需了解如何安装或更新 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 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. 评估标签页中,点击要查看的评估运行的名称。

后续步骤