Sagemaker 在容器中找不到路径

Sagemaker can't find paths in container

这种情况很难描述。

我有一个 python 模型火车脚本在:

myproject/opt/program/train

这会在 ./opt/ml/input/data/external/train.csv

获取一个文件

当我进行 python3 opt/program/train 训练时 运行 在本地很好。

然后我将项目容器化并在我的 Dockerfile 中将 opt 复制到 /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 上运行。

我错过了 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