首页
/ 使用 Azure ML SDK 完成云端 AutoML 模型训练、部署与消费:Data Science for Beginners 实战指南

使用 Azure ML SDK 完成云端 AutoML 模型训练、部署与消费:Data Science for Beginners 实战指南

2026-09-08 19:50:34作者:田桥桑Industrious

本指南围绕 Data-Science-For-Beginners 课程第 19 课(5-Data-Science-In-Cloud/19-Azure)的实战作业展开,讲解如何用代码(而非图形界面)在 Azure Machine Learning 平台上完成"训练 → 部署 → 消费"的完整模型生命周期:以 Heart Failure 心力衰竭预测数据集为例,使用 Azure ML SDK 创建工作区对象与实验、配置并提交 AutoML 任务、注册最佳模型、将其部署为 Azure Container Instances 上的 REST 端点,最后通过 SDK 发送真实样本完成在线推理。学完本指南,你将掌握 AutoMLConfig 各核心参数的实际含义、AutoMLRun 的模型检索与注册方法,以及独立完成"找数据 → 训模型 → 部署 → 消费"闭环作业的能力。

Azure ML Studio 中 Low code/No code 与 Azure ML SDK 两条模型生命周期路径的对比架构图

一、作业解读:从"看懂演示"到"独立复现"

课程正文(5-Data-Science-In-Cloud/19-Azure/README.md)演示了如何使用 Azure ML SDK 完成一次完整的模型训练、部署与消费;而本课的 assignment.md 则要求你脱离现成演示,独立完成同样的事情

环顾四周,找一份你感兴趣的数据(可从 Kaggle、Azure Open Datasets 等公开数据集目录获取),用 Azure ML SDK 训练另一个模型、部署它并消费它。

这意味着作业的核心交付物不是"看懂"课程代码,而是把课程里出现的 Workspace / Experiment / AmlCompute / AutoMLConfig / AutoMLRun / InferenceConfig / AciWebservice 这条 SDK 调用链,迁移到一份全新数据集上并跑通全流程。评分标准(Rubric)按三个等级递进:

等级 达成标准
Exemplary(优秀) 配置 AutoML 时真正翻阅过 SDK 文档、理解了各参数含义;用 Azure ML SDK 在数据集上跑通 AutoML 训练并查看模型解释(explanations);部署最佳模型并能通过 Azure ML SDK 消费它
Adequate(合格) 用 Azure ML SDK 跑通 AutoML 训练并查看模型解释;部署最佳模型并能通过 SDK 消费
Needs Improvement(待改进) 仅用 Azure ML SDK 跑通 AutoML 训练并部署、消费了最佳模型

三个等级的差别集中在两点:是否理解参数(对应下文 AutoMLConfig 参数详解)与是否查看模型解释(对应下文的 get_output() / 模型属性检视)。本文后续章节将完整覆盖这两点所需的全部代码与原理。

二、前置知识:Heart Failure 数据集与两种实现路线

课程将"心力衰竭预测"项目用两种方式实现:一种是上一课 18-Low-Code 讲解的 Low code/No code(图形界面)路线,另一种就是本课讲解的 Azure ML SDK(代码)路线。两者输入同一份数据集、完成同样的四步流程:训练模型、选择最佳模型、部署模型、消费端点,区别只在于操作手段:

维度 Low code/No code Azure ML SDK
编码能力要求 不需要 需要
开发速度 快、易上手 取决于编码熟练度
生产化程度

随着项目成长并需要生产化时,通过 GUI 逐一手工创建资源不可行,必须用代码把"资源创建 → 模型部署"全流程自动化——这正是掌握 Azure ML SDK 的价值所在,也是本作业的训练目标。

作业与课程共用的数据集为 Kaggle 公开的 Heart Failure Clinical Records(心力衰竭临床记录):一份 13 列(12 个特征 + 1 个目标变量)、299 行的表格数据,各字段如下(源自 18-Low-Code/README.md 的数据集说明表):

变量名 类型 含义 示例
age 数值 患者年龄 25
anaemia 布尔 是否贫血(红细胞或血红蛋白减少) 0 或 1
creatinine_phosphokinase 数值 血液中 CPK 酶水平 542
diabetes 布尔 是否患糖尿病 0 或 1
ejection_fraction 数值 每次收缩时离开心脏的血液百分比 45
high_blood_pressure 布尔 是否患高血压 0 或 1
platelets 数值 血液中血小板数量 149000
serum_creatinine 数值 血液中血清肌酐水平 0.5
serum_sodium 数值 血液中血清钠水平 140
sex 布尔 性别 0 或 1
smoking 布尔 是否吸烟 0 或 1
time 数值 随访期(天) 4
DEATH_EVENT(目标) 布尔 随访期内患者是否死亡 0 或 1

