本页面介绍如何使用 Python 向 Vertex AI Vizier 发出 API 请求。如需了解 Vertex AI Vizier 的工作原理,请参阅 Vertex AI Vizier 概览。
准备工作
- 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.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Enable the Vertex AI API.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Enable the Vertex AI API.
-
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.
- 安装 Vertex AI SDK for Python。
定义常量
如需定义常量,请运行以下命令,将 REGION
和 PROJECT_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_COUNT
和 CLIENT_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 参考文档。