在Azure ML Studio交互式笔记本中加载已注册的sklearn MLflow模型
在Azure ML交互式笔记本中加载已注册的MLflow sklearn模型(无需下载)
问题描述
我正在使用Azure Machine Learning Studio,已将存储在默认数据存储(Blob存储)中的sklearn mlflow模型注册为模型资产。如何在交互式笔记本中加载该模型,以便在部署为批处理端点前快速进行推理测试?
我看到有帖子建议将模型工件下载到本地,但无需这么做,应该可以直接从数据存储或已注册资产加载模型,避免重复存储。我尝试了以下方法但均未成功:
从已注册模型资产读取(失败)
import mlflow from azure.ai.ml import MLClient from azure.ai.ml.entities import Model from azure.identity import DefaultAzureCredential ml_client = MLClient(DefaultAzureCredential(), "<subscription_id>", "<resource_group>", "<workspace_id>") model = ml_client.models.get("<model_name>", version="1") loaded_model = mlflow.sklearn.load_model(model.id)
OSError: No such file or directory: ...
从数据存储读取(失败)
import mlflow model_path = "<datastore_uri_to_model_folder>" loaded_model = mlflow.sklearn.load_model(model_path)
DeserializationError: Cannot deserialize content-type: text/html
解决方案
方法1:通过已注册模型的path属性加载
已注册模型的path字段包含了模型在Azure存储中的MLflow兼容URI,直接使用这个路径即可:
import mlflow from azure.ai.ml import MLClient from azure.identity import DefaultAzureCredential # 初始化MLClient ml_client = MLClient(DefaultAzureCredential(), "<subscription_id>", "<resource_group>", "<workspace_id>") # 获取已注册模型 model = ml_client.models.get("<model_name>", version="1") # 使用模型的path属性加载,该路径是Azure存储的mlflow兼容URI loaded_model = mlflow.sklearn.load_model(model.path) # 测试推理 sample_input = [[5.1, 3.5, 1.4, 0.2]] prediction = loaded_model.predict(sample_input) print(prediction)
方法2:使用Azure ML datastore的URI格式
如果直接使用数据存储路径,需要确保是MLflow可识别的Azure存储URI格式,即azureml://datastores/<datastore_name>/paths/<model_folder_path>,而不是普通的Blob存储URL:
import mlflow from azure.ai.ml import MLClient from azure.identity import DefaultAzureCredential ml_client = MLClient(DefaultAzureCredential(), "<subscription_id>", "<resource_group>", "<workspace_id>") # 获取默认数据存储 datastore = ml_client.datastores.get("workspaceblobstore") # 构造正确的MLflow兼容路径 model_path = f"azureml://datastores/{datastore.name}/paths/<model_folder_in_blob>" loaded_model = mlflow.sklearn.load_model(model_path) # 测试推理 sample_input = [[5.1, 3.5, 1.4, 0.2]] print(loaded_model.predict(sample_input))
关键说明
model.id是Azure ML内部的模型资产ID,不是MLflow可识别的模型路径,所以直接用它会报错。- 普通Blob存储URL(如
https://<account>.blob.core.windows.net/...)无法被MLflow直接解析,必须使用azureml://格式的URI,MLflow会通过Azure ML的认证机制访问存储。
内容的提问来源于stack exchange,提问作者Matt_Haythornthwaite
相关产品推荐
相关产品推荐

