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

本地将Databricks模型注册至AzureML时DBFS路径无法识别的问题问询

问题

我有一批在Databricks中通过MLflow跟踪并注册的机器学习模型,需要将其注册到AzureML。模型的.pkl文件存储在DBFS上,在Databricks笔记本中运行代码可以正常执行,但在本地机器运行相同代码时,AzureML无法找到模型路径(会搜索本地项目路径),报错信息如下:

azureml.exceptions._azureml_exception.WebserviceException: WebserviceException:
Message: Error, provided model path "/dbfs/FileStore/path/to/model/model.pkl" cannot be found
InnerException None
ErrorResponse
{
"error": {
"message": "Error, provided model path "/dbfs/FileStore/path/to/model/model.pkl" cannot be found"
}
}

无论是否使用pyspark和databricks-connect运行代码,该问题都会出现。请问如何让AzureML指向正确的DBFS存储?

# 在Databricks中执行的安装命令:%pip install mlflow==2.1.1 azureml-sdk[databricks] azureml-mlflow

import json
import mlflow
import os
from azureml.core import Workspace, Experiment, Run
from azureml.core.model import Model
from azureml.core.authentication import ServicePrincipalAuthentication

top_run_id = 123456789
top_run_dict = mlflow.get_run(top_run_id).to_dictionary()


### 连接到AZURE ML
subscription_id = '<我的订阅ID>'
resource_group = '<我的资源组>'
workspace_name = '<我的工作区名称>'

## 配置AML与DB工作区的通信
svc_pr = ServicePrincipalAuthentication(
    tenant_id='<我的租户ID>',
    service_principal_id='<我的服务主体ID>',
    service_principal_password='<我的服务主体密码>'
    )

ws = Workspace(
         subscription_id=subscription_id,
         resource_group=resource_group,
         workspace_name=workspace_name,
         auth=svc_pr
)

model_name = 'mlflow_local_azureml_test'
model_uri = json.loads(mlflow.get_run(top_run_id).data.tags['mlflow.log-model.history'])[0]['flavors']['python_function']['artifacts']['model_path']['uri']
model_description = '测试模型'
model_tags = {
  "Type": "RandomForest",
  "Run ID": top_run_id,
  "Metrics": mlflow.get_run(top_run_id).data.metrics
}

registered_model = Model.register(
  model_path=model_uri, 
  model_name=model_name,
  tags=model_tags,
  description=model_description,
  workspace=ws
)
解决方案

核心原因

本地环境无法直接访问DBFS路径,AzureML的Model.register方法默认会从本地文件系统读取模型,而非远程的DBFS存储。

可行解决方法

  • 方法1:通过MLflow模型URI直接注册(推荐)
    无需解析mlflow.log-model.history获取本地路径,直接使用MLflow标准模型URI格式(runs:/<run_id>/model),AzureML支持通过该URI直接拉取模型。前提是本地MLflow已配置好与Databricks的连接:

    # 配置本地MLflow连接到Databricks(需提前设置DATABRICKS_HOST、DATABRICKS_TOKEN环境变量)
    mlflow.set_tracking_uri("databricks")
    # 用run_id构建模型URI
    model_uri = f"runs:/{top_run_id}/model"
    # 注册模型
    registered_model = Model.register(
        model_path=model_uri, 
        model_name=model_name,
        tags=model_tags,
        description=model_description,
        workspace=ws
    )
    
  • 方法2:下载DBFS模型到本地后注册
    使用dbfs库或Databricks CLI将模型文件从DBFS下载到本地,再传入本地路径给Model.register:

    # 先安装dbfs库:pip install dbfs
    from dbfs import DBFS
    
    # 初始化DBFS客户端(替换为你的Databricks工作区URL和令牌)
    dbfs = DBFS(host="https://<databricks-workspace-url>", token="<databricks-token>")
    local_model_path = "./model.pkl"
    # 下载DBFS文件到本地
    dbfs.download("/dbfs/FileStore/path/to/model/model.pkl", local_model_path)
    
    # 用本地路径注册模型
    registered_model = Model.register(
        model_path=local_model_path, 
        model_name=model_name,
        tags=model_tags,
        description=model_description,
        workspace=ws
    )
    
  • 方法3:将DBFS挂载的Blob Storage直接暴露给AzureML
    如果模型存储在DBFS挂载的Azure Blob Storage中,可直接将Blob路径(如wasbs://container@storageaccount.blob.core.windows.net/path/to/model.pkl)作为model_path,同时确保AzureML的服务主体拥有该Blob存储的读取权限。

内容的提问来源于stack exchange,提问作者Kasia Kulma

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 22:22:47