首页 > 解决方案 > Sagemaker 在容器中找不到路径

问题描述

这是一个很难描述的情况。

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

myproject/opt/program/train

这得到一个文件./opt/ml/input/data/external/train.csv

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

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

现在当我跑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 上运行。

标签: pythondockeramazon-sagemaker

解决方案


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

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

为了解决这个问题,我要么不得不更改我的文件夹名称,要么使用它InputDataConfig来定义其他频道。我选择了后者并且能够让它工作。

更多信息在InputDataConfig这里:https ://docs.aws.amazon.com/sagemaker/latest/dg/API_CreateTrainingJob.html


推荐阅读