在SageMaker部署Sklearn KNN模型时遇scipy.sparse._csr模块缺失错误
解决Amazon SageMaker部署KNN模型时的scipy模块缺失问题
问题分析
错误No module named 'scipy.sparse._csr'的核心原因是推理容器中的scipy版本与训练模型时使用的版本不匹配,或者容器默认环境未安装所需的scipy子模块。即使本地Python版本与SageMaker内核一致,推理容器作为独立运行环境,仍可能存在依赖缺失或版本兼容性问题。
解决方案
方法1:通过requirements.txt指定依赖版本
这是最直接的修复方式,强制推理容器安装与训练阶段完全一致的依赖包:
- 在存放
model_script.py的目录下创建requirements.txt文件,添加以下内容(替换为你训练时实际使用的版本号):
scipy==1.7.3 scikit-learn==1.0.1 joblib==1.1.0
- 修改
deploy.ipynb中的SKLearnModel初始化代码,添加source_dir参数指向包含这两个文件的本地目录:
model = SKLearnModel(model_data=f's3://{bucket_name}/model.tar.gz', role=role, entry_point='model_script.py', source_dir='./your-local-source-folder', # 替换为实际路径 framework_version='1.0-1', py_version='py3') predictor = model.deploy(instance_type='ml.m5.large', initial_instance_count=1) predictor.wait()
方法2:在推理脚本中显式导入依赖(补充验证)
如果方法1仍存在问题,可以在model_script.py开头显式导入scipy核心模块,确保容器加载对应组件:
import os import joblib import json import scipy.sparse # 显式导入scipy.sparse模块
关键注意事项
- 必须保证
requirements.txt中的包版本与训练模型时使用的版本完全一致,避免序列化/反序列化过程中的兼容性冲突。 - 打包模型生成
model.tar.gz时,不要将本地的依赖包一同打包,让SageMaker容器通过requirements.txt重新安装对应版本的依赖。
内容的提问来源于stack exchange,提问作者paras shah
相关产品推荐
相关产品推荐

