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

如何在Azure端点评分脚本中访问数据资产以实现模型预测

在Azure ML端点中访问数据资产的正确方法

你的问题核心是直接使用公共Blob URL访问数据资产失败,这是因为Azure存储账户默认禁止匿名公共访问。以下是几种可靠的解决方案,帮助你在评分脚本中正确读取Azure数据资产:


方案1:将数据资产作为依赖项打包部署

把数据资产和模型一起打包到部署容器中,直接通过本地路径访问,无需额外权限配置。

操作步骤:

  1. 部署时指定数据资产为依赖项(支持Python SDK或CLI)
  2. 在评分脚本中通过环境变量获取数据资产的本地路径

评分脚本修改示例:

import os
import logging
import json
import numpy
import pickle
import pandas as pd

def init():
    global model, historical_data
    # 加载模型
    model_path = os.path.join(os.getenv("AZUREML_MODEL_DIR"), "ModelTest.sav")
    model = pickle.load(open(model_path,'rb'))
    
    # 读取数据资产:替换为你的数据资产名称
    data_mount_path = os.getenv("AZUREML_DATAREFERENCES_HistoricalSalesData")
    historical_data = pd.read_csv(os.path.join(data_mount_path, "Data.csv"))
    
    logging.info("Init complete, model and historical data loaded")

def run(raw_data):
    logging.info("model 1: request received")
    data = json.loads(raw_data)["data"]
    data = numpy.array(data)
    
    # 这里可以结合historical_data做预处理逻辑
    result = model.predict(data)
    logging.info("Request processed")
    return result.tolist()

Python SDK部署配置示例:

from azure.ai.ml.entities import Deployment, Data
from azure.ai.ml.constants import AssetTypes

# 关联已注册的数据资产
data_asset = Data(
    name="HistoricalSalesData",
    version="1",
    type=AssetTypes.URI_FOLDER
)

# 部署定义
deployment = Deployment(
    name="modeltest-endpoint",
    model="ModelTest:1",
    environment="azureml-openmpi4.1.0-ubuntu20.04",
    code_configuration={"code": "./score_scripts", "scoring_script": "score.py"},
    data_references={"HistoricalSalesData": data_asset},
    instance_type="Standard_DS3_v2",
    instance_count=1
)

方案2:挂载数据资产到容器路径

部署时直接将数据资产挂载到容器的指定目录,脚本中直接读取该路径即可。

CLI部署命令示例:

az ml model deploy \
  --name modeltest-endpoint \
  --model ModelTest:1 \
  --score-script score.py \
  --environment azureml-openmpi4.1.0-ubuntu20.04 \
  --instance-type Standard_DS3_v2 \
  --instance-count 1 \
  --data "HistoricalSalesData@/mnt/historical_data"

评分脚本中读取数据:

# 在init函数中直接读取挂载路径
historical_data = pd.read_csv("/mnt/historical_data/Data.csv")

方案3:通过托管标识获取SAS URL访问

利用Azure ML的托管标识,获取数据资产的临时SAS URL,实现安全访问。

操作步骤:

  1. 给端点的托管标识分配存储账户的「存储Blob数据读取者」角色
  2. 在评分脚本中使用MLClient获取SAS URL并读取数据

评分脚本示例:

import pandas as pd
from azure.ai.ml import MLClient
from azure.identity import ManagedIdentityCredential
import os

def init():
    global model, historical_data
    # 加载模型
    model_path = os.path.join(os.getenv("AZUREML_MODEL_DIR"), "ModelTest.sav")
    model = pickle.load(open(model_path,'rb'))
    
    # 初始化MLClient
    ml_client = MLClient(
        credential=ManagedIdentityCredential(),
        subscription_id=os.getenv("AZUREML_SUBSCRIPTION_ID"),
        resource_group_name=os.getenv("AZUREML_RESOURCE_GROUP"),
        workspace_name=os.getenv("AZUREML_WORKSPACE_NAME"),
    )
    
    # 获取数据资产的临时SAS URL
    data_asset = ml_client.data.get(name="HistoricalSalesData", version="1")
    sas_url = ml_client.data.get_uris(data_asset, timeout=3600)[0]
    
    # 读取数据
    historical_data = pd.read_csv(sas_url)
    logging.info("Init complete, historical data loaded")

推荐方案

优先选择方案1或方案2,这两种方式无需额外配置权限,实现更简单,适合静态的历史数据场景;如果数据需要动态更新,可考虑方案3。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 13:44:51