You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

执行SageMaker PyTorch Estimator时报错:No such file or directory: 'train'

SageMaker本地模式训练找不到'train'文件排查方案

核心问题梳理

你用SageMaker本地模式训练时,指定了file://data/train作为输入路径(本地确实存在该目录),但进程报错找不到'train'文件,结合你的代码和Dockerfile,从以下几个方向排查:


1. 确认代码执行的工作目录与路径映射

  • file://data/train是相对路径,必须保证你运行Python代码时的当前工作目录下确实存在data/train文件夹。可以在代码开头加一行调试代码确认:
    import os
    print("当前工作目录:", os.getcwd())
    print("本地data/train是否存在:", os.path.exists("data/train"))
    
  • 若相对路径容易出错,直接换成绝对路径测试,比如file:///home/your_username/data/train(替换成你的实际绝对路径)。

2. 镜像用错了!推理镜像不能用于训练

你Dockerfile里用的是pytorch-inference镜像,这是专门用于模型推理的镜像,缺少SageMaker训练容器的核心逻辑(比如数据挂载、训练环境变量注入)。必须换成训练镜像:
修改Dockerfile的第一行:

# 替换成对应版本的训练镜像
FROM 763104351884.dkr.ecr.us-east-1.amazonaws.com/pytorch-training:2.5.1-cpu-py311-ubuntu22.04-sagemaker

3. 检查train.py的数据读取逻辑是否正确

SageMaker本地模式会把你指定的inputs路径,自动挂载到容器内的/opt/ml/input/data/training目录,同时会通过环境变量SM_CHANNEL_TRAINING传递这个路径。你的train.py必须读取这个路径下的数据,而不是当前工作目录:
正确的读取逻辑示例:

import os
# 获取训练数据目录,兼容SageMaker环境和本地调试
train_data_dir = os.environ.get("SM_CHANNEL_TRAINING", "./data/train")
# 示例:读取目录下的文件
print("容器内训练数据目录内容:", os.listdir(train_data_dir))

如果你的train.py里直接写死读取当前目录下的'train'文件/文件夹,必然找不到,因为容器的工作目录是/opt/ml/code,数据在/opt/ml/input/data/training。

4. 手动验证容器内的挂载情况

可以临时修改Dockerfile的CMD,让容器启动后不执行训练,而是停留在bash:

CMD ["bash", "-c", "ls -la /opt/ml/input/data/training && sleep 3600"]

重新构建镜像后启动训练,然后用docker ps找到容器ID,执行docker exec -it <容器ID> bash进入容器,查看/opt/ml/input/data/training下是否有数据,确认挂载是否正常。


内容的提问来源于stack exchange,提问作者Samlex

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 03:35:07