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

如何让Azure ML Service Web服务访问数据存储(Datastore)?

实现Azure ML Service Web服务访问数据存储的方案

其实在Azure ML的Web服务里访问数据存储完全可行,只是得在评分脚本和部署配置里做些额外设置,我给你整理几个常用的靠谱方案:

方法一:在评分脚本中用Azure ML SDK直接访问数据存储

这是最灵活的方式,不需要修改计算目标的配置,直接在score.py里借助SDK连接数据存储读取特征数据。

第一步:确保部署环境包含Azure ML SDK

Web服务的运行环境里得安装azureml-core包,你可以在环境定义里添加这个依赖:

from azureml.core import Environment

# 创建自定义环境
env = Environment(name="my-scoring-env")
conda_dep = env.python.conda_dependencies
# 添加Azure ML SDK依赖
conda_dep.add_pip_package("azureml-core")
# 添加你的模型依赖,比如scikit-learn
conda_dep.add_pip_package("scikit-learn==1.2.2")
# 其他必要依赖按需添加

第二步:在评分脚本中连接数据存储并读取数据

修改你的score.py,在预测逻辑里加入访问数据存储的代码。注意用托管身份或者服务主体认证,绝对别硬编码凭据:

import pickle
import pandas as pd
from azureml.core import Workspace, Datastore

def init():
    global model, workspace
    # 加载训练好的模型
    model_path = "model.pkl"
    with open(model_path, "rb") as f:
        model = pickle.load(f)
    
    # 用托管身份自动连接工作区(无需手动输入密钥)
    workspace = Workspace.from_config()

def run(raw_data):
    # 解析输入的请求数据,提取客户ID这类关键标识
    input_data = pd.read_json(raw_data)
    customer_id = input_data["customer_id"].iloc[0]
    
    # 获取目标数据存储
    datastore = Datastore.get(workspace, datastore_name="your_datastore_name")
    
    # 读取数据存储里的特征文件(这里以Blob存储的parquet文件为例)
    # 路径格式根据你的数据存储类型调整
    feature_file_path = f"az://{datastore.container_name}/features/customer_{customer_id}.parquet"
    feature_data = pd.read_parquet(feature_file_path, storage_options=datastore._get_storage_options())
    
    # 合并输入数据和历史特征
    combined_data = pd.merge(input_data, feature_data, on="customer_id")
    
    # 执行预测并返回结果
    prediction = model.predict(combined_data)
    return {"prediction": prediction.tolist()}

关键注意点

  • 如果用托管身份部署Web服务,要给托管身份分配对应数据存储的访问权限(比如Blob存储的读取权限);
  • 不同类型的数据存储(比如ADLS Gen2、SQL DB)的访问逻辑略有不同,你可以根据实际类型调整读取代码。

方法二:将数据存储挂载到Web服务的计算目标

如果你的Web服务部署在AKS或者Azure ML计算实例上,可以把数据存储直接挂载到计算目标的文件系统,这样评分脚本就能像访问本地文件一样读取数据,性能会更好。

第一步:部署时配置数据存储挂载

在部署配置里添加挂载设置:

from azureml.core.webservice import AksWebservice
from azureml.core.model import InferenceConfig, Model
from azureml.core.compute import AksCompute

# 加载已有的AKS计算目标
aks_target = AksCompute(workspace, name="my-aks-cluster")

# 定义推理配置(关联评分脚本和环境)
inference_config = InferenceConfig(
    source_directory="./scoring_files",
    entry_script="score.py",
    environment=env
)

# 配置数据存储挂载路径
datastore = Datastore.get(workspace, "your_datastore_name")
mount_config = datastore.mount_configuration(mount_path="/mnt/feature_data")

# 创建AKS部署配置,添加挂载设置
aks_config = AksWebservice.deploy_configuration(
    cpu_cores=1,
    memory_gb=2,
    mounts=[mount_config]
)

# 部署Web服务
service = Model.deploy(
    workspace=workspace,
    name="customer-payment-service",
    models=[model],
    inference_config=inference_config,
    deployment_config=aks_config,
    deployment_target=aks_target
)
service.wait_for_deployment(show_output=True)

第二步:在评分脚本中访问挂载的文件

此时你可以直接通过挂载路径读取数据,代码更简洁:

def run(raw_data):
    input_data = pd.read_json(raw_data)
    customer_id = input_data["customer_id"].iloc[0]
    
    # 直接读取挂载路径下的特征文件
    feature_data = pd.read_parquet(f"/mnt/feature_data/features/customer_{customer_id}.parquet")
    
    # 合并数据并预测
    combined_data = pd.merge(input_data, feature_data, on="customer_id")
    prediction = model.predict(combined_data)
    return {"prediction": prediction.tolist()}

方法三:批量预测(适合非实时场景)

如果你的预测是批量处理的(比如每天批量预测一次),可以用Azure ML的批量预测功能——它天生支持读取数据存储里的输入数据,处理完后还能把结果写回数据存储,不用单独搭建Web服务。

总结对比

  • 方法一适合实时服务,灵活性高,无需修改计算目标;
  • 方法二适合需要频繁读取大量数据的场景,性能更优;
  • 方法三适合非实时批量处理的需求。

无论用哪种方法,都要优先用托管身份或服务主体做认证,绝对不要在代码里硬写凭据,避免安全风险。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 09:27:07