本页面介绍如何使用端到端 AutoML 的表格工作流从表格数据集训练分类或回归模型。
准备工作
在训练模型之前,您必须先完成以下操作:
- 准备训练数据
- 创建 Vertex AI 数据集。
启用以下 API:Vertex AI、Dataflow、Compute Engine、Cloud Storage。
确保您的项目的服务账号分配有必要的角色。如需查看服务账号及其关联的角色,请转至 IAM 页面并选中“包括 Google 提供的角色授权”复选框。
如果您在运行端到端 AutoML 的表格工作流时收到与配额相关的错误,则可能需要申请更高的配额。如需了解详情,请参阅管理表格工作流的配额。
获取上一个超参数调节结果的 URI
如果您先前已完成端到端 AutoML 工作流运行,则可以使用先前运行的超参数调节结果以节省训练时间和资源。您可以使用 Google Cloud 控制台查找先前的超参数调节结果,也可以使用 API 以编程方式加载结果。
Google Cloud 控制台
如需使用 Google Cloud 控制台查找超参数调节结果 URI,请执行以下步骤:
API:Python
以下示例代码演示如何使用 API 加载超参数调节结果。变量 job
是指之前的模型训练流水线运行。
def get_task_detail(
task_details: List[Dict[str, Any]], task_name: str
) -> List[Dict[str, Any]]:
for task_detail in task_details:
if task_detail.task_name == task_name:
return task_detail
pipeline_task_details = job.gca_resource.job_detail.task_details
stage_1_tuner_task = get_task_detail(
pipeline_task_details, "automl-tabular-stage-1-tuner"
)
stage_1_tuning_result_artifact_uri = (
stage_1_tuner_task.outputs["tuning_result_output"].artifacts[0].uri
)
训练模型
Google Cloud 控制台
如需使用 Google Cloud 控制台训练模型,请执行以下步骤:
在 Google Cloud 控制台的 Vertex AI 部分中,前往流水线页面。
选择模板库标签页。
在表格分类/回归 AutoML 卡片中,点击创建运行。
在运行详细信息页面中,按如下方式配置:
- 输入流水线运行名称。
- 可选:如果要设置 Vertex AI Pipelines 服务账号或 Dataflow Worker 服务账号,请打开高级选项。详细了解服务账号。
- 点击继续。
在运行时配置页面中,按如下方式配置:
-
输入 Cloud Storage 存储桶或该存储桶中的文件夹以用作根输出目录。此目录将用于保存中间文件,例如具体化数据集和模型。请务必在训练完成后清理目录,并将模型和其他重要工件复制到另一个 Cloud Storage 存储桶。或者,为 Cloud Storage 存储桶设置存留时间 (TTL)。
Google Cloud 控制台的 Cloud Storage 部分列出了项目的存储桶。
- 点击继续。
-
在训练方法页面中,按如下方式配置:
- 选择要用于训练模型的数据集名称。
- 选择目标列。 目标列是模型将预测的值。 详细了解目标列要求。
- 输入新模型的显示名。
- 可选:如需选择如何在训练集、测试集和验证集之间拆分数据,请打开高级选项。您可以从以下数据拆分选项中进行选择:
- 随机(默认):Vertex AI 会随机选择与每个数据集关联的行。默认情况下,Vertex AI 选择 80% 的数据行分配给训练集、10% 分配给验证集、10% 分配给测试集。设置要与每个数据集关联的数据行的百分比。
- 手动:Vertex AI 会根据数据拆分列中的值为每个数据集选择数据行。提供数据拆分列的名称。
- 按时间顺序:Vertex AI 根据时间列中的时间戳拆分数据。提供时间列的名称。您还可以设置要与训练集、验证集和测试集关联的数据行的百分比。
- 分层:Vertex AI 会随机选择与每个数据集关联的行,但保留目标列值的分布。提供目标列的名称。您还可以设置要与训练集、验证集和测试集关联的数据行的百分比。
- 可选:您可以在不使用架构搜索的情况下运行流水线。如果您选择跳过架构搜索,系统会提示您在训练选项页面中提供先前流水线中运行的超参数集。
- 点击继续。
在训练选项页面中,按如下方式配置:
- 可选:点击生成统计信息。生成统计信息会填充转换下拉菜单。
- 检查您的列列表,并从训练中排除任何不应用于训练模型的列。
- 查看为包含的特征选择的转换,以及是否允许无效数据,并进行任何所需更新。详细了解转换和无效数据。
- 如果您在训练方法页面中选择跳过架构搜索,请提供之前流水线运行中的超参数调节结果的路径。
- 可选:如果要指定权重列,请打开高级选项并进行选择。详细了解权重列。
- 可选:如果您要更改默认优化目标,请打开高级选项并进行选择。详细了解优化目标。
- 可选:如果您在训练方法页面中选择执行架构搜索,则可以指定并行试验的次数。打开高级选项,然后输入您的值。
- 可选:您可以为部分超参数提供固定值。Vertex AI 会搜索其余非固定超参数的最佳值。如果您非常喜欢模型类型,则此选项是一个不错的选择。您可以根据模型类型在神经网络和提升树之间进行选择。打开高级选项,并以 JSON 格式提供研究规范替换值。
例如,如果要将模型类型设置为神经网络 (NN),请输入以下内容:
[ { "parameter_id": "model_type", "categorical_value_spec": { "values": ["nn"] } } ]
- 点击继续。
在计算和价格页面中,配置如下:
- 输入模型训练的最大小时数。详细了解价格。
- 可选:在计算设置部分中,您可以配置工作流的每个阶段的机器类型和机器数量。如果您有大型数据集并希望相应地优化机器硬件,则此选项是一个不错的选择。
点击提交。
API:Python
以下示例代码演示如何运行模型训练流水线:
job = aiplatform.PipelineJob(
...
template_path=template_path,
parameter_values=parameter_values,
...
)
job.run(service_account=SERVICE_ACCOUNT)
您可以使用 job.run()
中的可选 service_account
参数,将 Vertex AI Pipelines 服务账号设置为您选择的账号。
流水线和参数值由以下函数定义。训练数据可以是 Cloud Storage 中的 CSV 文件,也可以是 BigQuery 中的表。
template_path, parameter_values = automl_tabular_utils.get_automl_tabular_pipeline_and_parameters(...)
以下是部分 get_automl_tabular_pipeline_and_parameters
参数:
参数名称 | 类型 | 定义 |
---|---|---|
data_source_csv_filenames |
字符串 | 存储在 Cloud Storage 中的 CSV 的 URI。 |
data_source_bigquery_table_path |
字符串 | BigQuery 表的 URI。 |
dataflow_service_account |
字符串 | (可选)用于运行 Dataflow 作业的自定义服务账号。Dataflow 作业可以配置为使用专用 IP 和特定 VPC 子网。 此参数充当默认 Dataflow 工作器服务账号的替换值。 |
prediction_type |
字符串 | 选择 classification 训练分类模型,或选择 regression 训练回归模型。 |
optimization_objective |
字符串 | 如果您要训练二元分类模型,则默认目标是 AUC ROC。如果您要训练回归模型,则默认目标是 RMSE。如果您要为模型使用其他优化目标,请在分类或回归模型的优化目标中选择一个选项。 |
enable_probabilistic_inference |
布尔值 | 如果您要训练回归模型,并将此值设置为 true ,则 Vertex AI 会对预测的概率分布建模。概率推理可以通过处理噪声数据并量化不确定性来提高模型质量。如果指定了 quantiles ,则 Vertex AI 还会返回分布的分位数。 |
quantiles |
List[float] | 用于概率推理的分位数。分位数表示目标小于给定值的可能性。提供一个最多包含五个介于 0 到 1 (不含边界值)之间的唯一数字的列表。 |
工作流自定义选项
通过定义在流水线定义期间传入的参数值,您可以自定义端到端 AutoML 工作流。您可以通过以下方式自定义工作流:
- 替换搜索空间
- 配置硬件
- 提炼模型
- 跳过架构搜索
替换搜索空间
以下 get_automl_tabular_pipeline_and_parameters
参数可让您为部分超参数提供固定值。Vertex AI 会搜索其余非固定超参数的最佳值。如果要在模型类型中选择神经网络和提升树,请使用此参数。
参数名称 | 类型 | 定义 |
---|---|---|
study_spec_parameters_override |
List[Dict[String, Any]] | (可选)超参数的自定义子集。此参数配置流水线的 automl-tabular-stage-1-tuner 组件。 |
以下代码演示了如何将模型类型设置为神经网络 (NN):
study_spec_parameters_override = [
{
"parameter_id": "model_type",
"categorical_value_spec": {
"values": ["nn"] # The default value is ["nn", "boosted_trees"], this reduces the search space
}
}
]
配置硬件
以下 get_automl_tabular_pipeline_and_parameters
参数可让您配置机器类型和用于训练的机器数量。如果您有大型数据集并希望相应地优化机器硬件,则此选项是一个不错的选择。
参数名称 | 类型 | 定义 |
---|---|---|
stage_1_tuner_worker_pool_specs_override |
Dict[String, Any] | (可选)机器类型的自定义配置和用于训练的机器数量。此参数配置流水线的 automl-tabular-stage-1-tuner 组件。 |
cv_trainer_worker_pool_specs_override |
Dict[String, Any] | (可选)机器类型的自定义配置和用于训练的机器数量。此参数配置流水线的 automl-tabular-stage-1-tuner 组件。 |
以下代码演示了如何为 TensorFlow 主节点设置 n1-standard-8
机器类型,以及为 TensorFlow 评估器节点设置 n1-standard-4
机器类型:
worker_pool_specs_override = [
{"machine_spec": {"machine_type": "n1-standard-8"}}, # override for TF chief node
{}, # override for TF worker node, since it's not used, leave it empty
{}, # override for TF ps node, since it's not used, leave it empty
{
"machine_spec": {
"machine_type": "n1-standard-4" # override for TF evaluator node
}
}
]
分解模型
以下 get_automl_tabular_pipeline_and_parameters
参数可让您创建较小的集成学习模型版本。模型越小,预测的延迟时间和费用就越低。
参数名称 | 类型 | 定义 |
---|---|---|
run_distillation |
布尔值 | 如果为 TRUE ,则系统会创建较小的集成学习模型版本。 |
跳过架构搜索
以下 get_automl_tabular_pipeline_and_parameters
参数可让您在不进行架构搜索的情况下运行流水线,并提供上一次流水线运行中的一组超参数。
参数名称 | 类型 | 定义 |
---|---|---|
stage_1_tuning_result_artifact_uri |
字符串 | (可选)先前流水线运行中的超参数调节结果的 URI。 |
分类或回归模型的优化目标
在训练模型时,Vertex AI 会根据模型类型和用于目标列的数据类型选择默认优化目标。
分类模型最适合的情况:优化目标 | API 值 | 在什么情况下使用该目标 |
---|---|---|
AUC ROC | maximize-au-roc |
最大化接收者操作特征 (ROC) 曲线下的面积。区分不同的类别。二元分类的默认值。 |
对数损失 | minimize-log-loss |
使预测概率尽可能准确。仅限于支持的多类别分类目标。 |
AUC PR | maximize-au-prc |
最大化精确率/召回率曲线下的面积。优化不常见类别的预测结果。 |
特定召回率下的精确率 | maximize-precision-at-recall |
优化特定召回值下的精确率。 |
特定精确率下的召回率 | maximize-recall-at-precision |
优化特定精确率下的召回率。 |
优化目标 | API 值 | 在什么情况下使用该目标 |
---|---|---|
均方根误差 | minimize-rmse |
最大限度降低均方根误差 (RMSE)。准确捕捉更多极值。默认值。 |
MAE | minimize-mae |
最大限度降低平均绝对误差 (MAE)。将极值视为对模型影响较小的离群值。 |
RMSLE | minimize-rmsle |
最大限度降低均方根对数误差 (RMSLE)。根据相对误差而不是绝对误差来判错。适用于预测值和实际值都非常大的情况。 |