本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
Amazon SageMaker AI 如何提供培训信息
本节介绍了 SageMaker AI 如何将训练信息(例如训练数据、超参数和其他配置信息)提供给 Docker 容器。
当您向 A SageMaker I 发送启动模型训练的CreateTrainingJob请求时,您可以指定包含训练算法的 Docker 镜像的亚马逊弹性容器注册表 (Amazon ECR) Container Registry 路径。您还可以指定存储训练数据的亚马逊简单存储服务 (Amazon S3) 位置以及特定于算法的参数。 SageMaker AI 将这些信息提供给 Docker 容器,以便您的训练算法可以使用这些信息。本节介绍我们如何向您的 Docker 容器提供此信息。有关创建训练作业的信息,请参阅CreateTrainingJob。有关 SageMaker AI 容器组织信息的方式的更多信息,请参阅SageMaker 训练和推理工具包。
超参数
SageMaker AI 使CreateTrainingJob请求中的超参数在文件的 Docker 容器中/opt/ml/input/config/hyperparameters.json可用。
以下是中用于在CreateTrainingJob操作中hyperparameters.json指定num_round和超参数的eta超参数配置示例。XGBoost
{ "num_round": "128", "eta": "0.001" }
有关可用于 SageMaker AI 内置 XGBoost 算法的超参数的完整列表,请参阅XGBoost超参数。
您可以调整的超参数取决于所训练的算法。有关可用于 AI 内置算法的超参数列表,请在使用 A ma SageMaker zon SageMaker AI 内置算法或预训练模型中的算法链接下的超参数中找到这些超参数。
环境变量
SageMaker AI 在您的容器中设置以下环境变量:
-
TRAINING_JOB_NAME – 在
CreateTrainingJob请求中指定TrainingJobName参数。 -
TRAINING_JOB_ARN – 作为
CreateTrainingJob响应中的TrainingJobArn返回的训练作业的 Amazon 资源名称 (ARN)。 -
在
CreateTrainingJob请求的 Environment 参数中指定的所有环境变量。
输入数据配置
SageMaker AI 使CreateTrainingJob请求中InputDataConfig参数中的数据通道信息在 Docker 容器的/opt/ml/input/config/inputdataconfig.json文件中可用。
例如,假设您在请求中指定了三个数据通道(trainevaluation、和validation)。 SageMaker AI 提供了以下 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 AI 仅向容器提供有关每个数据通道的相关信息(例如频道名称和内容类型),如前面的示例所示。 S3DistributionType将设置为FullyReplicated将 EFS 或 FSx Lustre 指定为输入数据源。
训练数据
CreateTrainingJob 请求中 AlgorithmSpecification 的参数 TrainingInputMode 指定了如何向容器提供训练数据集。有以下输入模式可用。
-
File模式如果您使用
File模式作为TrainingInputMode值, SageMaker AI 会在您的容器中设置以下参数。-
您的
TrainingInputMode参数将写入到inputdataconfig.json中作为“File”。 -
您的数据通道目录写入到
/opt/ml/input/data/中。channel_name
如果您使用
File模式, SageMaker AI 会为每个频道创建一个目录。例如,如果你有三个名为、和trainingvalidationtesting、的频道, SageMaker AI 会在你的 Docker 容器中创建以下三个目录:-
/opt/ml/input/data/training -
/opt/ml/input/data/validation -
/opt/ml/input/data/testing
File还支持以下数据来源:-
Amazon Simple Storage Service (Amazon S3)
-
Amazon Elastic File System (Amazon EFS)
-
亚马逊 f FSx or Lustre
注意
使用 Amazon EFS 和 Amazon 等文件系统数据源的渠道 FSx必须使用
File模式。在这种情况下,通道中提供的目录路径挂载在/opt/ml/input/data/。channel_name -
-
FastFile模式如果你使用
FastFile模式作为你的TrainingInputNodeParameter, SageMaker AI 会在你的容器中设置以下参数。-
与
File模式类似,在FastFile模式下,您的TrainingInputMode参数将写入到inputdataconfig.json中作为“File”。 -
您的数据通道目录写入到
/opt/ml/input/data/中。channel_name
FastFile模式支持以下数据来源:-
Amazon S3
如果您使用
FastFile模式,则以只读权限挂载通道目录。过去,
File模式优先于FastFile模式。为了确保向后兼容性,只要在inputdataconfig.json.中将TrainingInputMode参数设置为File,则支持File模式的算法也可以无缝地与FastFile模式配合使用。注意
使用
FastFile模式的通道必须使用S3DataType“S3Prefix”。FastFile模式显示了文件夹视图,使用正斜杠 (/) 作为将 Amazon S3 对象分组到文件夹中的分隔符。S3Uri前缀不能对应于部分文件夹名称。例如,如果 Amazon S3 数据集包含s3://amzn-s3-demo-bucket/train-01/data.csv,则s3://amzn-s3-demo-bucket/train或s3://amzn-s3-demo-bucket/train-01均不允许使用S3Uri前缀。建议使用结尾正斜杠来定义与文件夹对应的通道。例如,
train-01文件夹的s3://amzn-s3-demo-bucket/train-01/通道。如果没有结尾处的正斜杠,则如果存在其他文件夹s3://amzn-s3-demo-bucket/train-011/或文件s3://amzn-s3-demo-bucket/train-01.txt/,就无法确定该通道。 -
-
Pipe模式-
TrainingInputMode参数写入到inputdataconfig.json:“Pipe” -
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在读取模式下打开并将其读入 end-of-file (EOF),或者,如果您完成了第一个纪元,请尽早关闭管道文件。 -
关闭第一个管道文件后,请查找
/opt/ml/input/data/training_1并读取它,直到您完成第二个纪元,以此类推。
如果给定纪元的文件尚不存在,您的代码可能需要重试,直到创建该管道。各个通道类型没有顺序限制。例如,对于
training通道,您可以读取多个纪元,并仅在准备好后才开始读取validation通道。或者,如果算法要求,您可以同时读取它们。有关展示自带容器时如何使用管道模式的 Jupyter 笔记本示例,请参阅将自己的管道模式算法引入 Amazon AI
。 SageMaker -
SageMaker AI 模型训练支持高性能 S3 Express One Zone 目录存储桶作为文件模式、快速文件模式和管道模式的数据输入位置。要使用 S3 Express One Zone,请输入 S3 Express One Zone 目录存储桶的位置,而不是 Amazon S3 通用存储桶的位置。为具有所需访问控制和权限策略的 IAM 角色提供 ARN。有关详细信息,请参阅AmazonSageMakerFullAccesspolicy。您只能使用 Amazon S3 托管密钥 (SSE-S3) 通过服务器端加密对目录存储桶中的 A SageMaker I 输出数据进行加密。目前不支持使用 AWS KMS 密钥进行服务器端加密 (SSE-KMS),以将 SageMaker AI 输出数据存储在目录存储桶中。有关更多信息,请参阅 S3 Express One Zone。
分布式训练配置
如果您使用多个容器执行分布式训练, SageMaker AI 会在/opt/ml/input/config/resourceconfig.json文件中提供有关所有容器的信息。
为了启用容器间通信,此 JSON 文件包含所有容器的信息。 SageMaker AI 使该文件可用于模式算法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" }