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

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

SageMaker 托管的暖池

SageMaker 托管的温池允许您在训练作业完成后保留和重复使用预配置的基础架构,以减少重复性工作负载(例如迭代实验或连续运行许多作业)的延迟。与指定参数匹配的后续训练作业在保留的暖池基础设施上运行,这将减少预置资源所花费的时间,从而加快启动速度。

重要

SageMaker 托管的温池是一种可计费的资源。有关更多信息,请参阅 Billing

工作方式

要使用 SageMaker 托管的温池并减少相似的连续训练作业之间的延迟,请创建一个在其中指定KeepAlivePeriodInSeconds值的训练作业ResourceConfig。此值表示将配置的资源保留在暖池中以供后续训练作业使用的持续时间(以秒为单位)。如果您需要使用相似的配置运行多个训练作业,则可使用专用的持久性缓存目录在不同的作业中存储和重用您的信息,来进一步减少延迟和计费时间。

暖池生命周期

  1. 创建一个 KeepAlivePeriodInSeconds 值大于 0 的初始训练作业。在运行此第一个训练作业时,将“冷启动”具有典型启动时间的集群。

  2. 第一个训练作业完成后,在 KeepAlivePeriodInSeconds 值中指定的时间段内,预置的资源将在暖池中保持活动状态。只要集群正常运行且暖池在指定的 KeepAlivePeriodInSeconds 内,暖池状态就会为 Available

  3. 暖池一直保持 Available 状态,直到它识别出匹配的训练作业以供重用,或者它超出指定的 KeepAlivePeriodInSeconds 且被终止。允许的 KeepAlivePeriodInSeconds 的最长时间为 3600 秒(60 分钟)。如果暖池状态为 Terminated,则暖池生命周期已结束。

  4. 如果暖池识别第二个具有匹配规格(例如,实例数或实例类型)的训练作业,则暖池将从第一个训练作业移至第二个训练作业以供重用。第一个训练作业暖池的状态将变为 Reused。这表示第一个训练作业的暖池生命周期结束。

  5. 已重用暖池的第二个训练作业的状态将变为 InUse。第二个训练作业完成后,在第二个训练作业中指定的 KeepAlivePeriodInSeconds 持续时间内,暖池为 Available。暖池最多可在 28 天内继续移至后续的匹配训练作业。

  6. 如果暖池不再可供重用,则暖池的状态将变为 Terminated。在以下情况下,暖池不再可用:由用户终止、为了进行补丁更新或超出指定的 KeepAlivePeriodInSeconds

有关温池状态选项的更多信息,请参阅 Amazon SageMaker API 参考WarmPoolStatus中的。

暖池创建

如果初始训练作业成功完成且其 KeepAlivePeriodInSeconds 值大于 0,则将创建一个暖池。如果您在集群启动后停止训练作业,则仍将保留暖池。如果训练作业因算法或客户端错误而失败,则仍将保留暖池。如果训练作业因任何其他可能损害集群运行状况的原因而失败,则不会创建暖池。

要验证是否已成功创建暖池,请检查训练作业的暖池状态。如果已成功预置暖池,则暖池状态为 Available。如果未能预置暖池,则暖池状态为 Terminated

匹配的训练作业

为了让暖池持续存在,必须在 KeepAlivePeriodInSeconds 值中指定的时间内找到匹配的训练作业。如果以下值相同,则下一个训练作业是匹配项:

  • RoleArn

  • ResourceConfig 值:

    • InstanceCount

    • InstanceType

    • VolumeKmsKeyId

    • VolumeSizeInGB

  • VpcConfig 值:

    • SecurityGroupIds

    • Subnets

  • EnableInterContainerTrafficEncryption

  • EnableNetworkIsolation

  • 如果您为训练作业传递的会话标签在训练作业TrueEnableSessionTagChaining设置为SessionChainingConfig,则匹配的训练作业也必须设置EnableSessionTagChainingTrue并且具有相同的会话密钥。有关更多信息,请参阅 使用基于属性的访问控制 (ABAC) 进行多租户培训

所有这些值都必须相同,暖池才能移至后续训练作业以供重用。

最长暖池持续时间

单个训练作业的最大 KeepAlivePeriodInSeconds 为 3600 秒(60 分钟),暖池集群可以继续运行连续训练作业的最长时间为 28 天。

