SageMaker自定义数据集训练报错:指定文件路径不存在
解决SageMaker训练任务中FileNotFoundError的问题
核心原因
训练代码transfer_learning.py里硬编码了数据路径/opt/ml/input/data/training/train/data.csv,但SageMaker从S3同步过来的数据结构不匹配,导致文件找不到。
具体修复步骤
1. 调整S3数据集的目录结构
确保你的training_dataset_s3_path对应的S3路径下存在train/data.csv层级。比如:
- 正确S3路径示例:
s3://your-bucket/dataset/train/data.csv,此时SageMaker会将整个train目录同步到/opt/ml/input/data/training/下,最终路径与代码中硬编码的路径完全匹配。 - 如果当前S3路径直接指向
data.csv(如s3://your-bucket/dataset/data.csv),需在S3中将data.csv移动到train子目录下。
2. 修改训练代码的文件读取路径
若不想调整S3结构,直接修改transfer_learning.py中的读取逻辑:
- 替换硬编码路径:
# 原代码 pd.read_csv('/opt/ml/input/data/training/train/data.csv') # 修改后 pd.read_csv('/opt/ml/input/data/training/data.csv')
- 更推荐的灵活写法(通过环境变量获取数据目录):
import os training_data_dir = os.environ['SM_CHANNEL_TRAINING'] data_path = os.path.join(training_data_dir, 'data.csv') pd.read_csv(data_path)
这种方式无需依赖固定目录结构,适配不同的S3数据组织形式。
3. 验证数据通道与权限
- 确认
fit方法中的通道映射{"training": training_dataset_s3_path}正确,该映射会将S3数据同步到/opt/ml/input/data/training/目录,无需修改。 - 检查SageMaker执行角色(
aws_role)是否具备目标S3路径的s3:GetObject和s3:ListBucket权限,避免因权限不足导致数据未同步,引发文件不存在错误。
内容的提问来源于stack exchange,提问作者Ashish Jha
相关产品推荐
相关产品推荐

