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

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

在 Amazon SageMaker 中使用检查点

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

SageMaker 培训机制使用 Amazon EC2 实例上的训练容器,检查点文件保存在容器的本地目录下。SageMaker 提供了将检查点从本地路径复制到 Amazon S3 的功能。使用检查点,您可以执行以下操作:

  • 由于训练作业或实例意外中断,请在训练中保存模型快照。

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

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

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

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

SageMaker 中框架和算法的检查点

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

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

SageMaker 支持 Deep Learning Containers 的检查点和内置算法的子集,而无需更改训练脚本。SageMaker 将检查点保存到默认的本地路径'/opt/ml/checkpoints'并将它们复制到 Amazon S3。

  • Deep Learning Containers:TensorFlowPyTorchMXNet, 和HuggingFace

    注意

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

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

    注意

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

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

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

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

启用检查点

启用检查点后,SageMaker 将检查点保存到 Amazon S3,并将训练作业与检查点 S3 存储桶同步。


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

以下示例演示在构建 SageMaker 估计程序时如何配置检查点路径。要启用检查点,请添加checkpoint_s3_uricheckpoint_local_path估计器的参数。

以下示例模板演示如何创建通用 SageMaker 估计程序并启用检查点。您可以将此模板用于支持的算法,方法是指定image_uri参数。要查找 SageMaker 支持检查点的算法的 Docker 图像 URI,请参阅Docker 注册表路径和示例代码. 您还可以更换estimatorEstimator与其他 SageMaker 框架的估计器父类和估计器类一起使用,例如TensorFlowPyTorchMXNetHuggingFaceXGBoost.

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'.

    注意

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

  • checkpoint_s3_uri— 实时存储检查点的 S3 存储桶的 URI。

要查找 SageMaker 估计器参数的完整列表,请参阅估计器 API中的Amazon SageMaker Python 开发工具包文档.

浏览检查点文件

使用 SageMaker Python SDK 和 Amazon S3 控制台查找检查点文件。

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

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

estimator.checkpoint_s3_uri

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

从 Amazon S3 控制台查找检查点文件

  1. 登录到Amazon Web Services Management Console在处打开 SageMaker 控制台https://console.aws.amazon.com/sagemaker/.

  2. 在左侧导航窗格中,选择训练任务.

  3. 选择启用检查点的训练作业的链接以打开Job 设置.

  4. 在存储库的Job 设置培训作业的页面,找到检查点配置部分。

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

从检查点恢复训练

要从检查点恢复训练作业,请使用相同的checkpoint_s3_uri你在启用检查点部分。训练恢复后,此 S3 存储桶中的检查点将恢复到checkpoint_local_path在新培训工作的每个实例中。确保 S3 存储桶与当前 SageMaker 会话位于同一区域。


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

检查点的注意事项

在 SageMaker 中使用检查点时注意以下事项。

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

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

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