这很难描述。
我在以下位置有一个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上本地运行。
答案 0 :(得分:0)
我错过了SageMaker在S3中查找您的数据通道并将其复制到/opt/ml/input/data
的容器中这一事实
默认情况下,似乎使用training
和validation
作为频道名称。因此,在上面的示例中,它永远不会将数据从S3上的external
文件夹复制到容器中右侧的external
文件夹。实际上,我发现它是将其复制到/opt/ml/input/data/training/external/train.csv
。
要解决此问题,我要么不得不更改我的文件夹名称,要么使用InputDataConfig
来定义其他通道。我选择了后者,并使其能够正常工作。
有关InputDataConfig
的更多信息,请访问:https://docs.aws.amazon.com/sagemaker/latest/dg/API_CreateTrainingJob.html