注意:作业要求你更换数据集,但课程示例以 DEATH_EVENT 作为标签列名。你换用新数据时,只需把代码中的数据集 key(heart-failure-records)与标签列名替换成自己的即可,SDK 调用流程完全一致。

三、环境准备:工作区、计算实例与 Notebook

3.1 创建 Azure ML 工作区(Workspace)

作业以 Jupyter Notebook 作为载体,因此你需要一个 Azure ML 工作区(Workspace,Azure Machine Learning 的顶层资源,集中管理数据、计算资源、代码、模型与各类工件)和一台计算实例。若尚未创建工作区,请按照上一课 18-Low-Code/README.md 中"2.1 Create an Azure ML workspace"的步骤在 Azure 门户创建(涉及订阅、资源组、工作区名称、区域,以及随附的存储账户、Key Vault、Application Insights 等关联资源)。

3.2 创建计算实例(Compute Instance)

进入 Azure ML 工作区(ml.azure.com)后,点击左侧 Compute 菜单,即可看到各类计算资源(计算实例、计算集群、推理集群、附加计算)。本作业只需一个计算实例(数据科学家进行数据探索与模型开发的开发工作站,本质是一台承载 Jupyter Notebook 的虚拟机):

Azure ML 工作区的 Compute 页面,展示计算实例/计算集群等选项卡与 + New 按钮

创建步骤:

  1. 点击 + New 按钮;
  2. 为计算实例命名;
  3. 选择配置:CPU 或 GPU、VM 规格与核数;
  4. 点击 Create 按钮,等待其启动。

计算实例创建完成后,在 Compute instances 列表中可看到其状态变为 Running,并列出 JupyterLab、Jupyter 等可用应用:

计算实例列表界面,一个名为 jupyter-demo 的实例处于 Running 状态

3.3 加载数据集(Dataset)

如果尚未把数据集上传到工作区,请参照上一课 18-Low-Code/README.md 的"2.3 Loading the Dataset":在 Studio 中点击 Datasets+ Create datasetFrom local files,上传本地 CSV;命名并设置类型;在 Schema 页将 anaemiadiabeteshigh_blood_pressuresexsmokingDEATH_EVENT 等特征的数据类型改为 Boolean,然后创建。

本作业的代码通过 ws.datasets['heart-failure-records'] 按**数据集名称(key)**取用数据,因此上传时务必确保数据集名称与代码中的 key 一致。

3.4 创建 Notebook

数据科学过程中 Notebook 承担着 Exploratory Data Analysis(EDA)、调用计算集群训练模型、调用推理集群部署端点等职责。在计算实例的 Applications 区域点击 Jupyter,勾选确认框继续,即可在新浏览器标签页打开 Jupyter 实例:

Jupyter Notebook 首页界面,包含 Files/Running 选项卡与 Upload、New 按钮

点击 New 创建 Python Notebook。当然,你也可以直接复用课程仓库中现成的可运行 Notebook:notebook.ipynb(其在 Azure ML Studio 的 Notebook 菜单中上传即可,配套参考实现位于 solution/notebook.ipynb)。该 Notebook 完整覆盖了从初始化工作区到消费端点的全部代码单元,是本节作业最直接的"脚手架"。

四、用 Azure ML SDK 训练模型

训练阶段按四步推进:初始化工作区 → 创建实验 → 准备计算集群 → 加载数据集,最后配置并提交 AutoML 任务。

4.1 SDK 导入与工作区初始化

课程 Notebook 首先集中导入所需模块(见 notebook.ipynb):

from azureml.core import Workspace, Experiment
from azureml.core.compute import AmlCompute
from azureml.train.automl import AutoMLConfig
from azureml.widgets import RunDetails
from azureml.core.model import InferenceConfig, Model
from azureml.core.webservice import AciWebservice

然后从持久化配置文件初始化工作区对象:

ws = Workspace.from_config()
print(ws.name, ws.resource_group, ws.location, ws.subscription_id, sep = '\n')