后续的每个训练作业还必须指定一个 KeepAlivePeriodInSeconds 值。当暖池移至下一个训练作业时,它会继承该训练作业的 ResourceConfig 中指定的新 KeepAlivePeriodInSeconds 值。这样一来,您可以在最长 28 天内将暖池从一个训练作业移至另一个训练作业。

如果未指定 KeepAlivePeriodInSeconds,则训练作业完成后,暖池将结束。

使用持久性缓存

创建温池时,会在卷上 SageMaker 挂载一个特殊目录,该目录将在温池的整个生命周期中持续存在。该目录还可用于存储要在其他作业中重用的信息。

对于需要以下项的作业,与单独使用暖池相比,使用持久性缓存可以减少延迟和计费时间:

  • 使用相似配置进行多次交互

  • 增量训练作业

  • 超参数优化

例如,通过在持久性缓存目录中设置 pip 缓存目录,可以避免在重复运行时下载相同的 Python 依赖项。您完全负责管理该目录的内容。以下是可放入持久性缓存中以便减少延迟和计费时间的信息类型示例。

  • 由 pip 管理的依赖项。

  • 由 conda 管理的依赖项。

  • 检查点信息

  • 训练期间生成的任何其他信息。

持久性缓存的位置是 /opt/ml/sagemaker/warmpoolcache。环境变量 SAGEMAKER_MANAGED_WARMPOOL_CACHE_DIRECTORY 指向持久性缓存目录的位置。

以下代码示例说明如何设置暖池并使用持久性缓存来存储 pip 依赖项以供后续作业使用。后续作业必须在参数 keep_alive_period_in_seconds 给定的时间范围内运行。

import sagemakerfrom sagemaker import get_execution_rolefrom sagemaker.tensorflow import TensorFlow # Creates a SageMaker session and gets execution role session = sagemaker.Session() role = get_execution_role() # Creates an example estimator estimator = TensorFlow( ... entry_point='my-training-script.py', source_dir='code', role=role, model_dir='model_dir', framework_version='2.2', py_version='py37', job_name='my-training-job-1', instance_type='ml.g4dn.xlarge', instance_count=1, volume_size=250, hyperparameters={ "batch-size": 512, "epochs": 1, "learning-rate": 1e-3, "beta_1": 0.9, "beta_2": 0.999, }, keep_alive_period_in_seconds=1800, environment={"PIP_CACHE_DIR": "/opt/ml/sagemaker/warmpoolcache/pip"} )

在上一个代码示例中,使用环境参数导出环境变量 PIP_CACHE_DIRECTORY 以指向目录 /opt/ml/sagemaker/warmpoolcache/pip。导出此环境变量会将 pip 存储其缓存的位置更改为新位置。您在持久性缓存目录中创建的任何目录(包括嵌套目录)都可在后续训练运行中重用。在上一个代码示例中,名为 pip 的目录已更改为默认位置,以缓存使用 pip 安装的所有依赖项。

也可以使用环境变量从 Python 训练脚本中访问持久性缓存位置,如以下代码示例所示。

import os import shutil if __name__ == '__main__': PERSISTED_DIR = os.environ["SAGEMAKER_MANAGED_WARMPOOL_CACHE_DIRECTORY"] # create a file to be persisted open(os.path.join(PERSISTED_DIR, "test.txt"), 'a').close() # create a directory to be persisted os.mkdir(os.path.join(PERSISTED_DIR, "test_dir")) # Move a file to be persisted shutil.move("path/of/your/file.txt", PERSISTED_DIR)

Billing

SageMaker 托管的温池是一种可计费的资源。检索训练作业的暖池状态以查看暖池的计费时间。您可以通过使用亚马逊 SageMaker控制台或直接通过DescribeTrainingJobAPI命令检查温池状态。有关更多信息,请参阅 Amazon SageMaker API 参考WarmPoolStatus中的。

注意

在参数 KeepAlivePeriodInSeconds 指定的时间结束后,暖池和持久性缓存将关闭,并且内容将被删除。

注意事项

使用 SageMaker 托管温池时,请考虑以下事项。

  • SageMaker 托管的温池不能用于异构集群训练。

  • SageMaker 托管的温池不能用于竞价型实例。

  • SageMaker 托管的温池的KeepAlivePeriodInSeconds值限制为 3600 秒(60 分钟)。

  • 如果暖池继续成功匹配指定 KeepAlivePeriodInSeconds 值内的训练作业,则集群最多只能继续运行 28 天。