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

如何在Azure ML中实现多值预测:单实验整合多模型生成Web输出

在Azure ML中实现多值预测的解决方案

针对你遇到的“无法用单个模型完成多值预测,需要集成多个已训练模型并生成多结果Web服务”的问题,我整理了具体的实现步骤和通用方法,帮你解决这个需求:

一、Azure ML实现多值预测的通用方法

通常有三种主流方式来实现多值预测,你可以根据自己的任务场景选择:

1. 使用原生支持多输出的模型

如果你的多值预测任务属于多标签分类(比如同时预测用户是否会点击多个广告)或多变量回归(比如同时预测房价、租金、空置率),可以直接使用支持多输出的模型:

  • 对于scikit-learn生态,可以用MultiOutputClassifier/MultiOutputRegressor包装单输出模型,实现多预测输出;
  • XGBoost、LightGBM等框架也支持直接指定多列目标变量进行训练;
  • 自定义深度学习模型(比如TensorFlow/PyTorch)可以设计输出层对应多个预测值。

这种方式的优势是只需维护单个模型,部署和推理流程更简单。

2. 训练多个单输出模型并集成

这正是你当前需要的场景:每个模型负责一个独立的预测任务,推理时同时调用所有模型并合并结果。这种方式适合各个预测任务关联性较弱的场景(比如同时预测用户的年龄、性别、消费能力)。

3. 用Azure ML Pipeline编排全流程

如果你的多值预测涉及复杂的训练和推理逻辑,可以创建Azure ML Pipeline:

  • 训练阶段:为每个预测任务创建独立的训练步骤,并行或串行执行,训练完成后自动注册所有模型;
  • 推理阶段:构建包含多个模型推理步骤的Pipeline,将输入数据依次传入各个模型,最后汇总所有预测结果;
  • 部署时直接将推理Pipeline发布为Web服务,实现端到端的多值预测流程。

二、如何在单个Azure ML实验中集成多个已训练模型并部署为Web服务

下面是具体的分步实现指南:

1. 准备并注册已训练模型

首先确保你的每个模型都已保存(比如pickle、ONNX格式),并注册到Azure ML工作区:

from azureml.core import Workspace, Model

ws = Workspace.from_config()
# 注册第一个模型
Model.register(workspace=ws, model_path="./model1.pkl", model_name="prediction-model-1", description="预测任务1模型")
# 注册第二个模型
Model.register(workspace=ws, model_path="./model2.pkl", model_name="prediction-model-2", description="预测任务2模型")

2. 编写自定义评分脚本(score.py)

这个脚本负责加载所有模型、处理输入数据、执行多模型预测并返回结果:

import json
import pickle
import pandas as pd
from azureml.core.model import Model

def init():
    # 初始化时加载所有注册的模型
    global model1, model2
    model1_path = Model.get_model_path("prediction-model-1")
    model2_path = Model.get_model_path("prediction-model-2")
    model1 = pickle.load(open(model1_path, "rb"))
    model2 = pickle.load(open(model2_path, "rb"))

def run(raw_data):
    try:
        # 解析输入数据(假设输入是JSON格式的数据集)
        input_data = json.loads(raw_data)["data"]
        df = pd.DataFrame(input_data)
        
        # 执行每个模型的预测
        pred_result_1 = model1.predict(df).tolist()
        pred_result_2 = model2.predict(df).tolist()
        
        # 打包多预测结果返回
        return {
            "prediction_task_1": pred_result_1,
            "prediction_task_2": pred_result_2
        }
    except Exception as e:
        return {"error": str(e)}

3. 配置推理环境

创建包含所有依赖的conda环境文件(conda.yml):

name: multi-model-env
dependencies:
  - python=3.8
  - pandas=1.3.5
  - scikit-learn=1.0.2
  - pip:
    - azureml-defaults

然后在代码中加载这个环境:

from azureml.core import Environment

env = Environment.from_conda_specification(name="multi-model-env", file_path="./conda.yml")

4. 部署为Web服务

使用Azure ML SDK将多个模型和评分脚本部署为ACI或AKS服务:

from azureml.core.webservice import AciWebservice, Webservice
from azureml.core.model import InferenceConfig

# 配置ACI部署参数
aci_config = AciWebservice.deploy_configuration(cpu_cores=1, memory_gb=1)

# 创建推理配置
inference_config = InferenceConfig(entry_script="score.py", environment=env)

# 获取已注册的模型
models = [Model(ws, "prediction-model-1"), Model(ws, "prediction-model-2")]

# 部署服务
service = Model.deploy(
    workspace=ws,
    name="multi-prediction-service",
    models=models,
    inference_config=inference_config,
    deployment_config=aci_config,
    overwrite=True
)

# 等待部署完成
service.wait_for_deployment(show_output=True)

5. 测试Web服务

部署完成后,可以通过SDK或HTTP请求测试多预测结果:

# 构造测试数据
test_data = {
    "data": [
        [1.2, 3.4, 5.6],
        [7.8, 9.0, 1.2]
    ]
}

# 调用服务
result = service.run(json.dumps(test_data))
print(result)
# 输出示例:{"prediction_task_1": [0, 1], "prediction_task_2": [12.5, 23.7]}

注意事项

  • 确保训练和推理环境的依赖版本完全一致,避免模型加载或预测时出现兼容性问题;
  • 如果模型数量较多,可以考虑使用Azure ML的模型集合(Model Collection)来统一管理;
  • 对于高并发场景,建议部署到AKS(Azure Kubernetes Service)而非ACI,以支持自动扩缩容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 03:16:13