Workspace.from_config() 读取当前目录下的 config.json(内含订阅 ID、资源组、工作区名等),返回代表工作区的 Workspace 对象。若代码运行在 Azure ML 计算实例上且已关联工作区,配置文件会自动就位;在本地运行时,则需要把从 Studio 下载的 config.json 放在工作目录。

4.2 创建实验(Experiment)

experiment_name = 'aml-experiment'
experiment = Experiment(ws, experiment_name)

Experiment 是工作区中一系列运行(run)的容器,用于组织训练日志、指标、输出与脚本快照。命名规则:3–36 个字符,以字母或数字开头,只能包含字母、数字、下划线和连字符。若工作区中不存在同名实验,SDK 会自动创建。

4.3 创建计算集群(AmlCompute)

AutoML 训练需要一个计算集群(可弹性伸缩的 VM 集群,按需处理实验代码)。以下代码采用"先尝试获取、不存在则创建"的幂等写法,集群创建与就绪可能需要几分钟:

aml_name = "heart-f-cluster"
try:
    aml_compute = AmlCompute(ws, aml_name)
    print('Found existing AML compute context.')
except:
    print('Creating new AML compute context.')
    aml_config = AmlCompute.provisioning_configuration(vm_size = "Standard_D2_v2", min_nodes=1, max_nodes=3)
    aml_compute = AmlCompute.create(ws, name = aml_name, provisioning_configuration = aml_config)
    aml_compute.wait_for_completion(show_output = True)

cts = ws.compute_targets
compute_target = cts[aml_name]

关键参数说明:

  • vm_size:虚拟机规格。示例使用 Standard_D2_v2(2 vCPU 的通用型实例),可按预算与算力需求调整;
  • min_nodes / max_nodes:集群最少/最多节点数。min_nodes=1 保证有节点随时可用;max_nodes=3 限制自动扩缩容上限(上一课提示最大节点数建议不超过 3,节点越多训练越快但成本越高);
  • AmlCompute.create(...).wait_for_completion(show_output=True):同步等待集群创建完成并打印进度;
  • 最后通过 ws.compute_targets[aml_name] 取出计算目标对象,供 AutoML 配置引用。

4.4 加载数据集

key = 'heart-failure-records'
dataset = ws.datasets[key]
df = dataset.to_pandas_dataframe()
df.describe()

通过数据集 key 从工作区取回已上传的数据集对象,再用 to_pandas_dataframe() 转成 Pandas DataFrame 进行快速描述性统计(EDA 起点)。

4.5 AutoML 配置与训练提交

自动化机器学习(AutoML)自动迭代算法与超参数组合,替你把"调参试模型"的耗时工作自动化。配置的核心是 AutoMLConfig 类,课程对所用参数给出了明确语义(见 README.md 2.5.2 节):

参数 含义
experiment_timeout_minutes 实验允许运行的最大时长(分钟),超时自动停止并产出可用结果
max_concurrent_iterations 允许的最大并发训练迭代数
primary_metric 用于评判实验状态的主指标
compute_target AutoML 实验运行的计算目标
task 任务类型,可取 classificationregressionforecasting
training_data 实验使用的训练数据,应包含训练特征与标签列(可选样本权重列)
label_column_name 标签列名
path Azure ML 项目文件夹的完整路径
enable_early_stopping 短期指标未改善时是否提前终止
featurization 是否自动执行特征化,或使用自定义特征化
debug_log 写入调试信息的日志文件

实际配置代码如下:

project_folder = './aml-project'

automl_settings = {
    "experiment_timeout_minutes": 20,
    "max_concurrent_iterations": 3,
    "primary_metric" : 'AUC_weighted'
}

automl_config = AutoMLConfig(compute_target=compute_target,
                             task = "classification",
                             training_data=dataset,
                             label_column_name="DEATH_EVENT",
                             path = project_folder,
                             enable_early_stopping= True,
                             featurization= 'auto',
                             debug_log = "automl_errors.log",
                             **automl_settings
                            )

对本示例含义的拆解:

  • task="classification"DEATH_EVENT 是二分类布尔标签,故选择分类任务(回归/预测任务需相应调整);
  • primary_metric='AUC_weighted':以加权 AUC(ROC 曲线下面积)作为模型优劣的评判主指标,适合类别可能不均衡的分类问题;
  • enable_early_stopping=True:若指标短期内不再改善,AutoML 提前停止,节省计算费用;
  • featurization='auto':自动执行缺失值处理、编码、缩放等特征化步骤;
  • debug_log="automl_errors.log":调试信息落盘,便于排错;
  • **automl_settings:把上述超参字典展开传入,保持配置集中可读。

