1. Azure机器学习数据平台集成全景

Azure Machine Learning(Azure ML)本身不是一个孤立的数据科学工具,而是位于 Azure 数据平台之上的“建模与运营层”。理解这一点,是理解整门课程的关键:数据并不存放在 Azure ML 里,训练与推理所需的算力也不由 Azure ML 直接提供,它做的是把存储、计算、数据治理、特征管理、模型部署这些分散的能力编排成一条可复现、可审计的流水线。因此,所谓“数据平台集成”,本质上是回答三个问题:数据从哪里来、用什么算力处理、结果如何被业务消费。

一、集成的核心价值:从“能跑通”到“可运营”

如果只在一台笔记本上用 pandas 读一个 CSV 训练模型,确实不需要数据平台。但一旦进入企业场景,问题会迅速变成:数据在 ADLS Gen2 里,权限由 Microsoft Entra ID 控制,特征需要被多个团队复用,训练要跑在 GPU 集群上,模型上线后还要监控漂移。此时若每个环节都手工搬运,模型就无法复现,也无法通过合规审计。Azure ML 与数据平台集成的价值,正是把这条链路变成声明式的、可版本化的资产。

具体来说,集成带来四类收益:身份统一(工作区、存储、计算共用 Entra ID 与托管标识,避免密钥散落)、数据不落地(通过 URI 直接引用 ADLS 路径,而非先下载到本地)、计算弹性(按需拉起计算集群,任务结束自动缩容)、血缘可追溯(数据资产、环境、代码、模型都被登记,可回溯到具体版本)。

二、典型架构:五个层次与它们之间的连接

把 Azure ML 放进数据平台,可以抽象为五层。最底层是存储层,典型对象是 ADLS Gen2 容器、Azure SQL 数据库、Azure Cosmos DB;其上是治理与目录层,由 Microsoft Purview 负责数据地图与分类,由 Azure ML 数据资产负责登记可复用的数据引用;再往上是计算层,包括 Azure ML 计算实例(开发)、计算集群(训练/批推理)、附加的 Azure Databricks 或 Synapse Spark 池;第四层是编排与实验层,即 Azure ML 作业、管道、组件与注册表;最上层是消费层,包括托管在线终结点、批终结点、以及被 Power BI 或应用调用的推理服务。

这些层之间不是简单的上下调用,而是通过“引用”连接:管道步骤引用数据资产,数据资产引用存储 URI,计算集群通过托管标识访问存储。下面这张图展示了这一端到端关系,重点标出了数据流方向与身份边界。

Azure ML 与数据平台端到端集成架构 统一身份边界:Microsoft Entra ID + 托管标识 存储层 ADLS Gen2 容器 raw / curated / features Azure SQL 数据库 业务维表 Cosmos DB 实时特征 治理与目录层 Microsoft Purview 数据地图 Azure ML 数据资产(版本化 URI) 计算层 计算实例 开发 / 调试 计算集群 训练 / 批推理 Databricks / Synapse 附加 Spark 池 编排与实验层 作业 / 管道 / 组件 环境与模型注册表 消费层:托管在线终结点 · 批终结点 · Power BI / 应用调用 数据引用 算力调度

三、端到端工作流:一次训练任务实际发生了什么

假设我们要用 ADLS Gen2 中的 curated/sales/2024/ 目录训练一个销量预测模型。一个完整的集成工作流通常包含以下环节,这里给出可对照的实现方式。

第一步,注册数据资产。不直接把路径写死在脚本里,而是在 Azure ML 中创建数据资产,指向 abfss://curated@mystorage.dfs.core.windows.net/sales/2024/,并指定格式为 Parquet。这样数据资产有版本号,后续管道引用的是版本而非路径。

第二步,定义计算目标。训练用计算集群,示例参数:vm_size=Standard_NC6s_v3,min_instances=0,max_instances=4,idle_seconds_before_scaledown=180。最小实例为 0 意味着空闲时不产生费用,这是集成带来的弹性收益。

第三步,编写并提交作业。用 CLI 提交时,关键是指定数据输入与计算目标:

az ml job create --file train-job.yml

# train-job.yml 关键片段
$schema: https://azuremlschemas.azureedge.net/latest/commandJob.schema.json
command: python train.py --data ${{inputs.sales_data}} --epochs 20
inputs:
  sales_data:
    type: uri_folder
    path: azureml:sales-curated:3
compute: azureml:cpu-cluster
environment: azureml:sklearn-env:5

注意 azureml:sales-curated:3 这种写法:它引用的是数据资产的第 3 版,而不是一个物理路径。这正是集成层与存储层解耦的体现。

第四步,观察运行状态。作业提交后,在 Azure ML Studio 的作业页面可以看到状态从 Queued 变为 Preparing、Running,最后是 Completed。如果集群需要扩容,Preparing 阶段会明显变长,这是正常的冷启动。日志中应重点确认数据读取是否成功、GPU 是否被识别。

第五步,注册模型并部署。训练完成后把模型注册为 sales-forecast 的某个版本,再部署到托管在线终结点。此时终结点会通过托管标识访问存储,无需在代码中放置连接字符串。

四、判断集成是否成功的几个信号

集成做得好不好,不看架构图是否漂亮,而看几个可观察的信号:作业日志里是否出现硬编码的存储密钥;数据资产是否被多个管道复用;计算集群空闲时是否真的缩到 0;模型部署后能否在不改代码的情况下切换到新数据版本。如果这些问题的答案都是正向的,说明数据平台集成已经落地,而不是停留在“能跑一次”的阶段。

建议在项目初期就统一命名规范:数据资产用 业务域-分层-主题(如 sales-curated-orders),计算集群用 用途-规格(如 train-gpu-nc6),环境用 框架-版本(如 sklearn-1.4)。命名一致,血缘和权限排查会省下大量时间。