news 2026/9/12 3:32:27

使用 Azure ML SDK 在云端构建机器学习工作流:Data-Science-For-Beginners 第 19 课全流程实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
使用 Azure ML SDK 在云端构建机器学习工作流:Data-Science-For-Beginners 第 19 课全流程实战

使用 Azure ML SDK 在云端构建机器学习工作流:Data-Science-For-Beginners 第 19 课全流程实战

【免费下载链接】Data-Science-For-Beginners10 Weeks, 20 Lessons, Data Science for All!项目地址: https://gitcode.com/GitHub_Trending/da/Data-Science-For-Beginners

本指南以 Data-Science-For-Beginners 课程第 5 部分「云端数据科学」的第 19 课为蓝本,系统讲解如何纯代码化地使用 Azure Machine Learning SDK 完成"训练 → 部署 → 消费"一条完整的数据科学流水线:以心力衰竭(Heart Failure)预测项目为载体,覆盖工作区创建、计算资源编排、AutoML 自动训练、最佳模型注册、ACI Web 服务部署与 RESTful endpoint 调用。读完本文,你将掌握 Azure ML SDK 的核心对象模型(Workspace / Experiment / Compute / Dataset / AutoML / Endpoint),并能够将这套代码化工作流迁移到自己的数据集与业务场景中,为生产级 MLOps 打基础。

1. 为什么用代码而非 Low-Code 方式操作 Azure ML?

在 第 18 课(Low-Code 方式) 中,我们已经通过 Azure ML Studio 的图形界面完成过"上传数据 → AutoML 训练 → 部署"的流程。那一课的结论很明确:Low-Code/No-Code 适合快速验证项目可行性与搭建 POC(Proof Of Concept),无需任何代码基础;但当项目成长、需要生产化交付时,靠 GUI 逐个点击创建资源并不可行,必须把"资源创建 → 模型训练 → 模型部署"全流程编程化、自动化

Azure Machine Learning SDK 正是为此而生:数据科学家与 AI 开发者可以用它在任意 Python 环境(Jupyter Notebook、Visual Studio Code 或任意 Python IDE)中构建并运行机器学习工作流。其核心能力覆盖:

  • 数据集管理:探索、准备并管理机器学习实验中数据集的全生命周期;
  • 云资源编排:管理云上资源,用于监控、记录并组织机器学习实验;
  • 弹性训练:本地或云端训练模型,支持 GPU 加速;
  • 自动化机器学习(AutoML):只需提供配置参数与训练数据,SDK 会自动迭代多种算法与超参数组合,找到最适合预测任务的最佳模型;
  • 服务化部署:将训练好的模型部署为可被任意应用消费的 RESTful Web 服务。

两条路线的对比如下(引自 18-Low-Code 课程):

对比维度Low code/No codeAzure ML SDK
代码能力要求不需要需要
开发时间快速简单取决于代码水平
生产就绪

本课与第 18 课使用完全相同的心力衰竭预测数据集,但改用 Azure ML SDK 以代码方式完成全流程,两张方式的项目架构对比参见下图:

1.1 心力衰竭预测项目与数据集

项目背景沿用 第 18 课 的介绍:心血管疾病(CVD)是全球第一大死因,约占全球死亡总数的 31%,烟草、不健康饮食、肥胖、缺乏运动、酗酒等环境与行为风险因素都可作为建模特征,若能量化发病概率,将有助于对高风险人群进行提前干预。

本项目使用 Kaggle 公开的 Heart Failure 数据集:这是一个表格型数据集,共13 列(12 个特征 + 1 个目标变量)299 行。各字段含义如下:

#变量名类型说明示例
1age数值患者年龄25
2anaemia布尔是否贫血(红细胞或血红蛋白减少)0 或 1
3creatinine_phosphokinase数值血液中 CPK 酶水平542
4diabetes布尔是否患糖尿病0 或 1
5ejection_fraction数值每次收缩时血液离开心脏的百分比45
6high_blood_pressure布尔是否患有高血压0 或 1
7platelets数值血液中的血小板数量149000
8serum_creatinine数值血液中血清肌酐水平0.5
9serum_sodium数值血液中血清钠水平jun
10sex布尔性别(女或男)0 或 1
11smoking布尔是否吸烟0 或 1
12time数值随访周期(天)4
21DEATH_EVENT(目标)布尔随访期间患者是否死亡0 或 1

