AWS SageMaker XGBoost容器加载模型遇AttributeError问题求助
问题原因与解决方案
问题根源
你用SageMaker XGBoost容器1.5-1加载的是scikit-learn接口的XGBClassifier对象,但容器的算法模式服务代码只兼容原生XGBoost Booster模型。容器代码会调用set_param方法,而XGBClassifier没有这个方法,因此触发AttributeError。
解决方案
1. 重新训练时直接保存原生Booster模型
如果是新训练的模型,不要保存XGBClassifier对象,而是提取内部的Booster再保存:
from xgboost import XGBClassifier # 训练模型 model = XGBClassifier(...) model.fit(X_train, y_train) # 提取原生Booster并保存 booster = model.get_booster() booster.save_model("model.bst")
2. 转换已有的XGBClassifier模型为Booster格式
如果已经有保存好的XGBClassifier,可以先加载后转换:
from xgboost import XGBClassifier # 加载XGBClassifier loaded_model = XGBClassifier() loaded_model.load_model("path/to/your/saved_model") # 提取Booster并保存为兼容格式 booster = loaded_model.get_booster() booster.save_model("model.bst")
3. 部署到SageMaker时使用正确的模型文件
将转换后的model.bst文件打包成模型归档(tar.gz),上传到S3后部署到SageMaker XGBoost容器,容器就能正确加载模型并处理推理请求。
内容的提问来源于stack exchange,提问作者Metel Stairs
相关产品推荐
相关产品推荐