作业加分点(对应 Rubric 的 Exemplary 等级):完成作业时,请针对你的数据集重新审视这些参数——例如新数据集的标签是回归目标就应把 task 改为 regression、指标改为 RMSE 等;experiment_timeout_minutesmax_concurrent_iterations 直接决定训练时长与并发成本。去 SDK 文档中确认你所选参数的可取值与默认值,是达到"优秀"等级的关键。

配置就绪后提交实验。这一步会异步在远端计算集群上执行,时长可能从十几分钟到一小时,取决于集群规模:

remote_run = experiment.submit(automl_config)

随后可用 RunDetails 控件在 Notebook 中内嵌展示各轮迭代的运行详情:

from azureml.widgets import RunDetails
RunDetails(remote_run).show()

五、保存最佳模型:get_output 与模型注册

remote_runAutoMLRun 类型的对象,其 get_output() 方法返回最佳运行与对应的已拟合模型

best_run, fitted_model = remote_run.get_output()

打印 fitted_model 可查看最佳模型的算法与参数;用 get_properties() 可查看该运行记录的属性(如模型名、指标等):

best_run.get_properties()

注册模型是部署的前提——register_model 把模型写入工作区的模型注册表,赋予其版本与元数据:

model_name = best_run.properties['model_name']
script_file_name = 'inference/score.py'
best_run.download_file('outputs/scoring_file_v_1_0_0.py', 'inference/score.py')
description = "aml heart failure project sdk"
model = best_run.register_model(model_name = model_name,
                                model_path = './outputs/',
                                description = description,
                                tags = None)

这里发生了两件重要的事:

  1. 下载推理脚本:AutoML 在运行输出 outputs/ 中生成开箱即用的评分脚本 scoring_file_v_1_0_0.pydownload_file 将其保存为本地 inference/score.py,稍后作为部署的入口脚本(entry script);
  2. 注册模型register_model 返回注册后的 Model 对象,model_path='./outputs/' 指向模型工件所在目录,description 用于备注,tags 可附加自定义标签(此处为 None)。

六、部署模型:InferenceConfig 与 ACI Web 服务

模型注册后即可部署。部署涉及两个配置类:

  • InferenceConfig:表示部署所用自定义环境的配置(入口脚本 + 运行环境),此处环境直接取自 AutoML 最佳运行:environment=best_run.get_environment(),保证评分脚本与训练时的依赖环境一致;
  • AciWebservice:代表部署在 Azure Container Instances(ACI) 上的 Web 服务端点。部署服务由模型、脚本与关联文件构成,最终呈现为一个负载均衡、带 REST API 的 HTTP 端点,可向其发送数据并接收模型预测。

部署代码如下(使用 Model.deploy 方法):

inference_config = InferenceConfig(entry_script=script_file_name, environment=best_run.get_environment())

aciconfig = AciWebservice.deploy_configuration(cpu_cores = 1,
                                               memory_gb = 1,
                                               tags = {'type': "automl-heart-failure-prediction"},
                                               description = 'Sample service for AutoML Heart Failure Prediction')

aci_service_name = 'automl-hf-sdk'
aci_service = Model.deploy(ws, aci_service_name, [model], inference_config, aciconfig)
aci_service.wait_for_deployment(True)
print(aci_service.state)

参数要点:

  • entry_script:评分脚本路径,即上一步下载的 inference/score.py
  • cpu_cores / memory_gb:为端点分配的计算资源(此处 1 核 1 GB,可据请求量调整);
  • tags / description:端点的元数据标识;
  • Model.deploy(ws, aci_service_name, [model], inference_config, aciconfig):把模型列表(此处单个模型)连同推理配置、部署配置发布为命名服务;
  • wait_for_deployment(True):阻塞等待部署完成并输出进度;aci_service.state 可查询服务状态(部署通常需要几分钟,可同时在 Azure ML 门户观察)。

七、消费端点:发送样本并解读预测

端点就绪后即可消费。先构造一条患者样本输入(字段与数据集特征一一对应,均为字符串形式):

