使用 Azure ML SDK 完成端到端数据科学项目:从 AutoML 训练、模型解释到部署消费
【免费下载链接】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 课程第 19 课(5-Data-Science-In-Cloud/19-Azure)的课后作业为核心,完整讲解如何用 Azure Machine Learning SDK(Python)以纯代码方式复现"低代码/无代码"课程中的心衰预测项目:从加载数据集、配置 AutoML、提交远程训练、查看模型解释、注册最佳模型,到部署为 ACI Web 服务端点并用 SDK 消费预测。学完后你将掌握一条可迁移到任意表格数据集上的 Azure ML SDK 端到端实战链路。
1. 作业任务解读:用 SDK 复刻 Low Code 流程
上一课(5-Data-Science-In-Cloud/18-Low-Code/README.md)通过 Azure ML Studio 图形界面完成了"训练 → 部署 → 消费"三步。本课作业要求你用 Azure ML SDK 在 Python 环境中做完全相同的事:寻找一份新数据集,用它再训练一个模型、部署并消费。两者流程一致,区别只在实现方式——这也是课程刻意设计的对照:
| 对比维度 | Low code/No code | Azure ML SDK |
|---|---|---|
| 代码能力要求 | 不需要 | 需要 |
| 开发速度 | 快速简单 | 取决于代码功底 |
| 生产就绪 | 否 | 是 |
作业原文(translations/en/5-Data-Science-In-Cloud/19-Azure/assignment.md)指出:项目进入生产化阶段后,通过 GUI 手工创建资源不可行,必须用 SDK 以编程方式自动化"从资源创建到模型部署"的每个环节,这正是本作业的价值所在。示例数据集可在 Kaggle 或 Azure Open Datasets 目录中检索获取。
下面的完整实现以课程自带的心衰预测数据集为演示载体,可直接对照仓库中的 notebook.ipynb 逐步运行;作业要求的数据集可按同样流程替换。
2. 前置准备:Workspace、Compute Instance 与数据集
作业的前置条件沿用上一课(5-Data-Science-In-Cloud/18-Low-Code/README.md)已建立的资源,无需从零开始:
- Workspace:Azure ML 的顶层资源,集中管理训练运行历史、日志、指标、输出与脚本快照。若尚未创建,按上一课 2.1 节的步骤在 Azure 门户中创建(注意:Workspace 存续期间会产生少量存储费用,用完后建议删除)。
- Compute Instance:充当 Jupyter Notebook 的开发工作站。在 Azure ML Studio 的 Compute 菜单中点击+ New,命名后选择 CPU/GPU、VM 规格与核心数即可创建,界面如下图所示:
- 数据集:将 Kaggle 的 Heart Failure 数据集(13 列:12 个特征 + 1 个目标列,299 行)通过 Studio 的 Datasets 菜单上传,并在 Schema 中把
anaemia、diabetes、high_blood_pressure、sex、smoking、DEATH_EVENT设为 Boolean 类型。上传时给数据集命名(如heart-failure-records),SDK 将按此名称从 Workspace 中取用。
两种构建方式的整体对照关系见下图:两者共用同一个数据集输入,AutoML 训练、选优、部署、消费四个阶段一一对应:
3. Notebook 环境:导入 SDK 依赖
在 Compute Instance 上打开 Jupyter(Applications 区域点击 Jupyter,勾选确认后进入,点击New创建 notebook),或直接上传仓库提供的 notebook.ipynb。首先一次性导入本作业会用到的全部 Azure ML SDK 模块:
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这些 import 覆盖了整条链路:Workspace 负责连接云资源,Experiment 组织运行记录,AmlCompute 提供训练算力,AutoMLConfig 配置自动机器学习,InferenceConfig/AciWebservice/Model 负责部署与消费。
4. 训练阶段:Workspace、Experiment、Compute Cluster 与 Dataset
4.1 初始化 Workspace 并创建 Experiment
从配置文件加载 Workspace(config.json 需已存在并包含订阅、资源组、工作区信息):
ws = Workspace.from_config() print(ws.name, ws.resource_group, ws.location, ws.subscription_id, sep = '\n')然后按实验名获取或创建 Experiment。注意实验名的约束:长度 3–36 个字符,以字母或数字开头,只能包含字母、数字、下划线和连字符;Workspace 中不存在同名实验时会自动新建:
experiment_name = 'aml-experiment' experiment = Experiment(ws, experiment_name)4.2 创建 Compute Cluster
训练需要可弹性伸缩的计算集群。以下代码先尝试获取已存在的集群,不存在则用provisioning_configuration创建:VM 规格Standard_D2_v2、最小 1 个节点、最大 3 个节点。该步骤通常需要数分钟:
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]参数要点:min_nodes=0可在集群空闲时省下费用;max_nodes越大训练越快但成本越高,课程建议最大节点数为 3。
4.3 按名称加载数据集
数据集以键值方式挂在 Workspace 下,键名即上传时的数据集名称。加载后转成 pandas DataFrame 并快速查看描述性统计:
key = 'heart-failure-records' dataset = ws.datasets[key] df = dataset.to_pandas_dataframe() df.describe()5. AutoML 配置与训练:本作业的评分核心
5.1 AutoMLConfig 参数详解
AutoML 自动迭代算法与超参数组合,找出预测效果最佳的模型。作业的**优秀档(Exemplary)**要求你主动查阅 SDK 文档、探索可用的配置参数——下面这张参数表正是作业考核的知识点:
| 参数 | 作用 |
|---|---|
experiment_timeout_minutes | 实验自动停止前允许运行的最大分钟数,超时后自动产出结果 |
max_concurrent_iterations | 允许并发的训练迭代数上限 |
primary_metric | 决定实验状态的主评估指标 |
compute_target | 运行 AutoML 实验的 Azure ML 计算目标 |
task | 任务类型:classification、regression或forecasting |
training_data | 训练数据,须同时包含特征列与标签列(可选样本权重列) |
label_column_name | 标签列名 |
path | Azure ML 项目文件夹的完整路径 |
enable_early_stopping | 评分短期无提升时是否提前终止 |
featurization | 是否自动执行特征化,或使用自定义特征化 |
debug_log | 写入调试信息的日志文件 |
本项目的实际配置(与 notebook.ipynb 完全一致):心衰预测是二分类问题,选用AUC_weighted作为主指标,标签列为DEATH_EVENT:
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 = './aml-project', enable_early_stopping= True, featurization= 'auto', debug_log = "automl_errors.log", **automl_settings )从源码结构看,**automl_settings将三个参数展开注入AutoMLConfig,便于将"常用调参项"与"基础配置项"分离管理,是 SDK 项目里常见的可读性做法。
5.2 提交实验与运行详情
配置就绪后提交训练。AutoML 内部会尝试多种算法与超参数组合,训练时长取决于集群规模,从 30 分钟到 1 小时不等:
remote_run = experiment.submit(automl_config)用RunDetails组件在 notebook 内实时查看各迭代的运行情况:
from azureml.widgets import RunDetails RunDetails(remote_run).show()5.3 获取并检查最佳模型(含模型解释)
remote_run是AutoMLRun对象,get_output()返回最佳 run 及其已拟合模型:
best_run, fitted_model = remote_run.get_output()打印fitted_model可查看最佳模型的参数;调用get_properties()可查看属性(其中model_name等元数据在后续注册阶段会被使用):
best_run.get_properties()作业的**良好档(Adequate)**与优秀档均要求"检查模型解释"——在 Studio 的 Runs 页面切换到最佳模型的Explanations标签,可查看各特征对预测结果的影响度分析,这是判断模型是否可信、是否可直接上线的关键证据。
6. 部署阶段:注册模型并发布为 ACI Web 服务
6.1 下载评分脚本并注册模型
AutoML 运行会自动生成可直接部署的评分脚本outputs/scoring_file_v_1_0_0.py,下载到本地后连同模型一起注册到 Workspace:
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)register_model将模型登记进 Workspace 的模型注册表,后续可随时按名称调取,是生产化流程的标准动作。
6.2 用 InferenceConfig 与 AciWebservice 部署
InferenceConfig描述部署用的自定义环境(入口脚本 + 环境);AciWebservice将模型发布为 Azure Container Instances 上的 Web 服务端点——一个带 REST API 的负载均衡 HTTP 端点,可接收数据并返回预测:
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)部署通常需要几分钟。deploy_configuration中可调整cpu_cores、memory_gb以匹配服务的吞吐与内存需求,tags与description用于在 Studio 中识别服务。
7. 消费阶段:构造样本请求并调用端点
构造一条符合 12 个特征 schema 的 JSON 输入(注意字段名与上传数据集一致),编码后通过aci_service.run()发送:
import json 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)) response = aci_service.run(input_data=test_sample) response预期输出为'{"result": [false]}',表示该患者样本被预测为不太可能发生心衰。至此,你用 Azure ML SDK 完成了与上一课 Low Code 流程完全对等的"训练 → 部署 → 消费"闭环。
8. 评分标准与自查清单
作业的完整评分细则(Rubric)如下,提交前可逐项对照自查:
| 优秀(Exemplary) | 良好(Adequate) | 待改进(Needs Improvement) |
|---|---|---|
| 配置 AutoML 时查阅了 SDK 文档并探索了可用的参数;用 Azure ML SDK 通过 AutoML 在数据集上完成训练、查看了模型解释、部署了最佳模型,并能通过 SDK 成功消费 | 用 Azure ML SDK 通过 AutoML 在数据集上完成训练、查看了模型解释、部署了最佳模型,并能通过 SDK 成功消费 | 用 Azure ML SDK 通过 AutoML 在数据集上完成训练、部署了最佳模型,并能通过 SDK 成功消费 |
三档之间的差异点清晰可见:待改进档未要求查看模型解释;良好档补上模型解释环节;优秀档额外要求在 AutoML 配置阶段主动研读 SDK 文档、探索更多参数——这提示你在AutoMLConfig的automl_settings中尝试调整如experiment_timeout_minutes、max_concurrent_iterations、primary_metric之外的参数(如早停、特征化策略),并在文章中说明依据。
9. 资源清理与进阶方向
完成项目后务必删除相关资源(Workspace、Compute Instance、Cluster、ACI 服务),避免持续产生云费用。
课程还给出了一个进阶挑战:在 SDK 文档中检索Pipeline类(azureml.pipeline.core.Pipeline),了解如何把多步骤工作流(数据准备 → 训练 → 部署)组织为可重复执行的管道——这是从"单次实验"迈向"生产级工作流"的下一步。SDK 的能力远不止本文覆盖的部分,养成查阅官方 SDK 文档的习惯,是独立扩展技能的关键。
本文相关仓库资源速查:课程正文 5-Data-Science-In-Cloud/19-Azure/README.md、可运行的完整实现 notebook.ipynb、上一课对照材料 5-Data-Science-In-Cloud/18-Low-Code/README.md。
【免费下载链接】Data-Science-For-Beginners10 Weeks, 20 Lessons, Data Science for All!项目地址: https://gitcode.com/GitHub_Trending/da/Data-Science-For-Beginners
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考