You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Azure机器学习工作区中无需本地下载,直接通过azureml://路径使用joblib加载模型

如何在Azure机器学习工作区中无需本地下载,直接通过azureml://路径使用joblib加载模型

我完全懂你想跳过本地下载、直接从Azure ML工作区加载模型的需求——反复下载确实挺繁琐的,尤其是测试阶段,能省一步是一步。不过得先说明:joblib本身并不支持直接解析azureml://这种专用URI,它只能读取本地文件路径或者标准的文件类流对象。不过我们可以通过Azure的SDK来绕开本地下载,直接通过内存流加载模型,下面给你两种干净的实现方式:

方法一:利用Azure Blob Storage SDK直接读取模型流

既然模型最终存在Azure Blob存储里,我们可以直接用Blob Storage的客户端来获取文件流,再传给joblib加载:

from azure.ai.ml import MLClient
from azure.identity import DefaultAzureCredential
from azure.storage.blob import BlobClient
import joblib

# 初始化ML客户端,连接到你的工作区
ml_client = MLClient(
    DefaultAzureCredential(),
    subscription_id="4*****c",
    resource_group_name="mauromi-ml-wrkgp01",
    workspace_name="mmAmlsWksp02"
)

# 获取已注册的模型对象
m_name = "iris_flat_model_from_cli"
m_version = "你的模型版本号"
model = ml_client.models.get(name=m_name, version=m_version)

# 解析模型路径中的存储信息
# model.path格式为:azureml://datastores/<datastore-name>/paths/<blob-path>/
path_parts = model.path.split("/")
datastore_name = path_parts[3]
# 拼接完整的模型文件blob路径(假设模型文件是model.pkl)
blob_full_path = "/".join(path_parts[5:]) + "/model.pkl"

# 获取数据存储的连接信息
datastore = ml_client.datastores.get(datastore_name)
# 创建Blob客户端
blob_client = BlobClient(
    account_url=f"https://{datastore.account_name}.blob.core.windows.net",
    container_name=datastore.container_name,
    blob_name=blob_full_path,
    credential=DefaultAzureCredential()
)

# 直接通过流加载模型,无需本地下载
with blob_client.open_read() as blob_stream:
    m = joblib.load(blob_stream)

# 现在可以直接调用模型推理
result = m.predict_proba(你的输入数据)

方法二:使用Azure ML核心库的Datastore流下载

如果你习惯用旧版的azureml-core库,也可以通过Datastore的直接流下载功能来实现:

from azureml.core import Workspace, Datastore
from azureml.core.model import Model
import joblib

# 加载工作区
ws = Workspace(
    subscription_id="4*****c",
    resource_group="mauromi-ml-wrkgp01",
    workspace_name="mmAmlsWksp02"
)

# 获取模型对象
model = Model(ws, name="iris_flat_model_from_cli", version="你的模型版本号")

# 获取模型所在的数据存储和文件路径
datastore = Datastore.get(ws, model.datastore_name)
model_file_path = f"{model.path}/model.pkl"

# 直接获取文件流并加载模型
with datastore.download_file(model_file_path, output_stream=True) as stream:
    m = joblib.load(stream)

# 执行推理
predictions = m.predict_proba(你的输入数据)

为什么不能直接用joblib.load(azureml://...)?

简单来说,joblib是为本地文件系统设计的库,它没有内置对Azure ML专用URI的解析能力。要读取远程存储的模型,必须先通过Azure的SDK把远程文件转换成joblib能识别的流对象,这就是上面两种方法的核心逻辑。

备注:内容来源于stack exchange,提问作者Mauro Minella

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.22 09:43:08