使用 Amazon SageMaker 训练存储路径来存储训练数据集、检查点、模型构件和输出
本页简要概述了 SageMaker 训练平台如何管理训练数据集、模型构件、检查点以及 SageMaker 中 Amazon 云存储与训练作业之间输出的存储路径。在本指南中,您将学习如何识别 SageMaker 平台设置的默认路径,以及如何使用 Amazon Simple Storage Service (Amazon S3)、适用于 Lustre 的 FSx 和 Amazon EFS 中的数据来源简化数据通道。有关各种数据通道的输入模式和存储选项的更多信息,请参阅访问训练数据。
概述
下图显示在使用 SageMaker Python SDK Estimator
您可以在 CreateTrainingJob API 中使用 OutputDataConfig
来查找 S3 存储桶的位置。使用 ModelArtifacts API 查找包含您的模型构件的 S3 位置。有关输出路径以及如何在 API 调用中使用输出路径的示例,请参阅 abalone_build_train_deploy
有关 SageMaker 如何管理 SageMaker 训练实例中的数据来源、输入模式和本地路径的更多信息和示例,请参阅访问训练数据。
未压缩的模型输出
SageMaker 将您的模型存储在 /opt/ml/model
中,将数据存储在 /opt/ml/output/data
中。将模型和数据写入这些位置后,默认情况下,它们会作为压缩文件上传到您的 Amazon S3 存储桶。
您可以将模型和数据输出作为未压缩文件上传到 S3 存储桶,从而节约压缩大型数据文件的时间。为此,请使用 Amazon Command Line Interface (Amazon CLI) 或 SageMaker Python SDK 在未压缩的上传模式下创建训练作业。
以下代码示例显示如何在使用 Amazon CLI 时,在未压缩上传模式下创建训练作业。要启用未压缩上传模式,请将 OutputDataConfig
API 中的 CompressionType
字段设置为 NONE
。
{ "TrainingJobName": "
uncompressed_model_upload
", ... "OutputDataConfig": { "S3OutputPath": "s3://DOC-EXAMPLE-BUCKET
/uncompressed_upload/output
", "CompressionType": "NONE" }, ... }
以下代码示例显示如何在使用 SageMaker Python SDK 时,在未压缩上传模式下创建训练作业。
import sagemaker from sagemaker.estimator import Estimator estimator = Estimator( image_uri="
your-own-image-uri
", role=sagemaker.get_execution_role(), sagemaker_session=sagemaker.Session(), instance_count=1, instance_type='ml.c4.xlarge
', disable_output_compression=True )
设置存储路径的提示和注意事项
在 SageMaker 中为训练作业设置存储路径时,请考虑以下问题。
-
如果要将分布式训练的训练构件存储在
/opt/ml/output/data
目录中,则必须通过模型定义或训练脚本正确地追加子目录或者为这些构件使用唯一的文件名。如果未正确配置子目录和文件名,则所有分布式训练工件可能都会在 Amazon S3 中将输出写入相同输出路径下的相同文件名。 -
如果您使用自定义训练容器,请确保安装 SageMaker 训练工具包
,以帮助为 SageMaker 训练作业设置环境。否则,您必须在 Dockerfile 中明确指定环境变量。有关更多信息,请参阅使用自己的算法和模型创建容器。 -
使用配有 NVMe SSD 卷的机器学习实例时,SageMaker 不会预置 Amazon EBS gp2 存储。可用存储就是 NVMe 类型实例的固定存储容量。SageMaker 为训练数据集、检查点、模型构件和输出配置存储路径,以使用实例存储的全部容量。例如,具有 NVMe 类型实例存储的机器学习实例系列包括
ml.p4d
、ml.g4dn
和ml.g5
。在使用带有仅限 EBS 存储选项且不带实例存储的机器学习实例时,必须通过 SageMaker 估算器类中的volume_size
参数定义 EBS 卷的大小(如果您使用的是ResourceConfig
API,则使用VolumeSizeInGB
)。例如,使用 EBS 卷的机器学习实例系列包括ml.c5
和ml.p2
。要查找实例类型及其实例存储类型和卷,请参阅 Amazon EC2 实例类型。 -
SageMaker 训练作业的默认路径挂载到机器学习实例的 Amazon EBS 卷或 NVMe SSD 卷。在调整训练脚本以适应 SageMaker 时,请确保使用关于SageMaker 环境变量和训练存储位置的默认路径的前一主题中列出的默认路径。我们建议您将
/tmp
目录用作暂存空间,以便在训练期间临时存储任何大型对象。这意味着不得使用挂载到为系统分配的小磁盘空间的目录(例如/user
和/home
),以避免发生空间不足的错误。
要了解更多信息,请参阅 Amazon 机器学习博客为您的 Amazon SageMaker 训练作业选择最佳数据来源
SageMaker 环境变量和训练存储位置的默认路径
下表汇总了由 SageMaker 训练平台管理的训练数据集、检查点、模型构件和输出的输入和输出路径。
SageMaker 训练实例中的本地路径 | SageMaker 环境变量 | 目的 | 在启动期间从 S3 读取 | 在竞价型重启期间从 S3 读取 | 训练期间写入 S3 | 作业终止时写入 S3 |
---|---|---|---|---|---|---|
|
SM_CHANNEL_ |
从通过 SageMaker Python SDK Estimator |
是 | 是 | 否 | 否 |
|
SM_OUTPUT_DIR |
保存输出,例如损耗、精度、中间层、权重、梯度、偏差和兼容 TensorBoard 的输出。您也可以使用此路径保存所有您想要的任意输出。请注意,这与存储最终模型构件的路径 |
否 | 否 | 否 | 是 |
|
SM_MODEL_DIR |
存储最终的模型构件。这也是从中部署模型构件、以便在 SageMaker Hosting 中进行实时推理的路径。 |
否 | 否 | 否 | 是 |
|
- |
保存模型检查点(模型状态)以便从某个点恢复训练,并且能够从意外或托管竞价型训练中断中恢复。 |
是 | 是 | 是 | 否 |
|
SAGEMAKER_SUBMIT_DIRECTORY |
复制训练脚本、其他库和依赖项。 |
是 | 是 | 否 | 否 |
|
- |
读取或写入 |
否 | 否 | 否 | 否 |
1 channel_name
是为训练数据输入指定用户定义通道名称的地方。每个训练作业可以包含多个数据输入通道。您最多可以为每个训练作业指定 20 个训练输入通道。请注意,从数据通道下载数据的时间计入计费时间。有关数据输入路径的更多信息,请参阅 Amazon SageMaker 如何提供训练信息。此外,SageMaker 支持三种类型的数据输入模式:文件模式、快速文件模式和管道模式。要详细了解在 SageMaker 中训练时的数据输入模式,请参阅访问训练数据。
2 SageMaker 压缩训练构件并将其写入 TAR 文件 (tar.gz
)。压缩和上传的时间计入计费时间。有关更多信息,请参阅 Amazon SageMaker 如何处理训练输出。
3 SageMaker 将最终的模型构件压缩并写入 TAR 文件 (tar.gz
)。压缩和上传的时间计入计费时间。有关更多信息,请参阅 Amazon SageMaker 如何处理训练输出。
4 在训练期间与 Amazon S3 同步。按原样写入,而不压缩为 TAR 文件。有关更多信息,请参阅在 Amazon SageMaker 中使用检查点。