本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
Amazon SageMaker 如何提供训练信息
本节介绍 SageMaker 如何为您的 Docker 容器提供训练信息,如训练数据、超级参数和其他配置信息。
当你发送CreateTrainingJob
请求 SageMaker 启动模型训练时,您指定包含训练算法的 Docker 镜像的 Elastic Container Registry (Amazon ECR) 路径。您还指定存储训练数据的 Amazon Simple Storage Service (Amazon S3) 位置以及特定于算法的参数。SageMaker 为 Docker 容器提供此信息,以便您的训练算法可以使用它。本节介绍我们如何向您的 Docker 容器提供此信息。有关创建训练作业的信息,请参阅CreateTrainingJob
。有关 SageMaker 容器组织信息的更多信息,请参阅使用 SageMaker 训练和推理工具包 .
超参数
SageMaker 在CreateTrainingJob
在 Docker 容器中提供请求/opt/ml/input/config/hyperparameters.json
文件。
环境变量
在容器中设置以下环境变量:
-
TRAIN_JOB_NAME — 在
TrainingJobName
的参数CreateTrainingJob
请求. -
TRINATIN_JOB_ARN — 作为
TrainingJobArn
中的CreateTrainingJob
响应。 -
中指定的所有环境变量环境中的参数
CreateTrainingJob
请求.
输入数据配置
您在InputDataConfig
参数CreateTrainingJob
请求. SageMaker 在/opt/ml/input/config/inputdataconfig.json
文件在 Docker 容器中。
例如,假设您指定三个数据通道(train
、evaluation
, 和validation
) 在您的请求中。SageMaker 提供以下 JSON:
{ "train" : {"ContentType": "trainingContentType", "TrainingInputMode": "File", "S3DistributionType": "FullyReplicated", "RecordWrapperType": "None"}, "evaluation" : {"ContentType": "evalContentType", "TrainingInputMode": "File", "S3DistributionType": "FullyReplicated", "RecordWrapperType": "None"}, "validation" : {"TrainingInputMode": "File", "S3DistributionType": "FullyReplicated", "RecordWrapperType": "None"} }
只向 SageMaker 器提供每个数据通道的相关信息(例如,通道名称和内容类型),如下所示。S3DistributionType
将被设置为FullyReplicated
如果指定 EFS 或 fsxLustre 作为输入数据源。
训练数据
这些区域有:TrainingInputMode
中的参数AlgorithmSpecification
的CreateTrainingJob
请求指定了如何提供训练数据集。提供以下输入模式:
-
File
模式-
TrainingInputMode
写入到的参数inputdataconfig.json
:“文件” -
Docker 容器中的数据通道目录:
/opt/ml/input/data/
channel_name
-
支持的数据源:Amazon Simple Storage Service (Amazon S3)、Amazon EFS 和 Amazon FSx for Lustre
为每个通道创建一个目录。例如,如果您有三个频道
training
、validation
, 和testing
,SageMaker 在 Docker 容器中创建了三个目录:-
/opt/ml/input/data/training
-
/opt/ml/input/data/validation
-
/opt/ml/input/data/testing
注意 使用 Amazon EFS 和 Amazon FSx 等文件系统数据源的通道必须使用
File
模式。如果指定了文件系统,则通道中提供的目录路径将挂载在/opt/ml/input/data/channel_name
中。 -
-
FastFile
模式-
TrainingInputMode
写入到的参数inputdataconfig.json
:“快速文件” -
Docker 容器中的数据通道目录:
/opt/ml/input/data/
channel_name
-
支持的数据源:Amazon S3
通道目录以只读方式挂载。
支持的算法
File
模式可以无缝协作FastFile
没有代码更改的模式。注意 使用的频道
FastFile
模式必须使用S3DataType
的 “S3Preix”。FastFile
模式显示了一个使用正斜杠的文件夹视图 (/
) 作为将 Amazon S3 对象分组到文件夹中的分隔符。S3Uri
前缀不能与部分文件夹名称对应。例如,如果 Amazon S3 数据集包含s3://my-bucket/train-01/data.csv
,那么都没有s3://my-bucket/train
也不s3://my-bucket/train-01
允许S3Uri
前缀。建议使用尾随的正斜杠来定义与文件夹对应的频道。例如,
s3://my-bucket/train-01/
的频道train-01
folder。如果没有尾随的正斜杠,如果存在另一个文件夹,该频道将会模糊不清s3://my-bucket/train-011/
或者文件s3://my-bucket/train-01.txt/
. -
-
Pipe
模式-
TrainingInputMode
写入到的参数inputdataconfig.json
:“管道” -
Docker 容器中的数据通道目录:
/opt/ml/input/data/
channel_name_epoch_number
-
支持的数据源:Amazon S3
你需要为每个频道从单独的管道中读取。例如,如果您有三个频道
training
、validation
, 和testing
,你需要从以下管道中读取:-
/opt/ml/input/data/training_0, /opt/ml/input/data/training_1, ...
-
/opt/ml/input/data/validation_0, /opt/ml/input/data/validation_1, ...
-
/opt/ml/input/data/testing_0, /opt/ml/input/data/testing_1, ...
按顺序读取管道。例如,如果您有一个名为
training
的通道,请按以下顺序读取管道:-
打开
/opt/ml/input/data/training_0
在读取模式下,并将其读取到文件末尾 (EOF);如果完成第一个纪元,则尽早关闭该管道文件。 -
关闭第一个管道文件后,请查找
/opt/ml/input/data/training_1
并读取它,直到您完成第二个纪元,以此类推。
如果给定纪元的文件尚不存在,您的代码可能需要重试,直到创建该管道。例如,你可以阅读多个纪元
training
频道只能开始阅读validation
准备好时频道。或者,如果算法要求,您可以同时读取它们。有关演示如何在自带容器时使用 Pipe 模式的 Jupyter 笔记本的示例,请参阅将自己的管道模式算法带给 Amazon SageMaker
. -
分布式训练配置
如果您使用多个容器执行分布式训练,SageMaker 会在/opt/ml/input/config/resourceconfig.json
文件。
要启用容器间通信,此 JSON 文件应包含所有容器的信息。SageMaker 使此文件可用于两者File
和Pipe
模式算法。该文件提供以下信息:
-
current_host
— 容器网络中的当前容器的名称。例如:algo-1
。您可以随时更改主机值。不要使用此变量的特定值编写代码。 -
hosts
容器网络中的所有容器的名称列表,按字典顺序排列。例如,["algo-1", "algo-2", "algo-3"]
用于三节点集群。容器可以使用这些名称来查找容器网络上的其他容器。您可以随时更改主机值。不要使用这些变量的特定值编写代码。 -
network_interface_name
— 向您的容器公开的网络接口的名称。例如,运行消息传递接口 (MPI) 的容器可以使用该信息设置网络接口名称。 -
请勿使用
/etc/hostname
或/etc/hosts
中的信息,因为可能不准确。 -
算法容器可能无法立即获得主机名信息。我们建议当节点在集群中可用时,在主机名解析操作上添加重试策略。
下面是三节点集群的节点 1 上的示例文件:
{ "current_host": "algo-1", "hosts": ["algo-1","algo-2","algo-3"], "network_interface_name":"eth1" }