Azure ML批量部署模型遇azureml.training模块缺失错误求助
解决思路
1. 匹配训练与部署环境的Azure ML SDK版本
自动化ML训练的模型依赖的azureml.training模块属于旧版Azure ML SDK组件,新版SDK中该模块的结构已调整。需:
- 从自动化ML实验的训练环境配置/日志中,获取训练时使用的Azure ML SDK具体版本
- 在部署环境的依赖配置中,指定完全一致的SDK版本,而非使用最新版
2. 复用训练环境的conda依赖配置
找到自动化ML实验输出的conda依赖文件(通常在实验资产的environment目录下),直接将其内容复制到部署用的conda.yml中,确保所有依赖包版本与训练环境完全对齐。示例配置:
name: batch-deploy-env channels: - conda-forge dependencies: - python=3.8 - pandas=1.4.2 - scikit-learn=1.0.2 - xgboost=1.6.1 - pip: - azureml-core==1.42.0 - azureml-automl-core==1.42.0 - azureml-training-automl==1.42.0
3. 提取原始XGBoost模型重新注册
自动化ML训练的模型会被Azure ML的包装类封装,导致依赖azureml.training。可在训练完成后提取原始模型再注册:
# 获取自动化ML训练的最优模型 automl_model = best_run.get_output(model=True) # 提取原始XGBoost模型对象 raw_xgb_model = automl_model.named_steps['model'] # 保存并注册原始模型 pickle.dump(raw_xgb_model, open("pure_xgb_model.pkl", "wb")) Model.register(workspace=ws, model_name="pure-xgb-model", model_path="./pure_xgb_model.pkl")
重新注册的模型仅依赖XGBoost本身,不再需要Azure ML训练模块。
4. 改用MLflow格式导出并部署模型
自动化ML支持导出MLflow格式模型,该格式会自动管理依赖,避免模块缺失问题:
import mlflow # 下载自动化ML输出的MLflow模型 best_run.download_file("outputs/model", "mlflow_xgb_model") # 注册MLflow格式模型 mlflow.register_model(f"runs:/{best_run.id}/outputs/model", "mlflow-xgb-batch-model")
部署时使用MLflow默认的评分脚本,无需手动处理模型加载,依赖会自动匹配训练环境。
内容的提问来源于stack exchange,提问作者Alberto Bertoncini
相关产品推荐
相关产品推荐