目标变量DEATH_EVENT是一个二分类标签,因此本项目的 AutoML 任务类型为classification(分类)

2. 用 Azure ML SDK 训练模型

为简化操作,本课直接在 Jupyter Notebook 中运行代码,这隐含一个前提:你已拥有一个 Workspace 和一个计算实例。若尚未准备,可按下面 2.1~2.3 节完成;若已就绪,可直接跳到 2.4 创建 Notebook。

2.1 创建 Azure ML Workspace

Workspace 是 Azure Machine Learning 的顶层资源,是所有训练运行记录(日志、指标、输出、脚本快照)与模型产物的集中存放地,也是判断"哪次训练产生了最佳模型"的依据。

如果你还没有 Workspace,请按照 第 18 课 2.1 节"创建 Azure ML workspace" 的指引操作,要点如下:

  1. 使用与 Azure 订阅关联的 Microsoft 凭据登录 Azure 门户;
  2. 选择+Create a resource,搜索 "Machine Learning" 并选择 Machine Learning 磁贴,点击创建;
  3. 填写配置:
    • Subscription:你的 Azure 订阅
    • Resource group:新建或选择资源组
    • Workspace name:输入全局唯一的工作区名称
    • Region:选择离你最近的地理区域
    • Storage account / Key vault / Application insights:记录默认新建的配套资源
    • Container registry:先选 None(首次向容器部署模型时会自动创建)
  4. 等待创建工作区完成(通常需要几分钟),进入工作区后启动 Azure Machine Learning studio(浏览器打开https://ml.azure.com)并登录;
  5. 在 Studio 中通过左上角 ☰ 图标切换各管理页面。

注意:只要 Workspace 存在于订阅中,就会因数据存储产生少量费用,不再使用时建议删除。

2.2 创建计算实例(Compute Instance)

进入之前创建的 Azure ML Workspace,打开 Compute 菜单即可看到各类可用计算资源。为 Jupyter Notebook 准备一个计算实例的步骤如下:

  1. 点击+ New按钮;
  2. 为计算实例命名;
  3. 选择配置:CPU 或 GPU、VM 大小、核心数量;
  4. 点击Create按钮。

关于 CPU/GPU 的选择(详见 第 18 课 2.2.1 节):CPU 擅长快速处理广泛任务但并发度有限;GPU 专为并行计算设计,更适合深度学习任务。GPU 更贵但并发度高,训练深度学习模型更快。计算资源选型本质是时间与金钱的权衡:预算有限、时间充裕就选小集群;反之选大集群。此外还有 Dedicated(专用、不可中断)与 Low-Priority(可被抢占、更便宜)之分。

创建完成后,这个计算实例将用于 2.4 节 中启动 Notebook。

2.3 加载数据集

如果你还没有把数据集上传到 Azure ML,请参照 第 18 课 2.3 节"加载数据集" 的操作:在 Studio 左侧菜单点击Datasets+ Create dataset→ 选择 "From local files",上传本地下载的 Kaggle 数据集;为数据集命名、选择类型并填写描述;在 Schema 页将anaemiadiabeteshigh_blood_pressuresexsmokingDEATH_EVENT等特征的数据类型改为Boolean。上传完成后记下数据集名称(本项目为heart-failure-records),后续代码将按名称从 Workspace 中读取。

2.4 创建 Notebook

Notebook 是数据科学流程中极其重要的一环,可用于:开展探索性数据分析(EDA)、向计算集群发起模型训练请求、向推理集群发起端点部署请求。

创建 Notebook 需要一个提供 Jupyter 服务的计算节点:

  1. 返回 Azure ML Workspace,点击 Compute instances,在列表中应能看到 2.2 节 创建的计算实例;
  2. 在 Applications 区域点击Jupyter选项;
  3. 勾选 "Yes, I understand" 并点击 Continue 按钮;

  1. 新浏览器标签页会打开 Jupyter Notebook 服务,点击New按钮创建笔记本;

提示:也可以跳过手动编写,直接上传仓库中已做好的 notebook.ipynb 到 Azure ML Studio:点击 "Notebook" 菜单上传即可。该 Notebook 与本课代码逐节对应,还包含print(ws.name, ws.resource_group, ws.location, ws.subscription_id)等用于核对工作区信息的语句。

2.5 训练模型

本节代码全程可在 Notebook 中运行。如有疑问,可随时查阅 Azure ML SDK 文档 了解各模块细节。

2.5.1 设置 Workspace、Experiment、计算集群与数据集

首先从配置文件加载Workspace(配置文件config.json需存在于工作目录):

from azureml.core import Workspace ws = Workspace.from_config()

该调用返回一个代表工作区的Workspace对象。接着创建Experiment(实验是训练的容器,用于组织与追踪多次运行):

from azureml.core import Experiment experiment_name = 'aml-experiment' experiment = Experiment(ws, experiment_name)

从 Workspace 获取或创建实验的方式是按名称请求。实验名称有命名约束:长度 3–36 个字符,以字母或数字开头,只能包含字母、数字、下划线和连字符。若工作区中不存在同名实验,会自动创建新实验。

接下来创建用于训练的计算集群。注意该步骤可能需要几分钟(首次创建时),代码做了"已存在则复用、不存在则创建"的幂等处理:

from azureml.core.compute import AmlCompute 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":虚拟机规格,决定 RAM、磁盘、核心数与时钟频率,越大越贵、性能越好;
  • min_nodes = 1/max_nodes = 3:最小/最大节点数。最小节点数为 0 时,集群空闲不产生费用;最大节点数越大训练越快,官方建议最大不超过 3;
  • wait_for_completion(show_output = True):同步等待集群创建完成并输出进度。

最后,按名称从 Workspace 获取数据集,并转为 Pandas DataFrame 进行快速预览:

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

注意:数据集键名必须与上传时设置的数据集名称完全一致(本课为heart-failure-records,见 notebook.ipynb 中的key变量)。

2.5.2 AutoML 配置与训练

AutoML 配置的核心是AutoMLConfig类。它支持的参数很多,本项目使用以下关键参数:

参数作用
experiment_timeout_minutes实验允许运行的最大时长(分钟),超时自动停止并产出可用结果
max_concurrent_iterations实验允许的并行训练迭代数上限
primary_metric用于判定实验优劣的主要指标
compute_target运行 AutoML 实验的 Azure ML 计算目标
task任务类型,取值classification/regression/forecasting,取决于要解决的 AutoML 问题类型
training_data实验所用训练数据,须同时包含训练特征与标签列(可选样本权重列)
label_column_name标签列的名称
pathAzure ML 项目文件夹的完整路径
enable_early_stopping若短期评分无提升是否提前终止训练
featurization是否自动执行特征化步骤,或使用自定义特征化
debug_log写入调试信息的日志文件路径

配置代码如下:

from azureml.train.automl import AutoMLConfig 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 )

