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

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的正确部署。

可能原因

  1. 依赖解析优先级问题:Torch的CPU版本依赖包体积大,pip安装时可能忽略了Kedro隐式依赖的s3fs,或者覆盖了其兼容版本
  2. Lambda部署包构建遗漏:打包过程中未完整包含s3fs及其依赖(如fsspec),尤其是如果先装Torch再装Kedro相关依赖,容易出现依赖缺失
  3. 环境差异:本地安装顺序(先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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 22:03:22