自定义容器概览

自定义容器是您为了运行训练应用而创建的 Docker 映像。通过在自定义容器中运行机器学习 (ML) 训练作业,您可以使用 Vertex AI 不支持的机器学习框架、非机器学习依赖项、库和二进制文件。

使用容器进行训练的工作原理

在所选机器学习框架中实现的训练应用是训练过程的核心。

  1. 使用您选择的机器学习框架创建一个模型训练应用。

  2. 决定是否使用自定义容器。可能存在已支持您的依赖项的预构建容器。否则,您需要为训练作业构建自定义容器。在自定义容器中,您可以将训练应用及其所有依赖项预安装到用于运行训练作业的映像上。

  3. 将训练和验证数据存储在 Vertex AI 可以访问的数据源中。为了简化身份验证并减少延迟时间,请将数据存储在 Cloud Storage、Bigtable 或与您用于 Vertex AI 的相同 Google Cloud 项目和地区中的其他 Google Cloud 存储服务中。详细了解 Vertex AI 如何加载数据

  4. 当应用准备好运行时,您必须构建 Docker 映像并将它推送到 Artifact Registry 或 Docker Hub,确保 Vertex AI 可以访问您的注册表

  5. 通过创建自定义作业创建自定义训练流水线,提交您的自定义训练作业。

  6. Vertex AI 会为作业设置资源。该服务会根据您的作业配置分配一个或多个虚拟机(称为训练实例)。通过使用在提交自定义训练作业时指定为 WorkerPoolSpec 对象一部分的自定义容器来设置训练实例。

  7. Vertex AI 会运行您的 Docker 映像,并传递您在创建训练作业时指定的任何命令行参数。

  8. 当训练作业成功完成或遇到不可恢复的错误时,Vertex AI 会停止所有作业流程并清理资源。

自定义容器的优势

通过自定义容器,您可以指定和预安装应用所需的所有依赖项。

  • 启动时间更短。如果您使用预安装了依赖项的自定义容器,就可以在启动训练应用时节省安装依赖项所需的时间。
  • 使用您选择的机器学习框架。如果找不到包含您要使用的带有机器学习框架的 Vertex AI 预构建容器,您可以构建带有所选框架的自定义容器,并使用该容器在 Vertex AI 上运行作业。例如,您可以使用客户容器通过 PyTorch 进行训练。
  • 对分布式训练提供扩展支持。借助自定义容器,您可以使用任何机器学习框架进行分布式训练。
  • 使用最新版本。您还可以使用机器学习框架的最新版本或次要版本。例如,您可以构建一个自定义容器以使用 tf-nightly 执行训练。

使用自定义容器进行超参数调节

如需在 Vertex AI 上执行超参数调节,请指定目标指标,以及是要最大限度地降低还是提高此指标。例如,您可能希望最大限度地提高模型准确率,或最大限度地降低模型损失。您还列出了要调节的超参数,以及每个超参数的可接受值的范围。Vertex AI 会对训练应用进行多次试验,并在每次试验后跟踪并调整超参数。超参数调节作业完成后,Vertex AI 会报告最有效的超参数配置的值,以及每次试验的摘要信息。

如需使用自定义容器进行超参数调节,您需要进行以下调整:

  • 在 Dockerfile 中:安装 cloudml-hypertune
  • 在训练代码中:
    • 使用 cloudml-hypertune,以通过调用其辅助函数 report_hyperparameter_tuning_metric 来报告每次试验的结果。
    • 为每个超参数添加命令行参数,并使用参数解析器(如 argparse)处理参数解析。

了解如何配置使用自定义容器的超参数调节作业,或详细了解超参数调节在 Vertex AI 上的工作原理

自定义容器中的 GPU

如要使用 GPU 进行训练,您的自定义容器需要满足一些特殊要求。您必须构建与用于 CPU 训练的映像不同的 Docker 映像。

  • 在 Docker 映像中预安装 CUDA 工具包和 cuDNN。构建支持 GPU 的自定义容器的推荐方法是使用 nvidia/cuda 映像作为自定义容器的基础映像。nvidia/cuda 容器映像预安装了 CUDA 工具包和 cuDNN 匹配版本,并且有助于您正确设置相关的环境变量。
  • 在 Docker 映像中安装您的训练应用,以及所需的机器学习框架和其他依赖项。

请参阅 GPU 训练的 Dockerfile 示例

后续步骤