data = {
    "data":
    [
        {
            'age': "60",
            'anaemia': "false",
            'creatinine_phosphokinase': "500",
            'diabetes': "false",
            'ejection_fraction': "38",
            'high_blood_pressure': "false",
            'platelets': "260000",
            'serum_creatinine': "1.40",
            'serum_sodium': "137",
            'sex': "false",
            'smoking': "false",
            'time': "130",
        },
    ],
}

test_sample = str.encode(json.dumps(data))

把样本序列化为 JSON 字符串后再编码为字节,通过服务的 run() 方法发送给端点进行在线预测:

response = aci_service.run(input_data=test_sample)
response

预期输出为 '{"result": [false]}'false 表示该输入样本对应患者在随访期内发生心力衰竭死亡的风险不高(若为 true 则表示风险高)。至此,"训练 → 部署 → 消费"的 SDK 闭环已完整跑通。

八、收尾:清理资源与延伸挑战

8.1 清理资源

注意:项目结束后务必删除所有资源(计算实例、计算集群、部署的服务、工作区及其关联的存储账户等),否则 Azure 订阅会持续产生费用——课程在 Low code 一课中同样提示:只要工作区存在于订阅中,数据存储就会产生小额费用。

8.2 延伸挑战:探索 Pipeline 类

课程给出的进阶挑战是:翻阅 Azure ML SDK 文档,找到 Pipeline。Pipeline 是"可由多个步骤组成的、作为工作流执行"的集合,可将数据准备、训练、评估、部署等步骤串联成可复用的自动化流水线。SDK 文档中搜索 Pipeline 关键字即可定位到 azureml.pipeline.core.Pipeline 类——这是把本课单步流程升级为生产级 MLOps 工作流的自然下一步。

8.3 作业完成清单

对照 assignment.md 的评分标准,一份完整的作业应包含:

  1. 选定一份新数据集(Kaggle、Azure Open Datasets 或其他来源),理解其字段含义与目标变量;
  2. Workspace / Experiment / AmlCompute 完成环境初始化,把数据集上传至工作区并通过 ws.datasets[key] 取用;
  3. 依据新数据集重新审视 AutoMLConfig 参数(任务类型、主指标、超时与并发、标签列名等),提交 AutoML 训练;
  4. 通过 remote_run.get_output() 检视最佳模型,查看模型解释/属性
  5. 注册模型并用 InferenceConfig + AciWebservice 部署,最后用 aci_service.run() 完成消费并解读预测结果;
  6. 使用完毕后清理全部资源。

完成以上六步,即达到 Rubric 中 Exemplary 的标准——不仅"会用",而且"懂参数、能解释、可迁移"。

九、可继续深入阅读的仓库资源

登录后查看全文
热门项目推荐
相关项目推荐

项目优选

收起
kernelkernel
deepin linux kernel
C
33
18
ops-transformerops-transformer
本项目是CANN提供的transformer类大模型算子库,实现网络在NPU上加速计算。
C++
1.14 K
2.75 K
pytorchpytorch
作为 Ascend for PyTorch 社区的核心组件,TorchNPU 是昇腾专为 PyTorch 打造的深度学习适配插件,使 PyTorch 框架能够直接调用昇腾 NPU,为开发者提供昇腾 AI 处理器的超强算力。
Python
857
1.35 K
docsdocs
暂无描述
Markdown
898
5.82 K
ops-nnops-nn
本项目是CANN提供的神经网络类计算算子库,实现网络在NPU上加速计算。
C++
921
1.84 K
jiuwenswarmjiuwenswarm
JiuwenSwarm 是一款基于openJiuwen开发的智能AI Agent,它能够将大语言模型的强大能力,通过你日常使用的各类通讯应用,直接延伸至你的指尖。
Python
3.8 K
1.02 K
kernelkernel
openEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。
C
531
596
cann-learning-hubcann-learning-hub
CANN 学习中心仓,支持在线互动运行、边学边练,提供教程、示例与优化方案,一站式助力昇腾开发者快速上手。
Jupyter Notebook
1.02 K
519
ops-mathops-math
本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。
C++
1.36 K
1.46 K
AscendNPU-IRAscendNPU-IR
AscendNPU-IR是基于MLIR(Multi-Level Intermediate Representation)构建的,面向昇腾亲和算子编译时使用的中间表示,提供昇腾完备表达能力,通过编译优化提升昇腾AI处理器计算效率,支持通过生态框架使能昇腾AI处理器与深度调优
C++
548
391