配置要点解读:

  • 因为目标是预测DEATH_EVENT(是否死亡,布尔二分类),所以taskclassificationprimary_metric使用加权 AUC(AUC_weighted);
  • experiment_timeout_minutes = 20限定实验最多运行 20 分钟,防止费用失控;
  • enable_early_stopping = True在评分不再提升时提前收尾;
  • featurization = 'auto'让 AutoML 自动完成特征工程(缺失值填充、编码、归一化等)。

配置就绪后,提交实验即可开始训练。此步骤最长可能需要约一小时,具体取决于集群规模

remote_run = experiment.submit(automl_config)

训练期间,可以用RunDetailswidget 在 Notebook 内实时观察各迭代实验的进度与结果:

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

3. 用 Azure ML SDK 部署模型并消费 Endpoint

3.1 保存最佳模型

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 生成的模型名model_name
  2. 将 AutoML 自动生成的评分脚本outputs/scoring_file_v_1_0_0.py下载到本地inference/score.py,作为后续部署的入口脚本(entry script);
  3. ./outputs/中的模型产物注册到工作区模型仓库。

3.2 部署模型

模型保存好后,用InferenceConfigAciWebservice完成部署:

  • InferenceConfig:表示用于部署的自定义环境配置(包含入口脚本与运行环境);
  • AciWebservice:表示部署在 Azure Container Instances(ACI)上作为 Web 服务端点的机器学习模型。部署服务由模型、脚本及相关文件构成,最终产物是一个负载均衡的 HTTP 端点,对外提供 REST API——向 API 发送数据即可拿到模型返回的预测结果。

使用deploy方法执行部署:

from azureml.core.model import InferenceConfig, Model from azureml.core.webservice import AciWebservice 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);
  • environment = best_run.get_environment():直接复用最佳模型训练时的 Python 环境,保证依赖一致;
  • cpu_cores = 1memory_gb = 1:ACI 容器的 CPU 与内存配额;
  • aci_service_name = 'automl-hf-sdk':Web 服务名称,须在区域内唯一;
  • wait_for_deployment(True):同步等待部署完成并打印aci_service.state(Healthy 表示部署成功)。

