VS Code开发容器中AWS SageMaker本地模式运行失败求助
问题排查:SageMaker本地模式在VS Code开发容器内找不到处理脚本
核心问题分析
报错提示找不到/opt/ml/processing/code/processing_script.py,但脚本实际存在,且在VS Code容器外、SageMaker常规模式下正常运行,说明问题出在VS Code开发容器与SageMaker本地模式的嵌套Docker文件挂载逻辑上——SageMaker本地模式通过docker-compose挂载本地文件,但外层VS Code容器的路径映射可能导致内层容器无法正确访问脚本。
解决方案步骤
1. 显式挂载处理脚本
放弃processor.run()中的code参数,改用ProcessingInput直接挂载脚本到容器指定路径,避免自动挂载的路径偏差:
修改代码中的inputs列表,添加脚本挂载:
processor.run( # 移除code参数 inputs=[ ProcessingInput( source='./input_data/', destination="/opt/ml/processing/input_data/", ), # 新增:显式挂载处理脚本 ProcessingInput( source="./processing_script.py", destination="/opt/ml/processing/code/processing_script.py" ) ], outputs=[ ProcessingOutput( output_name="word_count_data", source="/opt/ml/processing/processed_data/" ) ], arguments=["job-type", "word-count"], )
2. 验证VS Code容器内的文件路径
在VS Code开发容器的终端中,执行以下命令确认脚本存在且路径正确:
# 确认脚本在当前工作目录 ls -l processing_script.py # 输出脚本绝对路径 realpath processing_script.py
如果脚本不在当前工作目录,需要调整source参数为正确的绝对路径。
3. 检查SageMaker生成的docker-compose配置
SageMaker本地模式会临时生成docker-compose.yaml文件(日志中路径为/tmp/tmpx5_z74cs/docker-compose.yaml),可以查看该文件中的volumes配置,确认代码挂载路径是否正确:
cat /tmp/tmpx5_z74cs/docker-compose.yaml
如果发现挂载的路径和实际脚本路径不匹配,可以手动调整,或者通过SageSession的配置修改挂载逻辑。
4. 确保嵌套Docker的权限与映射
VS Code开发容器本身运行在Docker中,需要确保:
- 容器内用户拥有Docker操作权限(已加入docker组)
- 内层SageMaker容器能读取挂载的文件:检查脚本的权限,避免设置为仅root可读(可以执行
chmod 644 processing_script.py调整权限)
5. 尝试指定绝对路径
将code参数改为脚本的绝对路径,替换原代码中的code="processing_script.py":
import os processor.run( code=os.path.abspath("processing_script.py"), # 其余参数不变 )
内容的提问来源于stack exchange,提问作者Kedhar
相关产品推荐
相关产品推荐

