训练概览

您可以使用 AI Platform Training 在云端运行 TensorFlow、scikit-learn、XGBoost 训练应用。AI Platform Training 提供了在其运行时版本中使用这些托管的框架训练机器学习模型所需的依赖项。此外,您可以使用自定义容器以借助其他机器学习框架运行训练作业。本页面介绍了 AI Platform Training 的主要概念。如果您想要立即开始训练过程,请参阅如何启动训练作业

训练的工作原理

AI Platform Training 会利用云端的计算资源运行您的训练作业。您可以针对数据集训练内置算法(Beta 版,无需编写训练应用。如果内置算法不适合您的使用场景,您可以创建一个训练应用以便在 AI Platform Training 上运行。

以下是使用训练应用的过程概览:

  1. 您可以创建一个 Python 应用来训练模型,并采用在开发环境中本地运行的方式构建该应用。
  2. 将训练和验证数据存放到 AI Platform Training 可以访问的来源中。这通常意味着将数据存放到 Cloud Storage、Bigtable 或与用于 AI Platform Training 的同一 Google Cloud 项目相关联的其他 Google Cloud 存储服务中。
  3. 当应用准备好运行时,您必须封装应用,然后将应用传输到项目可以访问的 Cloud Storage 存储桶。如果您使用 Google Cloud CLI 运行训练作业,则上述过程会自动执行。
  4. AI Platform Training 训练服务会为作业设置资源。该服务会根据您的作业配置分配一个或多个虚拟机(称为训练实例)。通过执行以下操作来设置每个训练实例:
    • 为作业使用的 AI Platform Training 版本应用标准机器映像。
    • 加载应用软件包并使用 pip 进行安装。
    • 安装您指定为依赖项的任何其他软件包。
  5. 训练服务运行应用,并传递您在创建训练作业时指定的任何命令行参数。
  6. 您可以通过以下方式来获取有关正在运行的作业的信息:
    • 在 Cloud Logging 上。
    • 通过 gcloud 命令行工具来请求作业详情或运行日志流式传输。
    • 以编程方式向训练服务发出状态请求。
  7. 当训练作业成功完成或遇到不可恢复的错误时,AI Platform Training 会停止所有作业进程并清理资源。

典型的机器学习应用

AI Platform Training 训练服务旨在尽量减少对应用的影响。这意味着您可以专注于您的模型代码。

大多数机器学习应用具有以下功能:

  • 提供获取训练数据和评估数据的方法。
  • 处理数据实例。
  • 使用评估数据测试模型的准确性(正确预测值的频率)。
  • (对于 TensorFlow 训练应用)提供在流程中按时间间隔输出检查点以获得模型进度快照的方法。
  • 提供在应用结束时导出经过训练的模型的方法。

分布式训练结构

如果您使用 AI Platform Training 运行分布式 TensorFlow 作业,请在训练集群中指定多个机器(节点)。训练服务会为您指定的机器类型分配资源。给定节点上正在运行的作业称为副本。根据分布式 TensorFlow 模型,训练集群中的每个副本将在分布式训练中被分配单个角色或任务:

  • 主实例:仅将一个副本指定为主实例工作器。此任务管理其他任务,并报告整个作业的状态。训练服务会一直运行,直到作业成功完成或遇到不可恢复的错误。在分布式训练中,主实例副本的状态表示整体作业状态。

    如果您运行的是单一流程作业,则唯一的副本就是该作业的主实例。

  • 工作器:可以将一个或多个副本指定为工作器。这些副本执行您在作业配置中指定的部分工作。

  • 参数服务器:可以将一个或多个副本指定为参数服务器。这些副本在多个工作器之间协调共享模型状态。

分布式训练策略

有三种基本策略可用于训练具有多个节点的模型,包括:

  • 具有同步更新的数据并行训练。
  • 具有异步更新的数据并行训练。
  • 模型并行训练。

由于无论模型结构如何,您都可以使用数据并行策略,因此将分布式训练方法应用于自定义模型是一个很好的起点。在数据并行训练中,整个模型与所有工作器节点共享。每个节点以与小批量处理相同的方式,独立于训练数据集的某些部分来计算梯度矢量。接着,算出的梯度矢量会被收集到参数服务器节点中,并且系统会用梯度矢量的总和来更新模型参数。如果在 10 个工作器节点中分布 10000 个批次,则每个节点大约可以处理 1000 个批次。

您可以使用同步更新或异步更新完成数据并行训练。如果使用异步更新,则参数服务器在从其中一个工作器节点接收每一个梯度矢量后,立即独立应用该矢量,如下图所示:

使用异步更新的数据并行训练图

如需了解如何执行数据并行分布式训练,请参阅 TensorFlow 的 MultiWorkerMirroredStrategyParameterServerStrategy。然后了解在 AI Platform Training 中如何配置分布式训练

如需详细了解模型并行训练,请参阅 Mesh TensorFlow

封装应用

如需在 AI Platform Training 上运行训练应用,您必须先封装应用及其依赖项。然后,您必须将此软件包上传到您的 Google Cloud 项目有权访问的 Cloud Storage 存储桶中。

Google Cloud CLI 可自动执行大部分流程。具体来说,您可以使用 gcloud ai-platform jobs submit training 上传应用软件包并提交训练作业。

如需查看详细说明,请参阅封装训练应用

提交训练作业

AI Platform Training 将模型训练作为异步(批处理)服务提供。您可以通过以下方式提交训练作业:从命令行运行 gcloud ai-platform jobs submit training,或者调用 projects.jobs.create 向 API 发送请求。

如需查看详细说明,请参阅启动训练作业

作业 ID

您必须为训练作业提供遵循以下规则的名称:

  • 该名称在您的 Google Cloud 项目中必须是唯一的。
  • 只能包含大小写混合字母、数字和下划线。
  • 必须以字母开头。
  • 长度不能超过 128 个字符。

您可以根据个人意愿使用任何作业命名惯例。如果需要运行的作业不多,则您选择的名称可能不是很重要。如果运行大量作业,则可能需要在较大的列表中查找作业 ID。建议选择易于区分的作业 ID。

一种常见的方法是为与给定模型相关联的所有作业定义一个基本名称,然后附加日期/时间字符串。采用此惯例可以轻松按名称对作业列表进行排序,因为模型的所有作业将按升序组合在一起。

容量层级

在 AI Platform Training 上运行训练作业时,您必须指定所需的机器数量和类型。为了简化该过程,您可以从一组名为“容量层级”的预定义集群规格中进行选择。或者,您也可以选择自定义层级并自行指定机器类型

要指定规模层级,请将其添加到作业配置中的 TrainingInput 对象。如果您使用 gcloud 命令来提交训练作业,则可以使用相同的标识符。

请参阅容量层级和机器类型的详细定义。

超参数调节

如果您想要使用超参数调节,则必须在创建训练作业时添加配置详情。请参阅超参数调节概念指南如何使用超参数调节

区域和地区

Google Cloud 使用区域(可细分为地区)来定义物理计算资源的地理位置。当您在 AI Platform Training 上运行训练作业时,您可以指定要在哪个区域运行。

如果您将训练数据集存储在 Cloud Storage 中,则应在用于训练数据的 Cloud Storage 存储桶所在的相同区域中运行训练作业。如果必须在与数据存储桶不同的区域中运行作业,则运行作业可能需要花费更长时间。

如需查看 AI Platform Training 服务(包括模型训练和在线/批量预测)的可用区域,请阅读区域指南

将 job-dir 用作常用输出目录

要指定作业的输出目录,您可以在配置作业时设置作业目录。当您提交作业时,AI Platform Training 会执行以下操作:

  • 验证目录,以便在作业运行前解决所有问题。
  • 将路径作为命令行参数(名为 --job-dir)传递给应用。

您需要在应用中说明 --job-dir 参数。请在解析其他参数时捕获该参数值,并在保存应用输出时使用该参数值。请参阅启动训练作业指南。

运行时版本

如需使用 AI Platform Training 托管的机器学习框架之一进行训练,请指定受支持的 AI Platform Training 运行时版本以用于训练作业。运行时版本规定了 TensorFlow、scikit-learn、XGBoost 以及安装在已分配训练实例上的其他 Python 软件包的版本。请指定一个能够为您提供所需功能的版本。如果同时在本地和云端运行训练作业,请确保本地和云端的作业使用相同的运行时版本。

输入数据

训练作业中可以使用的数据必须遵循以下规则才能在 AI Platform Training 上运行:

  • 数据所用格式必须便于系统读取并提供给您的训练代码。
  • 数据必须位于代码可以访问的位置。这通常意味着,应使用一项 Google Cloud 存储服务或大数据服务来存储数据。

输出数据

应用通常会输出数据,包括训练期间的检查点以及训练完成后保存的模型。您可以根据应用的需要输出其他数据。最简单的方法是将输出文件保存到训练作业所在的相同 Google Cloud 项目的 Cloud Storage 存储桶中。

构建可以从虚拟机重启中快速恢复的训练作业

Google Cloud 虚拟机偶尔会重启。为确保您的训练作业可以从虚拟机重启中快速恢复,您应定期保存模型检查点,并且配置作业以恢复最近的检查点。

通常情况下,模型检查点应保存在您在 gcloud ai-platform jobs submit training 命令中使用 --job-dir 参数指定的 Cloud Storage 路径中。

TensorFlow Estimator API 为您实现了检查点功能。如果您的模型封装在 Estimator 中,则无需担心虚拟机上的重启事件。

如果您无法将模型封装在 TensorFlow Estimator 中,则必须将检查点保存和恢复功能编写到您的训练代码中。TensorFlow 在 tf.train 模块中提供了以下有用资源:

使用 GPU 进行训练

您可以使用图形处理单元 (GPU) 在 AI Platform Training 上运行您的训练作业。GPU 旨在高速执行数学密集型运算。较之添加另一台具有一个或多个 CPU 核心的机器,使用 GPU 对张量数据运行某些运算更高效。

AI Platform Training 训练服务未提供可与 GPU 搭配使用的任何特殊接口。您可以指定支持 GPU 的机器来运行作业,该服务会为您分配机器。例如,在 TensorFlow 训练作业中,您可以将 TensorFlow 操作分配给代码中的 GPU。当您为某个任务类型指定可以使用 GPU 的机器类型时,分配给该任务类型的每个实例均采用相同配置(和往常一样):该服务在每个机器上运行代码的单个副本。

如果您使用自定义容器借助其他机器学习框架进行训练,则该框架可能会提供其他接口以便与 GPU 搭配使用。

在 GPU 上运行并不能让某些模型受益。我们建议您使用 GPU 来执行需要完成许多数学运算的大型复杂模型。即便如此,您也应该通过训练来运行较小的数据示例,以测试 GPU 支持的优势。

请参阅如何使用 GPU 运行训练作业

使用 TPU 进行训练

您可以使用 Cloud TPU 在 AI Platform Training 上运行训练作业。

了解如何使用 TPU 运行训练作业

后续步骤