Data Science for Beginners 第 19 课使用 Azure ML SDK 在云端训练、部署并消费心力衰竭预测模型【免费下载链接】Data-Science-For-Beginners10 Weeks, 20 Lessons, Data Science for All!项目地址: https://gitcode.com/GitHub_Trending/da/Data-Science-For-BeginnersAzure Machine Learning SDKazureml SDK是数据科学家在任意 Python 环境中与 Azure Machine Learning 服务交互的程序化入口。本课以心力衰竭Heart Failure死亡风险预测为实战项目完整演示了从创建工作区、计算实例到用 AutoML 训练模型、注册最佳模型、部署为 ACI Web 服务端点并消费预测结果的端到端流程。读完本文你将掌握 Azure ML SDK 的核心对象模型Workspace / Experiment / AmlCompute / AutoMLConfig / InferenceConfig / AciWebservice并能独立复现训练—部署—消费三步闭环。本文对应的仓库源码与文档位于 5-Data-Science-In-Cloud/19-Azure含可直接上传到 Azure ML Studio 运行的 notebook.ipynb。1. Azure ML SDK 是什么数据科学家和 AI 开发者使用 Azure Machine Learning SDK 来构建并运行基于 Azure Machine Learning 服务的机器学习工作流。你可以在任何 Python 环境中与该服务交互包括 Jupyter Notebook、Visual Studio Code 或你偏好的 Python IDE。SDK 覆盖的关键能力域包括数据集生命周期管理探索、准备并管理机器学习实验中使用的数据集。云资源与实验管理管理用于监控、日志记录和组织机器学习实验的云端资源。模型训练在本地或使用云资源包括 GPU 加速训练模型。自动化机器学习AutoML接收配置参数与训练数据后自动迭代算法与超参数组合找出做预测的最佳模型。Web 服务部署将训练好的模型转换为可被任意应用消费的 RESTful 服务。前一课18-Low-CodeLow code/No code 方式展示了如何以低代码/无代码的方式在 Azure ML Studio 界面中完成同样的任务。两者的关系可用下表概括引自 18-Low-Code/README.md对比维度Low code/No codeAzure ML SDK代码能力要求不需要需要开发时间快速、简单取决于代码熟练度生产就绪否是当项目规模增长、需要走向生产时通过 GUI 逐个创建资源不再可行——资源创建、模型部署等一切环节都需要程序化自动化这正是掌握 Azure ML SDK 的关键价值所在。1.1 项目背景与数据集本课沿用心力衰竭预测项目心血管疾病是全球第一大死因约占全球死亡总数的 31%若能估计患者罹患心血管疾病的风险概率将有助于对高危人群进行提前干预。本项目使用公开的心力衰竭临床数据集这是一个包含13 列12 个特征 1 个目标变量、299 行的表格数据集。数据集字段说明引自 18-Low-Code/README.md变量名类型描述age数值型患者年龄anaemia布尔型红细胞或血红蛋白减少creatinine_phosphokinase数值型血液中 CPK 酶水平diabetes布尔型患者是否患有糖尿病ejection_fraction数值型每次心脏收缩时离开心脏的血液百分比high_blood_pressure布尔型患者是否患有高血压platelets数值型血液中的血小板数量serum_creatinine数值型血液中血清肌酐水平serum_sodium数值型血液中血清钠水平sex布尔型女性或男性smoking布尔型患者是否吸烟time数值型随访期天DEATH_EVENT目标布尔型随访期内患者是否死亡2. 训练前的环境准备为了聚焦 SDK 本身本课默认在 Jupyter Notebook 中工作这要求你已具备一个 Azure ML 工作区和一个计算实例。2.1 创建 Azure ML 工作区若尚未创建工作区请按前一课 18-Low-Code/README.md 中2.1 Create an Azure ML workspace一节的步骤创建在 Azure 门户中选择Machine Learning服务填写订阅、资源组、工作区名称、区域等信息后创建随后在 https://ml.azure.com 启动 Azure Machine Learning Studio 并登录你的工作区。工作区是 Azure Machine Learning 的顶层资源集中管理训练运行历史日志、指标、输出与脚本快照以及数据、计算、代码、模型等工件。若你已有工作区可直接跳到数据集加载环节。2.2 创建计算实例在 Azure ML 工作区中进入 Compute计算菜单可以看到不同类型的计算资源计算实例开发工作站可提供 Notebook 实例、计算集群按需处理实验代码的可伸缩 VM 集群、推理集群预测服务的部署目标以及附加计算关联已有的 Azure 计算资源。创建计算实例的步骤点击 New新建按钮。为计算实例命名。选择配置CPU 或 GPU、VM 大小、核心数。点击Create创建按钮。创建完成后该计算实例将用于后续 Notebook 的创建与运行。选择计算资源时可参考以下决策因素引自 18-Low-Code/README.mdCPU 便宜但并发度低、训练深度学习模型较慢GPU 更贵但并行度高适合深度学习集群越大响应越快但费用越高可中断实例low priority比专用实例便宜但任务可能被中断。2.3 加载数据集若尚未将心力衰竭数据集上传到 Azure ML请参考前一课 18-Low-Code/README.md 中2.3 Loading the Dataset一节的步骤在 Studio 左侧菜单点击Datasets→ Create dataset→From local files选择下载的 Kaggle 数据集并上传在 Schema 步骤中将 anaemia、diabetes、high blood pressure、sex、smoking、DEATH_EVENT 的数据类型改为 Boolean。上传后记住数据集名称本课使用heart-failure-records后续通过 SDK 按名称获取。2.4 创建 Notebook提示下一步你既可以从头创建新 Notebook也可以把仓库中现成的 notebook.ipynb 上传到 Azure ML Studio点击Notebook菜单上传即可。Notebook 是数据科学流程中非常重要的一环它可用于执行探索性数据分析EDA、调用计算集群训练模型、调用推理集群部署端点。创建 Notebook 需要一个提供 Jupyter Notebook 实例的计算节点回到 Azure ML 工作区点击Compute instances计算实例。在 Applications应用程序区域点击Jupyter选项。勾选Yes, I understand并点击Continue继续。浏览器将打开 Jupyter Notebook 实例页面点击New新建按钮即可创建 Notebook。拿到 Notebook 后即可开始使用 Azure ML SDK 训练模型。3. 使用 Azure ML SDK 训练模型以下所有代码都对应仓库 notebook.ipynb 中依次排列的单元格你可以逐格对照执行。3.1 初始化工作区与实验首先从配置文件加载Workspacefrom azureml.core import Workspace ws Workspace.from_config()Workspace.from_config()会读取工作区目录下的配置文件如config.json返回一个代表工作区的Workspace对象。然后创建实验Experimentfrom azureml.core import Experiment experiment_name aml-experiment experiment Experiment(ws, experiment_name)从工作区获取或创建实验时通过实验名进行请求。实验名必须为3-36 个字符以字母或数字开头且只能包含字母、数字、下划线和连字符。如果工作区中不存在该实验名则自动创建一个新实验。源码佐证notebook.ipynb 的第一步先集中导入本课所需的全部 SDK 模块——Workspace, Experimentazureml.core、AmlComputeazureml.core.compute、AutoMLConfigazureml.train.automl、RunDetailsazureml.widgets、InferenceConfig, Modelazureml.core.model、AciWebserviceazureml.core.webservice随后才依次初始化工作区、创建实验。3.2 创建计算集群AutoML 实验需要计算目标使用AmlCompute创建训练用计算集群。注意此步骤可能需要几分钟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_nodes1, max_nodes3) 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]代码先尝试获取名为heart-f-cluster的既有计算上下文若不存在则通过AmlCompute.provisioning_configuration配置 VM 规格此处为Standard_D2_v2、最小节点数1与最大节点数3后创建集群并调用wait_for_completion(show_outputTrue)阻塞等待创建完成。最后从ws.compute_targets中取出该集群作为compute_target供 AutoML 使用。3.3 加载数据集按数据集名称从工作区获取数据集并转换为 pandas DataFrame 进行探索dataset ws.datasets[heart-failure-records] df dataset.to_pandas_dataframe() df.describe()ws.datasets以数据集名称为键to_pandas_dataframe()将 Azure ML 数据集转换为 pandas DataFrame随后可用df.describe()快速查看统计摘要。注意键名必须与上传数据集时的名称完全一致。3.4 AutoML 配置与训练配置 AutoML 需要用到AutoMLConfig类。其参数非常丰富本项目使用的关键参数如下参数含义experiment_timeout_minutes实验允许运行的最大时间分钟超时自动停止并自动给出结果max_concurrent_iterations实验允许的最大并发训练迭代数primary_metric用于判定实验状态的主指标compute_targetAutoML 实验运行的 Azure ML 计算目标task任务类型可取classification、regression或forecastingtraining_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_targetcompute_target, task classification, training_datadataset, label_column_nameDEATH_EVENT, path project_folder, enable_early_stopping True, featurization auto, debug_log automl_errors.log, **automl_settings )配置要点本项目是二分类问题因此task取classification标签列为DEATH_EVENT主指标选择加权 AUCAUC_weighted实验超时 20 分钟最多 3 个并发迭代并开启提前终止与自动特征化。配置就绪后提交实验该步骤依集群规模可能需要约 1 小时remote_run experiment.submit(automl_config)还可以通过 RunDetails 控件可视化展示不同实验的运行情况from azureml.widgets import RunDetails RunDetails(remote_run).show()4. 模型部署与端点消费4.1 保存最佳模型remote_run是AutoMLRun类型的对象其get_output()方法返回最佳运行及其对应的已拟合模型best_run, fitted_model remote_run.get_output()打印fitted_model可以查看最佳模型所用的参数通过get_properties()可以查看最佳运行的属性best_run.get_properties()随后用register_model注册模型。注册前需要从运行输出中下载 AutoML 自动生成的评分脚本scoring file作为后续部署的入口脚本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 运行输出里的评分脚本scoring_file_v_1_0_0.py下载到本地inference/score.py然后以model_path./outputs/将模型注册到工作区模型仓库便于后续按名引用和部署。源码佐证在 notebook.ipynb 中register_model的调用省略了model_path参数仅传入model_name、description与tags本课 README 中的完整写法显式指定了model_path./outputs/两者都依赖 AutoML 运行输出目录中已持久化的模型工件。4.2 部署模型最佳模型保存后可用InferenceConfig类进行部署配置。InferenceConfig表示部署时使用的自定义环境配置AciWebservice类则代表部署在 Azure Container Instances 上、以 Web 服务端点形式提供服务的机器学习模型。部署服务由模型、脚本及相关文件构成最终产物是一个带 REST API 的负载均衡 HTTP 端点——你可以向该 API 发送数据并接收模型返回的预测结果。模型通过deploy方法部署from azureml.core.model import InferenceConfig, Model from azureml.core.webservice import AciWebservice inference_config InferenceConfig(entry_scriptscript_file_name, environmentbest_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)要点说明InferenceConfig(entry_scriptscript_file_name, environmentbest_run.get_environment())将之前下载的inference/score.py设为入口脚本并复用最佳运行对应的 Python 环境。AciWebservice.deploy_configuration(cpu_cores1, memory_gb1, ...)指定 ACI 容器资源为 1 核 CPU、1 GB 内存并打上标签automl-heart-failure-prediction。服务命名为automl-hf-sdkModel.deploy(ws, name, [model], inference_config, aciconfig)执行部署wait_for_deployment(True)等待部署完成aci_service.state打印部署状态。此步骤通常需要几分钟。4.3 消费端点构造一份样例输入并发送到端点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_datatest_sample) response预期输出为{result: [false]}端点对该患者数据生成的预测是false表示此人不太可能发生心力衰竭事件。对照字段可知样例输入覆盖了数据集除标签列DEATH_EVENT外的全部 12 个特征time130随访期 130 天等值对应一份低风险临床记录。注意项目结束后请记得删除所有相关资源避免持续产生费用。此外工作区本身在订阅存在期间也会产生少量数据存储费用引自 18-Low-Code/README.md 的说明不再使用时建议删除。5. 进阶挑战与实践作业5.1 挑战用 Pipeline 组装工作流SDK 能做的事情远不止本课覆盖的范围。官方 SDK 文档中有一个值得探索的入口Pipeline类azureml.pipeline.core.Pipeline。Pipeline 是一组可作为工作流依次执行的步骤集合可以将数据准备、训练、评分等环节串成可复用的自动化流程。在 SDK 文档的搜索框中输入Pipeline即可定位该类。5.2 作业独立完成一个 Azure ML SDK 数据科学项目本课配套作业见 5-Data-Science-In-Cloud/19-Azure/assignment.md寻找一份你自己的数据集例如 Kaggle 或 Azure Open Datasets 上的公开数据用 Azure ML SDK 完成训练、部署与消费。评分标准分为三档优秀合格待改进配置 AutoML 时研读 SDK 文档选择合适参数通过 AutoML 完成训练并查看模型解释部署最佳模型并通过 SDK 消费通过 AutoML 完成训练并查看模型解释部署最佳模型并通过 SDK 消费通过 AutoML 完成训练部署最佳模型并通过 SDK 消费5.3 回顾与自学本课完成了训练—部署—消费的完整闭环用Workspace/Experiment/AmlCompute搭建运行环境用AutoMLConfig自动化搜索最佳模型再用register_model、InferenceConfig、AciWebservice将模型发布为可调用的 REST 端点。你可以对照 notebook.ipynb 逐格重跑流程并尝试为自己的数据集建立同样的工作流。【免费下载链接】Data-Science-For-Beginners10 Weeks, 20 Lessons, Data Science for All!项目地址: https://gitcode.com/GitHub_Trending/da/Data-Science-For-Beginners创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考