在 Amazon 中使用检查点 SageMaker - Amazon SageMaker
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

在 Amazon 中使用检查点 SageMaker

在训练期间,使用 Amazon SageMaker 中的检查点保存机器学习 (ML) 模型的状态。检查点是模型的快照,可以通过机器学习框架的回调函数进行配置。您可以使用保存的检查点,根据上次保存的检查点重新启动训练作业。

通过使用检查点,可执行以下操作:

  • 当训练作业或实例意外中断时,保存训练中模型的快照。

  • 将来从检查点恢复模型训练。

  • 在训练的中间阶段分析模型。

  • 在 S3 Express One 区域中使用检查点以提高访问速度。

  • 将检查点与 SageMaker 托管现场训练结合使用,以节省训练成本。

SageMaker 训练机制在 Amazon EC2 实例上使用训练容器,检查点文件保存在容器的本地目录下(默认为/opt/ml/checkpoints)。 SageMaker 提供了将检查点从本地路径复制到 Amazon S3 并自动将该目录中的检查点与 S3 同步的功能。S3 中的现有检查点会在作业开始时写入 SageMaker容器,从而使作业能够从检查点恢复。任务启动后添加到 S3 文件夹的检查点不会复制到训练容器中。 SageMaker 还会在训练期间将新的检查点从容器写入 S3。如果在 SageMaker 容器中删除了某个检查点,它也将在 S3 文件夹中删除。

您可以将亚马逊中的检查点 SageMaker 与 Amazon S3 Express One 区域存储类别(S3 Express One 区域)配合使用,以便更快地访问检查点。启用检查点操作并为检查点存储目标指定 S3 URI 时,您可以为 S3 通用存储桶或 S3 目录存储桶中的文件夹提供 S3 URI。有关 S3 Express One 区域和 S3 目录存储桶的更多信息,请参阅什么是 S3 Express One 区域

如果您在 SageMaker 托管竞价训练中使用检查点,请 SageMaker 管理在竞价实例上检查您的模型训练,并在下一个竞价实例上恢复训练作业。借助 SageMaker 托管现场训练,您可以显著缩短训练 ML 模型的计费时间。有关更多信息,请参阅 在 Amazon 中使用托管竞技训练 SageMaker

中的框架和算法的检查点 SageMaker

使用检查点将基于您的首选框架构建的机器学习模型的快照保存在其中 SageMaker。

SageMaker 支持检查点的框架和算法

SageMaker 支持 Dee Amazon p Learning Containers 和一部分内置算法的检查点功能,无需更改训练脚本。 SageMaker 将检查点保存到默认本地路径'/opt/ml/checkpoints'并将其复制到 Amazon S3。

  • Deep Learning Containers:TensorFlowPyTorch、、mxNet 和 HuggingFace

    注意

    如果您使用的是 HuggingFace 框架估算器,则需要通过超参数指定检查点输出路径。有关更多信息,请参阅HuggingFace文档 SageMaker中的在 Amazon 上运行训练

  • 内置算法:图像分类对象检测语义分割XGBoost(0.90-1 或更高版本)

    注意

    如果您在框架模式(脚本模式)下使用 XGBoost 算法,则需要带有手动配置检查点的 XGBoost 训练脚本。有关使用 XGBoost 训练方法时保存模型快照的更多信息,请参阅 XGBoost Python SDK 文档中的训练 XGBoost

如果在托管点训练作业中使用了不支持检查点的预建算法,则 SageMaker 不允许该作业的最长等待时间超过一小时,以限制因中断而浪费的训练时间。

用于自定义训练容器和其他框架

如果您使用的是自己的训练容器、训练脚本或其他未在上一节中列出的框架,则必须使用回调或训练 API 正确设置训练脚本,以便将检查点保存到本地路径 ('/opt/ml/checkpoints') 并从训练脚本中的本地路径加载。 SageMaker 估算器可以与本地路径同步,并将检查点保存到 Amazon S3。

启用检查点功能

启用检查点功能后, SageMaker 将检查点保存到 Amazon S3,并将您的训练作业与检查点 S3 存储桶同步。您可以将 S3 通用存储桶或 S3 目录存储桶用于检查点 S3 存储桶。

训练期间写入检查点的架构图。

以下示例说明如何在构造 SageMaker 估算器时配置检查点路径。要启用检查点,将 checkpoint_s3_uricheckpoint_local_path 参数添加到估算器。

以下示例模板展示了如何创建通用 SageMaker 估算器并启用检查点功能。通过指定 image_uri 参数,可以将此模板用于支持的算法。要查找支持检查点的算法的 Docker 镜像 URI SageMaker,请参阅 Docker 注册表路径和示例代码。您也可以Estimator用其他 SageMaker 框架的估计器父类和估计器类替换estimator和,例如、、和。TensorFlow PyTorch MXNet HuggingFace XGBoost

