使用 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 code | Azure ML SDK |
|---|---|---|
| 代码能力要求 | 不需要 | 需要 |
| 开发时间 | 快速简单 | 取决于代码水平 |
| 生产就绪 | 否 | 是 |
本课与第 18 课使用完全相同的心力衰竭预测数据集,但改用 Azure ML SDK 以代码方式完成全流程,两张方式的项目架构对比参见下图:
1.1 心力衰竭预测项目与数据集
项目背景沿用 第 18 课 的介绍:心血管疾病(CVD)是全球第一大死因,约占全球死亡总数的 31%,烟草、不健康饮食、肥胖、缺乏运动、酗酒等环境与行为风险因素都可作为建模特征,若能量化发病概率,将有助于对高风险人群进行提前干预。
本项目使用 Kaggle 公开的 Heart Failure 数据集:这是一个表格型数据集,共13 列(12 个特征 + 1 个目标变量)、299 行。各字段含义如下:
| # | 变量名 | 类型 | 说明 | 示例 |
|---|---|---|---|---|
| 1 | age | 数值 | 患者年龄 | 25 |
| 2 | anaemia | 布尔 | 是否贫血(红细胞或血红蛋白减少) | 0 或 1 |
| 3 | creatinine_phosphokinase | 数值 | 血液中 CPK 酶水平 | 542 |
| 4 | diabetes | 布尔 | 是否患糖尿病 | 0 或 1 |
| 5 | ejection_fraction | 数值 | 每次收缩时血液离开心脏的百分比 | 45 |
| 6 | high_blood_pressure | 布尔 | 是否患有高血压 | 0 或 1 |
| 7 | platelets | 数值 | 血液中的血小板数量 | 149000 |
| 8 | serum_creatinine | 数值 | 血液中血清肌酐水平 | 0.5 |
| 9 | serum_sodium | 数值 | 血液中血清钠水平 | jun |
| 10 | sex | 布尔 | 性别(女或男) | 0 或 1 |
| 11 | smoking | 布尔 | 是否吸烟 | 0 或 1 |
| 12 | time | 数值 | 随访周期(天) | 4 |
| 21 | DEATH_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" 的指引操作,要点如下:
- 使用与 Azure 订阅关联的 Microsoft 凭据登录 Azure 门户;
- 选择+Create a resource,搜索 "Machine Learning" 并选择 Machine Learning 磁贴,点击创建;
- 填写配置:
- Subscription:你的 Azure 订阅
- Resource group:新建或选择资源组
- Workspace name:输入全局唯一的工作区名称
- Region:选择离你最近的地理区域
- Storage account / Key vault / Application insights:记录默认新建的配套资源
- Container registry:先选 None(首次向容器部署模型时会自动创建)
- 等待创建工作区完成(通常需要几分钟),进入工作区后启动 Azure Machine Learning studio(浏览器打开
https://ml.azure.com)并登录; - 在 Studio 中通过左上角 ☰ 图标切换各管理页面。
注意:只要 Workspace 存在于订阅中,就会因数据存储产生少量费用,不再使用时建议删除。
2.2 创建计算实例(Compute Instance)
进入之前创建的 Azure ML Workspace,打开 Compute 菜单即可看到各类可用计算资源。为 Jupyter Notebook 准备一个计算实例的步骤如下:
- 点击+ New按钮;
- 为计算实例命名;
- 选择配置:CPU 或 GPU、VM 大小、核心数量;
- 点击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 页将anaemia、diabetes、high_blood_pressure、sex、smoking、DEATH_EVENT等特征的数据类型改为Boolean。上传完成后记下数据集名称(本项目为heart-failure-records),后续代码将按名称从 Workspace 中读取。
2.4 创建 Notebook
Notebook 是数据科学流程中极其重要的一环,可用于:开展探索性数据分析(EDA)、向计算集群发起模型训练请求、向推理集群发起端点部署请求。
创建 Notebook 需要一个提供 Jupyter 服务的计算节点:
- 返回 Azure ML Workspace,点击 Compute instances,在列表中应能看到 2.2 节 创建的计算实例;
- 在 Applications 区域点击Jupyter选项;
- 勾选 "Yes, I understand" 并点击 Continue 按钮;
- 新浏览器标签页会打开 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 | 标签列的名称 |
path | Azure 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(是否死亡,布尔二分类),所以task选classification,primary_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_run是AutoMLRun类型的对象,其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)这段代码做了三件事:
- 从运行属性中读取 AutoML 生成的模型名
model_name; - 将 AutoML 自动生成的评分脚本
outputs/scoring_file_v_1_0_0.py下载到本地inference/score.py,作为后续部署的入口脚本(entry script); - 将
./outputs/中的模型产物注册到工作区模型仓库。
3.2 部署模型
模型保存好后,用InferenceConfig与AciWebservice完成部署:
- 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 = 1、memory_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),仅供参考