使用端到端 AutoML 训练模型。

本页面介绍如何使用端到端 AutoML 的表格工作流从表格数据集训练分类或回归模型。

准备工作

在训练模型之前,您必须先完成以下操作:

如果您在运行端到端 AutoML 的表格工作流时收到与配额相关的错误,则可能需要申请更高的配额。如需了解详情,请参阅管理表格工作流的配额

获取上一个超参数调节结果的 URI

如果您先前已完成端到端 AutoML 工作流运行,则可以使用先前运行的超参数调节结果以节省训练时间和资源。您可以使用 Google Cloud 控制台查找先前的超参数调节结果,也可以使用 API 以编程方式加载结果。

Google Cloud 控制台

如需使用 Google Cloud 控制台查找超参数调节结果 URI,请执行以下步骤:

  1. 在 Google Cloud 控制台的 Vertex AI 部分中,前往流水线页面。

    前往“流水线”页面

  2. 选择运行标签页。

  3. 选择要使用的流水线运行。

  4. 选择展开工件

  5. 点击组件 exit-handler-1

  6. 点击组件 stage_1_tuning_result_artifact_uri_empty

  7. 查找组件 automl-tabular-cv-trainer-2

  8. 点击关联的工件 tuning_result_output

  9. 选择节点信息标签页。

  10. 复制 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 控制台训练模型,请执行以下步骤:

  1. 在 Google Cloud 控制台的 Vertex AI 部分中,前往流水线页面。

    前往“流水线”页面

  2. 选择模板库标签页。

  3. 表格分类/回归 AutoML 卡片中,点击创建运行

  4. 运行详细信息页面中,按如下方式配置:

    1. 输入流水线运行名称。
    2. 可选:如果要设置 Vertex AI Pipelines 服务账号Dataflow Worker 服务账号,请打开高级选项详细了解服务账号。
    3. 点击继续

  5. 运行时配置页面中,按如下方式配置:

    1. 输入 Cloud Storage 存储桶或该存储桶中的文件夹以用作根输出目录。此目录将用于保存中间文件,例如具体化数据集和模型。请务必在训练完成后清理目录,并将模型和其他重要工件复制到另一个 Cloud Storage 存储桶。 或者,为 Cloud Storage 存储桶设置存留时间 (TTL)

      Google Cloud 控制台的 Cloud Storage 部分列出了项目的存储桶。

      转至“存储桶”页面

    2. 点击继续

  6. 训练方法页面中,按如下方式配置:

    1. 选择要用于训练模型的数据集名称。
    2. 选择目标列。 目标列是模型将预测的值。 详细了解目标列要求
    3. 输入新模型的显示名。
    4. 可选:如需选择如何在训练集、测试集和验证集之间拆分数据,请打开高级选项。您可以从以下数据拆分选项中进行选择:
      • 随机(默认):Vertex AI 会随机选择与每个数据集关联的行。默认情况下,Vertex AI 选择 80% 的数据行分配给训练集、10% 分配给验证集、10% 分配给测试集。设置要与每个数据集关联的数据行的百分比。
      • 手动:Vertex AI 会根据数据拆分列中的值为每个数据集选择数据行。提供数据拆分列的名称。
      • 按时间顺序:Vertex AI 根据时间列中的时间戳拆分数据。提供时间列的名称。您还可以设置要与训练集、验证集和测试集关联的数据行的百分比。
      • 分层:Vertex AI 会随机选择与每个数据集关联的行,但保留目标列值的分布。提供目标列的名称。您还可以设置要与训练集、验证集和测试集关联的数据行的百分比。
      详细了解数据拆分
    5. 可选:您可以在不使用架构搜索的情况下运行流水线。如果您选择跳过架构搜索,系统会提示您在训练选项页面中提供先前流水线中运行的超参数集。
    6. 点击继续

  7. 训练选项页面中,按如下方式配置:

    1. 可选:点击生成统计信息。生成统计信息会填充转换下拉菜单。
    2. 检查您的列列表,并从训练中排除任何不应用于训练模型的列。
    3. 查看为包含的特征选择的转换,以及是否允许无效数据,并进行任何所需更新。详细了解转换无效数据
    4. 如果您在训练方法页面中选择跳过架构搜索,请提供之前流水线运行中的超参数调节结果的路径。
    5. 可选:如果要指定权重列,请打开高级选项并进行选择。详细了解权重列
    6. 可选:如果您要更改默认优化目标,请打开高级选项并进行选择。详细了解优化目标
    7. 可选:如果您在训练方法页面中选择执行架构搜索,则可以指定并行试验的次数。打开高级选项,然后输入您的值。
    8. 可选:您可以为部分超参数提供固定值。Vertex AI 会搜索其余非固定超参数的最佳值。如果您非常喜欢模型类型,则此选项是一个不错的选择。您可以根据模型类型在神经网络和提升树之间进行选择。打开高级选项,并以 JSON 格式提供研究规范替换值。

      例如,如果要将模型类型设置为神经网络 (NN),请输入以下内容:

      [
        {
          "parameter_id": "model_type",
          "categorical_value_spec": {
            "values": ["nn"]
          }
        }
      ]
      

    9. 点击继续

  8. 计算和价格页面中,配置如下:

    1. 输入模型训练的最大小时数。详细了解价格
    2. 可选:在计算设置部分中,您可以配置工作流的每个阶段的机器类型和机器数量。如果您有大型数据集并希望相应地优化机器硬件,则此选项是一个不错的选择。

  9. 点击提交

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] 用于概率推理的分位数。分位数表示目标值低于给定值的可能性。提供一个最多包含五个介于 01(不含边界值)之间的唯一数字的列表。

工作流自定义选项

通过定义在流水线定义期间传入的参数值,您可以自定义端到端 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)。准确捕捉更多极值。默认值。
平均绝对误差 minimize-mae 最大限度降低平均绝对误差 (MAE)。将极值视为对模型影响较小的离群值。
RMSLE minimize-rmsle 最大限度降低均方根对数误差 (RMSLE)。根据相对误差而不是绝对误差来判错。适用于预测值和实际值都非常大的情况。

后续步骤