如何在Azure ML Studio笔记本中加载自定义注册的ML模型
解决Azure ML注册模型无法用MLflow加载的问题
问题原因
你注册的模型是通过Azure ML SDK完成的,没有生成MLflow所需的MLmodel元数据文件——MLflow的load_model系列方法依赖这个文件识别模型类型、序列化格式等核心信息,因此直接调用会失败。
解决方案
方案1:用Azure ML SDK直接加载(最简便)
既然模型是通过Azure ML SDK注册的,直接用Azure ML工具链加载是最直接的方式:
from azure.ai.ml import MLClient from azure.identity import DefaultAzureCredential import joblib # 初始化MLClient(替换为你的工作区信息) ml_client = MLClient( DefaultAzureCredential(), subscription_id="你的订阅ID", resource_group_name="你的资源组名", workspace_name="你的工作区名" ) # 获取注册的模型 model = ml_client.models.get(name="你的模型名", version="你的模型版本") # 下载模型文件到本地目录 download_path = "./downloaded_model" model_file_path = ml_client.models.download( name=model.name, version=model.version, download_path=download_path ) # 用joblib加载Sklearn pickle模型(替换为你的实际pickle文件名) sklearn_model = joblib.load(f"{model_file_path}/model.pkl")
方案2:为现有模型添加MLflow元数据
如果必须用MLflow加载,需要给已注册模型补充MLflow的元数据文件:
- 按照方案1的步骤下载模型的pickle文件到本地
- 在模型文件所在目录创建
MLmodel文件,内容如下(替换为你的Sklearn版本):
flavor: sklearn sklearn_version: 1.2.2 serialization_format: cloudpickle
- 将
MLmodel和pickle文件一起重新注册为Azure ML模型(或更新现有模型版本),确保artifact包含这两个文件 - 之后即可用MLflow的
mlflow.sklearn.load_model()加载模型,路径格式为models:/<模型名>/<版本号>
方案3:修改训练流程,集成MLflow
如果后续还有训练任务,可以在训练脚本中加入MLflow跟踪逻辑,让训练后的模型自动生成MLflow元数据:
import mlflow import mlflow.sklearn from sklearn.ensemble import RandomForestClassifier # 初始化MLflow跟踪(Azure ML环境中会自动关联工作区) mlflow.set_experiment("你的实验名") with mlflow.start_run(): # 训练Sklearn模型 model = RandomForestClassifier() model.fit(X_train, y_train) # 用MLflow记录模型(自动生成MLmodel文件) mlflow.sklearn.log_model(model, "model") # 注册模型到Azure ML模型注册表 mlflow.register_model(f"runs:/{mlflow.active_run().info.run_id}/model", "你的模型名")
注意事项
- 确保加载模型时使用的Sklearn版本与训练时一致,避免版本不兼容导致加载失败
- 如果pickle文件用
pickle而非cloudpickle序列化,需在MLmodel文件中修改serialization_format为pickle
内容的提问来源于stack exchange,提问作者Imperial_J
相关产品推荐
相关产品推荐

