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

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

使用 Amazon SageMaker 中的检查点

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

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

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

  • 将来从检查点继续训练模型。

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

  • 将检查点与SageMaker托管的 Spot 训练结合使用可节省训练成本。

如果您将检查点用于SageMaker托管的 Spot 网关, 将SageMaker管理在 Spot 实例上对模型训练执行检查点操作并在下一个 Spot 实例上恢复训练作业。通过SageMaker托管的 Spot 训练,您可以显著减少训练 ML 模型的计费时间。有关更多信息,请参阅 中的托管的 Spot 训练Amazon SageMaker

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

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

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

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

如果在托管的 Spot 训练作业中使用不支持检查点的预构建算法SageMaker,则 不会为作业留出超过 1 小时的最大等待时间,以限制中断浪费的训练时间。

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

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

启用检查点

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


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

以下示例说明如何在构建SageMaker评估程序时配置检查点路径。要启用检查点操作,请将 checkpoint_s3_uricheckpoint_local_path 参数添加到您的评估程序。

以下示例模板演示如何创建通用 SageMaker 评估程序并启用检查点。您可以通过指定 image_uri 参数将此模板用于支持的算法。要查找支持检查点操作的算法的 Docker 映像 URIsSageMaker请参阅SageMaker 内置算法的 Docker 注册表路径。您还可以将 estimatorEstimator 替换为其他SageMaker框架的评估程序的父类和评估程序类,例如 TensorFlowPyTorchMXNetXGBoost

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评估程序的 SageMaker 参数。

  • checkpoint_s3_uri – S3 存储桶的 URI,其中检查点是实时存储的。

要查找SageMaker评估程序参数的完整列表,请参阅 文档中的https://sagemaker.readthedocs.io/en/stable/api/training/estimators.html#sagemaker.estimator.Estimator评估程序 Amazon SageMaker Python SDK API。

浏览检查点文件

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

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

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

estimator.checkpoint_s3_uri

这将返回在请求 Amazon S3CreateTrainingJob 请求时配置的检查点的输出路径。要使用 Amazon S3 控制台查找保存的检查点文件,请使用以下过程。

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

  1. 通过以下网址登录 AWS 管理控制台并打开 SageMaker 控制台:https://console.amazonaws.cn/sagemaker/

  2. 在左侧导航窗格中,选择 Training jobs (训练作业)。

  3. 选择指向已启用检查点的训练作业的链接以打开 Job settings (作业设置)。

  4. 在训练作业的 Job settings (作业设置) 页面中,找到 Checkpoint configuration (检查点配置) 部分。

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

从检查点恢复训练

要从检查点恢复训练作业,请使用checkpoint_s3_uri启用检查点 部分中创建的相同 运行新的评估程序。恢复训练后,来自此 S3 存储桶的检查点将还原到新训练作业checkpoint_local_path的每个实例中的 。确保 S3 存储桶位于与当前SageMaker会话的存储桶相同的区域中。


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

检查点的注意事项

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

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

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