创建 Vertex AI Vizier 研究

本页面介绍如何使用 Python 向 Vertex AI Vizier 发出 API 请求。如需了解 Vertex AI Vizier 的工作原理,请参阅 Vertex AI Vizier 概览

准备工作

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Enable the Vertex AI API.

    Enable the API

  4. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  5. Enable the Vertex AI API.

    Enable the API

  6. If you're using a local shell, then create local authentication credentials for your user account:

    gcloud auth application-default login

    You don't need to do this if you're using Cloud Shell.

  7. 安装 Python 版 Vertex AI SDK

定义常量

如需定义常量,请运行以下命令,将 REGIONPROJECT_ID 替换为您的区域和项目 ID。创建您自己的研究名称或使用建议值。

import json
import datetime
from google.cloud import aiplatform

REGION = "REGION"
PROJECT_ID = "PROJECT_ID"

# The following placeholder variables are automatically filled in.
STUDY_DISPLAY_NAME = '{}_study_{}'.format(PROJECT_ID.replace('-', ''), datetime.datetime.now().strftime('%Y%m%d_%H%M%S')) #@param {type: 'string'}
ENDPOINT = REGION + '-aiplatform.googleapis.com'
PARENT = 'projects/{}/locations/{}'.format(PROJECT_ID, REGION)

构建 API 请求

以下命令行 API 请求使用 Python 编写。

创建研究

研究是一系列实验或试验,可帮助您优化超参数或参数。

以下示例的目标是计算 y = x^2 的最大值,其中 x 的范围为 [-10. 10]。此示例只有一个参数,并使用易于计算的函数来帮助演示如何使用 Vertex AI Vizier。

param_x = {
    'parameter_id': 'x',
    'double_value_spec': {
        'min_value': -10.0,
        'max_value': 10.0
    }
}

metric_y = {
    'metric_id': 'y',
    'goal': 'MAXIMIZE'
}

study = {
    'display_name': STUDY_DISPLAY_NAME,
    'study_spec': {
      'algorithm': 'RANDOM_SEARCH',
      'parameters': [param_x],
      'metrics': [metric_y],
    }
}

如需使用研究配置创建研究,请通过 VizierServiceClient 发送以下请求。使用返回的 STUDY_NAME 来查询研究。

vizier_client = aiplatform.gapic.VizierServiceClient(client_options=dict(api_endpoint=ENDPOINT))
study = vizier_client.create_study(parent=PARENT, study=study)
STUDY_NAME = study.name

查看您的研究

创建研究后,您可以在 Google Cloud 控制台的 Vertex AI 部分中的实验页面上找到该研究。

转到“实验”页面

获取研究报告

如需获取研究,请发送以下请求。

vizier_client.get_study({'name': STUDY_NAME})

列出研究

如需列出特定项目和区域中的研究,请发送以下请求:

vizier_client.list_studies({'parent': PARENT})

获取建议的试验

如需从 Vertex AI Vizier 获得试验建议,请创建一个包含 SUGGEST_COUNTCLIENT_ID 的请求。通过发送请求,将此信息传递给 Vertex AI Vizier。

使用以下命令创建请求。将 SUGGEST_COUNT 更改为您希望从每个请求中获得的建议数量。

suggest_response = vizier_client.suggest_trials({
    'parent': STUDY_NAME,
    'suggestion_count': SUGGEST_COUNT,
    'client_id': CLIENT_ID
    })

suggest_trials 会启动长时间运行的操作来生成试验。通过其响应,您可以了解 Vertex AI Vizier 是否正在生成试验建议。

要等待返回的结果,请使用 result() 函数。

suggest_response.result().trials

以下格式显示了示例试验。此试验建议为参数 x 使用值 0.1

name: "TRIAL_ID"
state: ACTIVE
parameters {
  parameter_id: "x"
  value {
    number_value: 0.1
  }
}
start_time {
  seconds: 1618011215
}

使用上一个响应中的 TRIAL_ID 获取试验:

vizier_client.get_trial({
        'name': TRIAL_ID
      })

评估效果

在收到试验建议后,您可以计算每个试验,并将每个结果记录为计算结果

例如,如果您尝试优化的函数为 y = x^2,则使用试验提供的 x 的建议值来计算函数。 使用建议值 0.1,函数的计算结果为 y = 0.1 * 0.1,得数为 0.01

添加计算结果

按照试验建议计算以获得计算结果后,将此计算结果添加到试验中。

使用以下命令存储测量结果并发送请求。在此示例中,将 RESULT 替换为测量值。如果您要优化的函数是 y = x^2,建议的 x 值为 0.1,则结果为 0.01

vizier_client.add_trial_measurement({
        'trial_name': TRIAL_ID,
        'measurement': {
            'metrics': [{'metric_id': 'y', 'value':RESULT }]
        }
    })

完成试验

在为某个试验添加所有计算结果后,您必须通过发送命令完成试验。

完成试验后,您可以发送一个命令以仅完成试验,也可以发送命令来添加最终计算结果并完成试验。

不添加最终计算结果

如需完成试验且不添加最终计算结果,请发送以下请求。

vizier_client.complete_trial({
      'name': TRIAL_ID
  })

添加最终计算结果

如需完成试验并添加最终计算结果,请使用以下命令,并将 RESULT 替换为最终计算结果。

vizier_client.complete_trial({
      'name': TRIAL_ID
      'final_measurement': {
        'metrics': [{'metric_id': 'y', 'value': RESULT}]
      }
  })

列出试验

如需列出特定研究中的试验,请发送以下请求。

vizier_client.list_trials({
    'parent': STUDY_NAME
})

完成所有待处理的试验后,您可以调用 suggestTrials 获得更多建议并重复试验计算过程。

列出最优试验

以下示例展示了 list_optimal_trials,它返回了多目标研究的最优试验,或单目标研究的最佳试验:

vizier_client.list_optimal_trials({
    'parent': STUDY_NAME
})

后续步骤

  • 查看相关研究的 REST 参考文档。