AWS Lambda中添加Torch依赖后Kedro无法识别S3FS的问题
解决方案:AWS Lambda中Kedro Pipeline添加Torch依赖后S3访问失败问题
问题核心
安装torch==2.0.1+cpu和torchvision==0.15.2+cpu后,Lambda环境中Kedro的CSVDataSet无法实例化,抛出「Install s3fs to access S3」错误,但本地Linux环境运行正常。本质是Torch依赖安装过程干扰了s3fs的正确部署。
可能原因
- 依赖解析优先级问题:Torch的CPU版本依赖包体积大,pip安装时可能忽略了Kedro隐式依赖的
s3fs,或者覆盖了其兼容版本 - Lambda部署包构建遗漏:打包过程中未完整包含
s3fs及其依赖(如fsspec),尤其是如果先装Torch再装Kedro相关依赖,容易出现依赖缺失 - 环境差异:本地安装顺序(先Kedro后Torch)与Lambda部署时的顺序相反,导致依赖树构建逻辑不同
具体修复步骤
1. 显式声明s3fs依赖
在项目的requirements.txt中把s3fs放在Torch依赖之前,强制pip优先安装:
s3fs>=2023.6.0 torch==2.0.1+cpu torchvision==0.15.2+cpu # 其他Kedro及项目依赖
注:版本号可根据Kedro的兼容要求调整,确保与项目使用的Kedro版本匹配。
2. 规范Lambda部署包构建流程
使用虚拟环境完整打包所有依赖,避免系统环境干扰:
# 创建并激活虚拟环境 python -m venv lambda-env source lambda-env/bin/activate # 安装所有依赖到指定目录 pip install -r requirements.txt -t ./package # 将Kedro项目代码和package目录合并后打包成ZIP
禁止使用--no-deps参数安装Torch,否则会跳过间接依赖,破坏s3fs的依赖链。
3. 验证DataSet配置
确保CSVDataSet的S3路径配置正确,未因Torch导入影响文件系统加载逻辑:
# conf/base/catalog.yml my_s3_dataset: type: kedro.io.CSVDataSet filepath: s3://your-bucket/path/to/data.csv fs_args: anon: False
4. 添加Lambda环境依赖调试
在Kedro节点开头加入调试代码,确认s3fs是否真的存在:
import importlib import pkg_resources def your_node_function(): # 检查s3fs是否可导入 try: importlib.import_module("s3fs") print("✅ s3fs imported successfully") except ImportError as e: print(f"❌ Failed to import s3fs: {str(e)}") # 打印已安装的依赖列表 installed = [pkg.key for pkg in pkg_resources.working_set] print(f"Installed packages: {', '.join(installed)}") # 原有节点业务逻辑
通过日志可以直接定位是依赖缺失还是导入路径问题。
额外注意事项
- Torch CPU版本体积较大,Lambda部署包有250MB限制,可考虑将Torch依赖拆分到Lambda层中,减少主包体积
- 绝对不要在Lambda运行时动态执行
pip install,所有依赖必须提前打包完成
内容的提问来源于stack exchange,提问作者Julius Hetzel
相关产品推荐
相关产品推荐

