3. Azure机器学习数据资产与数据工程
在Azure机器学习中,数据工程的核心不是“把文件传上去”,而是把散落在不同存储系统中的原始数据,转化为可被训练作业稳定引用、可追溯、可版本化、可监控的数据资产。理解这一层抽象,是后续所有训练、部署与监控工作的基础。
数据存储、数据资产与URI的关系
Azure机器学习把“数据在哪里”和“数据是什么”拆成两个概念。数据存储(Datastore)是对底层存储服务的引用与凭据封装,例如Azure Blob Storage、Azure Data Lake Storage Gen2、Azure SQL Database、Azure Files,甚至Git仓库。它保存的是连接信息,而不是数据本身。创建数据存储时,你提供存储账户名、容器名、凭据方式(账户密钥、SAS令牌或工作区托管标识),之后工作区内的作业就可以通过数据存储名称访问数据,而不必在每份代码里硬编码密钥。
数据资产(Data Asset)则是在数据存储之上建立的一层“可命名、可版本化、可被引用”的抽象。它指向具体的数据路径或查询,并带有类型、版本和元数据。训练脚本引用的是数据资产,而不是某个易变的物理路径。这样当底层文件被替换或迁移时,只要资产定义更新,引用它的作业无需改动。
两者通过URI连接。Azure机器学习支持多种URI方案,常见的有:
azureml://datastores/<datastore_name>/paths/<relative_path>:引用数据存储中的路径,凭据由工作区自动解析,最推荐在作业中使用。wasbs://、abfss://:直接指向Blob或ADLS Gen2,需要额外凭据配置。https://:公开可访问的HTTP资源。sql://或通过数据存储封装的数据库连接。
使用azureml://方案的最大好处是凭据与路径解耦:作业运行时由工作区注入身份,代码里不出现密钥,也便于审计。
数据资产的类型:File、Folder与MLTable
创建数据资产时需要选择类型。File指向单个文件,Folder指向一个目录,二者适合结构简单、读取逻辑由脚本自行处理的场景。而MLTable是Azure机器学习为表格型训练数据提供的声明式格式,它用一个MLTable文件描述数据的读取方式、schema和转换步骤,支持从多个路径合并、指定列类型、做轻量转换。
一个典型的MLTable定义如下:
# MLTable 文件示例
paths:
- file: ./data/2024-01/*.parquet
transformations:
- read_parquet:
include_path_column: false
- convert_column_types:
- column: label
to: int64
- column: timestamp
to: datetime
MLTable的价值在于:数据读取逻辑随资产一起版本化,训练脚本只需mltable加载即可获得确定性的DataFrame,避免每个脚本重复写解析代码,也减少“同一份数据不同人读出不同结果”的问题。
数据版本控制
数据资产支持版本。每次创建或更新资产时,可以指定版本号(如1、2)或让系统自动递增。版本化的意义在于:训练作业可以固定引用version=3的数据,即使后续数据被更新,复现实验时仍能拿到当时的那份数据。这与代码的Git版本控制形成互补——代码版本加数据版本,才构成完整的实验可复现性。
实践中建议:原始数据保持只读并按日期分区;派生特征数据每次生成新版本;训练配置中显式写死数据版本,而不是用latest,除非是在探索阶段。
从Blob、Data Lake、SQL、Git接入训练数据
不同来源的接入方式略有差异:
- Blob Storage:注册为
AzureBlobDatastore,适合存放图片、文本、通用文件。URI形如azureml://datastores/blob_ds/paths/images/train/。 - ADLS Gen2:注册为
AzureDataLakeGen2Datastore,支持层级命名空间,适合大规模分区表数据,配合MLTable读取Parquet效率较高。 - Azure SQL Database:注册为
AzureSqlDatabaseDatastore,资产类型通常为MLTable,通过SQL查询或表名读取,适合结构化业务数据。 - Git仓库:注册为
GitDatastore,适合版本化的小型配置、词典或代码化数据集,引用时需指定分支或提交。
接入后,统一通过数据资产引用,训练脚本无需关心底层是哪种存储。
数据漂移监控基础
数据漂移指生产环境输入数据的统计分布偏离训练数据。Azure机器学习的数据漂移监控基于数据集监控器(Dataset Monitor):你指定基线数据集(通常是训练数据资产)和目标数据集(近期生产数据),选择监控指标,系统按计划计算并告警。
常用指标包括:数值特征的均值、标准差、最小值、最大值;分类特征的出现频率;以及分布距离度量,如Population Stability Index(PSI)和Jensen-Shannon距离。以PSI为例,经验判断阈值常取:PSI < 0.1 表示分布稳定,0.1~0.25 表示有中等偏移需关注,> 0.25 表示显著漂移应触发告警。这些阈值是行业常用参考,具体项目应结合业务容忍度调整。
监控器可以设置时间窗口(如过去7天)、频率(每天)和告警邮箱。当指标超阈值时,你会收到通知,并可回溯到具体特征,判断是数据采集问题还是真实分布变化。
实践建议与常见判断
在真实项目中,建议按以下顺序推进:先把所有数据源注册为数据存储并验证凭据可用;再为训练数据创建带版本的资产,表格数据优先用MLTable;训练配置中显式引用版本号;最后为关键特征建立漂移监控器,设置合理的基线与阈值。
判断数据接入是否成功,可以观察三点:作业日志中能否通过azureml://路径正常读取;MLTable加载后的行数与schema是否符合预期;监控器首次运行后指标是否在合理范围内。若PSI突然升高,先检查上游数据采集是否中断或字段格式变化,再判断是否为真实业务分布变化。