XGBoost模型序列化反序列化问题:SageMaker训练本地加载报错
解决SageMaker训练的XGBoost模型本地pickle加载报错问题
问题原因
你遇到的报错是因为Python的pickle序列化会保留XGBoost模型与训练环境绑定的底层信息,跨环境(SageMaker到本地)加载时,XGBoost底层的JSON解析逻辑无法识别这些环境相关内容,从而抛出解析错误。另外XGBoost官方并不推荐用pickle保存模型,更建议使用其自带的标准模型保存方式。
解决方案
步骤1:在SageMaker上重新保存模型
替换原pickle保存代码,使用XGBoost自带的save_model方法:
model.save_model('xgboost_model.model')
步骤2:本地匹配XGBoost版本
确保本地环境的XGBoost版本与SageMaker上完全一致(1.6.1),执行安装命令:
pip install xgboost==1.6.1
步骤3:本地加载模型
使用XGBoost的load_model方法加载标准格式的模型:
import xgboost as xgb # 初始化Booster对象 loaded_model = xgb.Booster() # 加载模型文件 loaded_model.load_model('xgboost_model.model')
额外说明
如果是SageMaker Pipeline中的XGBoost模型,要确保获取到的是原生XGBoost模型对象再执行save_model,避免保存Pipeline的封装对象引发其他问题。
内容的提问来源于stack exchange,提问作者Petr
相关产品推荐
相关产品推荐

