使用 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 管理的现场培训,您可以显著缩短培训 ML 模型的计费时间。有关更多信息,请参阅 亚马逊 SageMaker 中的托管的 Spot 训练

SageMaker 中的框架和算法检查点

使用检查点保存在 SageMaker 中首选框架上构建的 ML 模型的快照。

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

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

  • Deep Learning Containers:TensorFlowPyTorchMXNet, 和拥抱的脸

    注意

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

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

    注意

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

如果在托管的点训练作业中使用了不支持检查点的预构建算法,则 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_path参数。

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

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

浏览检查点文件

使用 SageMaker Python 软件开发工具包和 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 分布式结合使用,并且面临问题,请参阅以下页面以了解故障排除和注意事项。