此步骤需要几分钟时间,部署状态也可以在 Azure ML 门户中查看。

3.3 消费 Endpoint

部署完成后即可向端点发送样本输入获取预测。先构造一个患者样本(注意所有值以字符串形式给出,与评分脚本的输入约定一致):

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))

然后用run()方法把输入发给模型进行预测:

response = aci_service.run(input_data=test_sample) response

预期输出为'{"result": [false]}'——即该患者输入经端点预测结果为false,表示此人大概率不会发生心脏事件。至此,你就完成了"用 Azure ML SDK 训练、部署并消费一个云端模型"的完整闭环。

注意:项目结束后请务必删除所有相关资源(部署服务、计算集群、Workspace),避免持续产生云费用。

4. 延伸挑战:探索 SDK 的 Pipeline 能力

本课只展示了 Azure ML SDK 的一小部分能力。一个值得自主探索的方向是Pipeline:通过查阅 Azure ML SDK 文档(在搜索栏输入关键词 "Pipeline"),可以找到azureml.pipeline.core.Pipeline类。Pipeline 是若干步骤(Step)的集合,可作为一个完整工作流被编排执行——它是把"数据准备 → 训练 → 评估 → 部署"串成自动化流水线的基础设施,也是迈向生产级 MLOps 的关键一步。

5. 配套练习与巩固

为巩固所学,可以完成仓库中的 Assignment(使用 Azure ML SDK 的数据科学项目):自行寻找数据集(如 Kaggle 或 Azure Open Datasets),用本课同样的 AutoML 流程完成训练、部署与消费。评分标准(Rubric)分为三档:

  • 优秀:配置 AutoML 时查阅了 SDK 文档、探索可用参数;通过 AutoML 完成训练并检查了模型解释(model explanations);部署最佳模型并成功消费;
  • 合格:完成训练 + 模型解释 + 部署 + 消费;
  • 需改进:仅完成训练 + 部署 + 消费。

本课全部代码均可在 19-Azure 目录 中找到(notebook.ipynb),前后课程(18-Low-Code、17-Introduction)则分别提供了 Low-Code 对照实现与云端数据科学背景知识。建议结合第 18 课对比两种方式的异同,并尝试用 SDK 复现第 18 课中你曾用 GUI 完成过的全部步骤,从而真正理解"代码化 MLOps"的优势所在。

【免费下载链接】Data-Science-For-Beginners10 Weeks, 20 Lessons, Data Science for All!项目地址: https://gitcode.com/GitHub_Trending/da/Data-Science-For-Beginners

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/12 3:32:02

PCA9698 I2C GPIO扩展驱动剖析:从寄存器到Linux内核移植

简介:PCA9698是NXP推出的一款I2C总线GPIO扩展芯片,支持8路独立方向配置、上拉/下拉电阻、中断输出及宽范围逻辑电平,可适应不同电源与工作环境,广泛适用于工业自动化、智能家居和物联网设备。这套资源提供面向Linux 2.6.28的驱动源…

作者头像 李华
网站建设 2026/9/12 3:31:07

三相DC-AC变换器工程级参数设计方法

1. 项目概述:从实验室台架到工程落地的三相DC-AC变换器设计全解析“上交大三相DC‑AC变换器参数设计及其他问题(更新版)”——这个标题一出来,我就知道,这绝不是一份简单的课程作业或仿真截图。它背后站着的是上海交通…

作者头像 李华
网站建设 2026/9/12 3:30:01

农业AI工程化实践:YOLO+SpringBoot苹果成熟度检测系统

1. 项目概述:这不是一个“YOLO堆砌大赛”,而是一次面向农业场景的工程化落地实践你搜“YOLOv8下载”“YOLOv10 yaml文件怎么创建”“SpringBoot配置”这些词,大概率正被三件事卡住:第一,网上教程全是单点Demo&#xff…

作者头像 李华
网站建设 2026/9/12 3:29:58

Excel模板大全:从基础操作到财务进销存的实战指南

作为一个整天和Excel打交道的人,我电脑里存了几百个模板,从最基础的考勤表、收支流水,到财务专用的利润表、进销存台账,再到各种函数计算公式模板,基本覆盖了日常工作里八九成的场景。今天就把这批Excel常用模板和学习…

作者头像 李华