Sagemaker在容器中找不到路径

时间:2019-11-16 16:05:22

标签: python docker amazon-sagemaker

这很难描述。

我在以下位置有一个python模型训练脚本:

myproject/opt/program/train

这会在./opt/ml/input/data/external/train.csv处获取文件

当我做python3 opt/program/train时,培训在本地运行良好。

然后我将项目容器化,并将opt复制到我的Dockerfile中的/opt

现在,当我跑步docker run <image name> train时,它也可以很好地训练。

然后,我将图像部署到SageMaker,创建一个估计器,然后调用model.fit(my_data),我得到:

Exception during training: [Errno 2] File b'./opt/ml/input/data/external/train.csv' does not exist

肯定在那里,我能够自己运行容器来进行训练。同样运行容器并浏览文件系统,我可以找到文件。

所以我认为我对文件系统有一些误解。从容器的根部开始,所有这些似乎都具有等效的输出。

root@798ffe7364c6:/# ls opt
ml  program
root@798ffe7364c6:/# ls /opt
ml  program
root@798ffe7364c6:/# ls ./opt
ml  program

我正在尝试一种方法,以使一条路径可以在容器,本地和AWS上本地运行。

1 个答案:

答案 0 :(得分:0)

我错过了SageMaker在S3中查找您的数据通道并将其复制到/opt/ml/input/data的容器中这一事实

默认情况下,似乎使用trainingvalidation作为频道名称。因此,在上面的示例中,它永远不会将数据从S3上的external文件夹复制到容器中右侧的external文件夹。实际上,我发现它是将其复制到/opt/ml/input/data/training/external/train.csv

要解决此问题,我要么不得不更改我的文件夹名称,要么使用InputDataConfig来定义其他通道。我选择了后者,并使其能够正常工作。

有关InputDataConfig的更多信息,请访问:https://docs.aws.amazon.com/sagemaker/latest/dg/API_CreateTrainingJob.html