Vertex AI 提供托管式训练服务,让您能够实现大规模模型训练。您可以使用 Vertex AI 在 Google Cloud 基础架构上运行基于任何机器学习 (ML) 框架的训练应用。对于以下热门机器学习框架,Vertex AI 还提供了集成支持,可简化模型训练和服务的准备过程:
本页面介绍了 Vertex AI 自定义训练的优势、所涉及的工作流以及各种可用的训练选项。
Vertex AI 可大规模地将训练投入使用
将模型训练付诸实行面临着诸多挑战。这些挑战包括训练模型所需的时间和费用、管理计算基础架构所需的深厚技能,以及需要提供企业级安全性。Vertex AI 解决了这些难题,同时还提供了许多其他优势。
全托管式计算基础架构
Vertex AI 上的模型训练是一项全托管式服务,无需管理实体基础架构。您可以训练机器学习模型,而无需预配或管理服务器。您只需为消耗的计算资源付费。Vertex AI 还会处理作业日志记录、排队和监控。 |
高性能
Vertex AI Training 作业针对机器学习模型训练进行了优化,与直接在 GKE 集群上运行训练应用相比,可提供更快的性能。您还可以使用 Cloud Profiler 找出并调试训练作业中的性能瓶颈。 |
分布式训练
Redution Server 是 Vertex AI 中的全缩减算法,可以提高吞吐量并缩短在 NVIDIA 图形处理器 (GPU) 上进行多节点分布式训练的延迟时间。这种优化有助于减少完成大型训练作业的时间和费用。 |
超参数优化
超参数调节作业使用不同的超参数值运行训练应用的多次试验。您指定要测试的值范围,Vertex AI 会在该范围内为您的模型发现最佳值。 |
企业级安全
Vertex AI 提供以下企业安全功能:
|
机器学习操作 (MLOps) 集成
Vertex AI 提供了一套集成的 MLOps 工具和功能,可用于以下用途:
|
自定义训练的工作流
下图简要介绍了 Vertex AI 上的自定义训练工作流。以下部分详细介绍了每个步骤。
加载和准备训练数据
如需获得最佳性能和支持,请使用以下 Google Cloud 服务之一作为数据源:
在使用训练流水线训练模型时,您还可以指定 Vertex AI 托管式数据集作为数据源。使用相同的数据集训练自定义模型和 AutoML 模型,您可以比较这两个模型的性能。
准备训练应用
如需准备训练应用以在 Vertex AI 上使用,请执行以下操作:
- 实施 Vertex AI 的训练代码最佳实践。
- 确定要使用的容器映像类型。
- 根据所选的容器映像类型,将训练应用封装为受支持的格式。
实施训练代码最佳实践
您的训练应用应遵循 Vertex AI 训练代码最佳实践。这些最佳实践与训练应用执行以下操作的能力相关:
- 访问 Google Cloud 服务。
- 加载输入数据。
- 为实验跟踪启用自动日志记录功能。
- 导出模型工件。
- 使用 Vertex AI 的环境变量。
- 确保对虚拟机重启具有恢复能力。
选择容器类型
Vertex AI 会在 Docker 容器映像中运行您的训练应用。Docker 容器映像是一个独立的软件包,其中包含代码和所有依赖项,几乎可以在任何计算环境中运行。您可以指定要使用的预构建容器映像的 URI,也可以创建和上传预装了训练应用和依赖项的自定义容器映像。
下表显示了预构建容器映像与自定义容器映像之间的区别:
规格 | 预构建的容器映像 | 自定义容器映像 |
---|---|---|
机器学习框架 | 每个容器映像都针对特定的机器学习框架。 | 使用任意机器学习框架或不使用任何机器学习框架。 |
机器学习框架版本 | 每个容器映像都针对特定的机器学习框架版本。 | 使用任何机器学习框架版本,包括次要版本和每夜版。 |
应用依赖项 | 机器学习框架的常见依赖项已预安装。您可以指定要在训练应用中安装的其他依赖项。 | 预安装训练应用所需的依赖项。 |
应用交付格式 |
|
在自定义容器映像中预安装训练应用。 |
设置难易度 | 低 | 高 |
建议用于 | 基于机器学习框架和框架版本的 Python 训练应用,这些框架和框架版本有可用的预构建容器映像。 |
|
封装训练应用
确定要使用的容器映像类型后,请根据容器映像类型将训练应用打包为以下格式之一:
用于预构建容器的单个 Python 文件
将训练应用编写为单个 Python 文件,并使用 Vertex AI SDK for Python 创建
CustomJob
或CustomTrainingJob
类。该 Python 文件会打包到 Python 源分发包中,并安装到预构建的容器映像中。将训练应用作为单个 Python 文件交付适合用于原型设计。对于正式版训练应用,您可能需要将训练应用整理到多个文件中。用于预构建容器的 Python 源代码发行版
将训练应用打包到一个或多个 Python 源分发中,并将其上传到 Cloud Storage 存储桶。当您创建训练作业时,Vertex AI 会将源分发安装到预构建的容器映像。
自定义容器映像
创建您自己的 Docker 容器映像,该映像预安装了训练应用和依赖项,并将其上传到 Artifact Registry。如果训练应用是使用 Python 编写的,则可以使用一条 Google Cloud CLI 命令执行这些步骤。
配置训练作业
Vertex AI Training 作业会执行以下任务:
- 预配一个(单节点训练)或多个(分布式训练)虚拟机 (VM)。
- 在预配的虚拟机上运行容器化训练应用。
- 在训练作业完成后删除虚拟机。
Vertex AI 提供三种类型的训练作业,用于运行训练应用:
-
自定义作业 (
CustomJob
) 会运行您的训练应用。如果您使用的是预构建的容器映像,则模型工件会输出到指定的 Cloud Storage 存储桶。对于自定义容器映像,您的训练应用还可以将模型工件输出到其他位置。 -
超参数调节作业 (
HyperparameterTuningJob
) 使用不同的超参数值运行训练应用的多次试验,直到生成具有最佳性能的超参数值的模型工件。您可以指定要测试的超参数值范围以及要优化的指标。 -
训练流水线 (
CustomTrainingJob
) 会运行自定义作业或超参数调节作业,并可选择将模型工件导出到 Vertex AI 以创建模型资源。您可以指定 Vertex AI 托管式数据集作为数据源。
创建训练作业时,请指定用于运行训练应用的计算资源并配置容器设置。
计算配置
指定要用于训练作业的计算资源。Vertex AI 支持单节点训练(其中训练作业在一个虚拟机上运行)和分布式训练(其中训练作业在多个虚拟机上运行)。
您可以为训练作业指定的计算资源如下:
虚拟机机器类型
不同的机器类型提供不同的 CPU、内存大小和带宽。
图形处理单元 (GPU)
您可以向 A2 或 N1 类型的虚拟机添加一个或多个 GPU。如果您的训练应用旨在使用 GPU,则添加 GPU 可以显著提高性能。
张量处理单元 (TPU)
TPU 专为加快机器学习工作负载速度而设计。 使用 TPU 虚拟机进行训练时,您只能指定一个工作器池。该工作器池只能有一个副本。
启动磁盘
您可以使用 SSD(默认)或 HDD 作为启动磁盘。如果您的训练应用对磁盘执行读写操作,使用 SSD 可以提高性能。您还可以根据训练应用写入磁盘的临时数据量,指定启动磁盘的大小。启动磁盘的大小可以介于 100 GiB(默认)到 64,000 GiB 之间。工作器池中的所有虚拟机均必须使用相同类型和大小的启动磁盘。
容器配置
您需要进行的容器配置取决于您是使用预构建容器映像还是自定义容器映像。
预构建的容器配置:
- 指定您要使用的预构建容器映像的 URI。
- 如果您的训练应用是作为 Python 源分发软件包打包的,请指定该软件包所在的 Cloud Storage URI。
- 指定训练应用的入口点模块。
- 可选:指定要传递给训练应用入口点模块的命令行参数列表。
自定义容器配置:
- 指定自定义容器映像的 URI,该 URI 可以是来自 Artifact Registry 或 Docker Hub 的 URI。
- 可选:替换容器映像中的
ENTRYPOINT
或CMD
说明。
创建训练作业
准备好数据和训练应用后,请通过创建以下训练作业之一来运行训练应用:
如需创建训练作业,您可以使用 Google Cloud 控制台、Google Cloud CLI、Vertex AI SDK for Python 或 Vertex AI API。
(可选)将模型工件导入 Vertex AI
您的训练应用可能会将一个或多个模型工件输出到指定位置,通常是 Cloud Storage 存储桶。在 Vertex AI 中从模型工件获得预测结果之前,您必须先将模型工件导入 Vertex AI Model Registry。
与用于训练的容器映像一样,Vertex AI 可让您选择使用预构建或自定义容器映像来进行预测。如果您的机器学习框架和框架版本有可用的预构建容器映像,我们建议您使用预构建容器映像。
后续步骤
- 从模型获取预测结果。
- 评估模型。
- 试用 Hello 自定义训练教程,了解在 Vertex AI 上训练 TensorFlow Keras 图片分类模型的分步说明。