python - 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 上运行。
解决方案
我错过了 SageMaker 在 S3 中查找您的数据通道并将其复制到您的容器的事实/opt/ml/input/data
默认情况下,它似乎使用training
和validation
作为通道名称。因此,在我上面的示例中,它永远不会将我external
在 S3 上的文件夹中的数据复制到external
我容器中的正确文件夹中。事实上,我发现它正在将其复制到/opt/ml/input/data/training/external/train.csv
.
为了解决这个问题,我要么不得不更改我的文件夹名称,要么使用它InputDataConfig
来定义其他频道。我选择了后者并且能够让它工作。
更多信息在InputDataConfig
这里:https ://docs.aws.amazon.com/sagemaker/latest/dg/API_CreateTrainingJob.html
推荐阅读
- matplotlib - 如何在 OpenTURNS 的图形之外设置图例?
- android - Flutter 部署后会变得更快吗?
- javascript - 为什么我的换行符在 vue 中不起作用?flex 可能有问题?
- php - 如何在laravel中将表的数据从一个视图发送到另一个视图
- typescript - 开玩笑的打字稿请求进度管道未刷新
- react-native - 安装应用程序时 React Native 和初始数据存储
- java - 如何将值作为参数从一种方法传递到另一种方法
- c++ - 你可以在c ++中将变量用于参数吗?
- flutter - Flutter Navigator.pushNamed() 上下文
- python - 连续减去 (n,n) 数组的列表,同时保留先前减法值的列表