import sagemaker from sagemaker.estimator import Estimator bucket=sagemaker.Session().default_bucket() base_job_name="sagemaker-checkpoint-test" checkpoint_in_bucket="checkpoints" # The S3 URI to store the checkpoints checkpoint_s3_bucket="s3://{}/{}/{}".format(bucket, base_job_name, checkpoint_in_bucket) # The local path where the model will save its checkpoints in the training container checkpoint_local_path="/opt/ml/checkpoints" estimator = Estimator( ... image_uri="<ecr_path>/<algorithm-name>:<tag>" # Specify to use built-in algorithms output_path=bucket, base_job_name=base_job_name, # Parameters required to enable checkpointing checkpoint_s3_uri=checkpoint_s3_bucket, checkpoint_local_path=checkpoint_local_path )

以下两个参数指定检查点的路径:

  • checkpoint_local_path – 指定模型定期在训练容器中保存检查点的本地路径。默认路径设置为 '/opt/ml/checkpoints'。如果您使用的是其他框架或自带训练容器,请确保训练脚本的检查点配置指定 '/opt/ml/checkpoints' 路径。

    注意

    我们建议指定与默认 SageMaker 检查点设置一致的本地路径。'/opt/ml/checkpoints'如果您更喜欢指定自己的本地路径,请确保与训练脚本中的检查点保存路径和 SageMaker估算器的checkpoint_local_path参数相匹配。

  • checkpoint_s3_uri – 实时存储检查点的 S3 存储桶的 URI。您可以指定 S3 通用存储桶或 S3 目录存储桶来存储您的检查点。有关 S3 目录存储桶的更多信息,请参阅 A mazon 简单存储服务用户指南中的目录存储

要查找 SageMaker 估算器参数的完整列表,请参阅 Amaz on Python SageMaker SD K 文档中的估算器 API。

浏览检查点文件

使用 SageMaker Python 软件开发工具包和 Amazon S3 控制台查找检查点文件。

以编程方式查找检查点文件

要检索其中保存检查点的 S3 存储桶 URI,请检查以下估算器属性:

estimator.checkpoint_s3_uri

这将返回请求时配置的检查点的 S3 输出路径。CreateTrainingJob要使用 S3 控制台查找保存的检查点文件,请按以下步骤操作。

从 S3 控制台中查找检查点文件
  1. 登录 Amazon Web Services Management Console 并打开 SageMaker 控制台,网址为 https://console.aws.amazon.com/sagemaker/

  2. 在左侧导航窗格中,选择训练作业

  3. 选择指向已启用检查点功能的训练作业的链接,以打开作业设置

  4. 在训练作业的作业设置页面上,找到检查点配置部分。

    训练作业的“作业设置”页面中的“检查点配置”部分。
  5. 使用指向 S3 存储桶的链接访问检查点文件。

从检查点恢复训练

要从检查点恢复训练作业,请使用您在启用检查点功能部分创建的相同 checkpoint_s3_uri 运行新的估算器。在训练恢复后,该 S3 存储桶中的检查点将恢复到新训练作业的每个实例的 checkpoint_local_path。确保 S3 存储桶与当前 SageMaker 会话所在的区域相同。

同步检查点以恢复训练的架构图。

GPU 错误的集群修复

如果您正在运行的训练作业在 GPU 上失败,则 SageMaker 将运行 GPU 运行状况检查以查看故障是否与 GPU 问题有关。 SageMaker 根据运行状况检查结果采取以下操作:

  • 如果错误可以恢复,并且可以通过重启实例或重置 GPU 来修复,则 SageMaker 将重启实例。

  • 如果错误不可恢复,并且是由需要更换的 GPU 引起的,则 SageMaker 将替换实例。

作为 SageMaker 集群修复过程的一部分,实例要么被替换,要么重新启动。在此过程中,您将在训练作业状态中看到以下消息:

Repairing training cluster due to hardware failure

SageMaker 将尝试修复群集多达10几次。如果集群修复成功, SageMaker 将自动从上一个检查点重新启动训练作业。如果集群修复失败,训练作业也将失败。您无需为集群修复过程付费。除非您的训练作业失败,否则集群修复不会启动。如果在 warmpool 集群中检测到 GPU 问题,则该集群将进入修复模式以重启或更换故障实例。修复后,该集群仍可用作 warmpool 集群。

前面描述的集群和实例修复过程如下图所示:

The cluster repair process checks for training errors and attempts to fix them if they are caused by a GPU.

检查点操作的注意事项

在中使用检查点时,请考虑以下几点 SageMaker。

  • 为避免在使用多个实例的分布式训练中发生覆盖,必须在训练脚本中手动配置检查点文件名和路径。高级 SageMaker 检查点配置指定单个 Amazon S3 位置,不使用额外的后缀或前缀来标记来自多个实例的检查点。

  • SageMaker Python SDK 不支持检查点频率的高级配置。要控制检查点频率,请使用框架的模型保存功能或检查点回调来修改训练脚本。

  • 如果您在 SageMaker 调试器和 SageMaker 分布式中使用 SageMaker 检查点并遇到问题,请参阅以下页面以了解故障排除和注意事项。