部署XGBoost模型到本地托管在线端点时遇MlException错误求助
问题原因及解决方案
问题根源
你直接将mlflow.xgboost.load_model()加载得到的XGBClassifier实例传给了ManagedOnlineDeployment的model参数,但Azure ML托管在线部署要求model参数接收的是:
- 工作区已注册模型的引用字符串(格式为
模型名:版本号) - 或Azure ML SDK中的
Model对象
而非本地加载的模型实例。
错误信息的三个提示均因传入对象类型错误导致:
Non-string passed to RegistryStr for model/Non-string passed to ArmStr for model:未传入符合要求的字符串格式模型引用'XGBClassifier' object has no attribute '_intellectual_property':XGBoost模型实例不具备Azure ML Model对象的特有属性,部署逻辑无法识别
修复方案
方案1:使用注册模型的引用字符串(推荐)
直接传入已注册模型的名称和版本号,同时补充部署必填的instance_type和instance_count参数:
blue_deployment = ManagedOnlineDeployment( name='blue', endpoint_name='diabetes-online-endpoint', model='diabetes-prediction:1', # 对应你注册的模型名和版本 instance_type='Standard_DS3_v2', # 根据需求选择合适的计算实例类型 instance_count=1 ) ml_client.online_deployments.begin_create_or_update(blue_deployment, local=True)
方案2:获取Azure ML的Model对象传入
先通过ML客户端获取工作区中已注册的Model对象,再传入部署配置:
# 获取注册的模型对象 registered_model = ml_client.models.get(name='diabetes-prediction', version='1') blue_deployment = ManagedOnlineDeployment( name='blue', endpoint_name='diabetes-online-endpoint', model=registered_model, instance_type='Standard_DS3_v2', instance_count=1 ) ml_client.online_deployments.begin_create_or_update(blue_deployment, local=True)
额外注意
你原代码中缺少instance_type和instance_count两个必填参数,即使解决了模型参数问题,部署也会因缺少这两个参数报错,必须补充。
内容的提问来源于stack exchange,提问作者Karthik S
相关产品推荐
相关产品推荐

