SageMaker Estimator.fit()未将“培训”输入传递给Training实例

时间:2019-08-16 09:54:22

标签: machine-learning amazon-sagemaker

如在提到的文档/教程中一样,我们可以调用Estimator.fit()来启动Training Job。

该方法的必需参数将是inputs,即s3 /对培训文件的文件引用。示例:

estimator.fit({'train':'s3://my-bucket/training_data})

training-script.py

parser.add_argument('--train', type=str, default=os.environ['SM_CHANNEL_TRAIN'])

我希望os.environ['SM_CHANNEL_TRAIN']是S3路径。但是,它返回/opt/ml/input/data/train

有人知道为什么吗?

更新

我还尝试调用estimator.fit('s3:// my-bucket / training_data')。 而且,训练实例无法获得SM_CHANNEL_TRAIN环境变量。实际上,我根本没有在环境变量中看到s3 URI。

2 个答案:

答案 0 :(得分:1)

在SageMaker中运行培训作业时,包含您提供的培训数据的S3 URL最终会从指定的URL复制到Docker容器(又名培训作业)中。因此,环境变量SM_CHANNEL_TRAIN指向从提供的S3 URL复制的训练数据的本地路径。

https://docs.aws.amazon.com/sagemaker/latest/dg/API_CreateTrainingJob.html#SageMaker-CreateTrainingJob-request-InputDataConfig

答案 1 :(得分:0)

最可能的原因是,如果您希望参数os.environ['SM_CHANNEL_TRAIN']不会提供带有s3://前缀的路径,那么您希望它从s3中提取数据。如果没有该前缀,它将在映像中搜索自己的本地文件系统以查找该路径。