在AWS Lambda中调用PyCaret predict_model触发只读文件系统异常
解决AWS Lambda中PyCaret预测时的只读文件系统错误
错误根源是PyCaret依赖的joblib库默认尝试在/var/folders目录写入缓存数据,但AWS Lambda的沙箱环境仅开放/tmp目录作为可写区域,其他目录均为只读,导致写入失败。
以下是几种可行的解决办法:
修改joblib缓存目录到Lambda可写路径
在Lambda函数代码开头添加环境变量配置,将joblib的临时目录指向/tmp:import os import tempfile # 强制joblib使用Lambda可写的/tmp目录作为缓存路径 os.environ['JOBLIB_TEMP_FOLDER'] = tempfile.gettempdir()禁用PyCaret Pipeline的缓存功能
PyCaret的模型Pipeline默认启用joblib缓存,直接禁用即可避免写入操作:from pycaret.classification import load_model, predict_model # 加载预训练模型 trained_model = load_model('your_model_path') # 关闭缓存 trained_model._memory = None # 执行预测 prediction = predict_model(trained_model, raw_score=True, data=df)若你是在Lambda中训练模型,也可以在初始化阶段直接禁用缓存:
from pycaret.classification import setup # setup时指定memory=None禁用缓存 setup(data=train_df, target='target_column', memory=None)预生成缓存文件并打包(可选)
若需保留缓存功能,可在本地训练模型时让joblib生成完整缓存文件,将缓存目录(默认是本地的/tmp/joblib)一并打包到Lambda部署包中,然后在Lambda代码中指定joblib读取该打包后的缓存路径。此方法步骤较繁琐,仅推荐有特殊缓存需求的场景。
本地及Docker环境可正常运行,是因为这些环境没有严格的文件系统读写限制,允许joblib在默认路径写入缓存。
内容的提问来源于stack exchange,提问作者Aks
相关产品推荐
相关产品推荐

