Vertex AI 提供代管式训练服务,让您能够实现大规模模型训练。您可以使用 Vertex AI 根据 Google Cloud 基础架构上的任何机器学习 (ML) 框架运行训练应用。对于以下热门机器学习框架,Vertex AI 还集成了支持,可简化模型训练和应用的准备过程:
本页面介绍了在 Vertex AI 上自定义训练的优势、所涉及的工作流以及可用的各种训练选项。
Vertex AI 大规模运行训练
将模型训练付诸应用,存在一些挑战。这些挑战包括训练模型所需的时间和费用、管理计算基础架构所需的技能深度,以及提供企业级安全性的需求。Vertex AI 可应对这些挑战,同时提供诸多其他优势。
全代管式计算基础架构
Vertex AI 上的模型训练是一项全代管式服务,无需管理物理基础架构。您可以训练机器学习模型,而无需预配或管理服务器。您只需为实际使用的计算资源付费。Vertex AI 还可以处理作业日志记录、排队和监控。 |
高性能
Vertex AI 训练作业针对机器学习模型训练进行了优化,比在 GKE 集群上直接运行训练应用的性能更高。您还可以使用 Vertex AI TensorBoard 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 文件,并使用 Python 版 Vertex AI SDK 创建
CustomJob
或CustomTrainingJob
类。该 Python 文件被打包到 Python 源分发中并安装到预构建的容器映像中。将训练应用作为单个 Python 文件提供适用于原型设计。对于生产训练应用,您可能需要将训练应用安排在多个文件中。在预构建容器中使用的 Python 源分发
将训练应用打包到一个或多个 Python 源分发中,并将其上传到 Cloud Storage 存储桶。创建训练作业时,Vertex AI 会将源分发安装到预构建的容器映像中。
自定义容器映像
创建自己的 Docker 容器映像(其中预安装了训练应用和依赖项),并将其上传到 Artifact Registry。如果训练应用是使用 Python 编写的,则可以使用一条 Google Cloud CLI 命令执行这些步骤。
配置训练作业
Vertex AI 训练作业会执行以下任务:
- 预配一个(单节点训练)或多个(分布式训练)虚拟机 (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,可以是 Artifact Registry 或 Docker Hub 中的 URI。
- 可选:替换容器映像中的
ENTRYPOINT
或CMD
指令。
创建训练作业
准备好数据和训练应用后,请创建以下训练作业之一来运行训练应用:
如需创建训练作业,您可以使用 Google Cloud 控制台、Google Cloud CLI、Python 版 Vertex AI SDK 或 Vertex AI API。
(可选)将模型工件导入 Vertex AI
您的训练应用可能会将一个或多个模型工件输出到指定位置,通常是 Cloud Storage 存储桶。从模型工件获取 Vertex AI 预测结果之前,请先将模型工件导入 Vertex AI Model Registry。
与用于训练的容器映像一样,Vertex AI 可让您选择使用预构建或自定义容器映像进行预测。如果您的机器学习框架和框架版本提供了用于预测的预构建容器映像,我们建议您使用预构建的容器映像。
后续步骤
- 从模型获取预测结果。
- 评估模型。
- 试用 Hello 自定义训练教程,了解在 Vertex AI 上训练 TensorFlow Keras 图片分类模型的分步说明。