华为云 OBS:如何为 AI 训练数据构建可追溯的数据集管理链路
华为云 OBS:如何为 AI 训练数据构建可追溯的数据集管理链路
摘要
在图像分类、文档理解和多模态模型应用中,训练数据通常来自多个业务系统,文件格式、命名方式和标注状态并不统一。如果直接将数据上传到训练环境,容易出现数据重复、版本混乱和结果无法复现等问题。本文以华为云对象存储服务 OBS 为基础,介绍一种面向 AI 数据集的数据管理方案,重点说明数据分层、版本控制、元数据记录、事件处理和异常校验的实现思路。文中示例属于应用设计示例,不代表华为云官方提供的完整数据治理产品。
一、场景引入:训练数据为什么需要独立管理
假设一个团队正在构建工业缺陷识别模型。生产系统每天产生大量设备图片,算法人员还会补充人工标注文件和模型评估结果。随着项目推进,数据目录中可能同时存在以下内容:
- 原始图片、压缩图片和裁剪图片;
- 不同版本的标注文件;
- 已通过质量检查和待修订的数据;
- 训练集、验证集与测试集;
- 模型输出的预测结果和人工复核结果。
如果这些文件全部放在本地磁盘或某台训练服务器上,数据生命周期会与计算资源绑定。当训练节点释放、人员调整或数据重新标注后,原始文件和处理结果可能难以追踪。
对象存储服务 OBS 适合保存大规模非结构化数据,并提供桶、对象、生命周期管理、访问控制等能力。相关产品说明可参考华为云 OBS 产品介绍和OBS 文档中心。
二、核心设计:把 OBS 作为数据集的统一存储层
1. 按数据生命周期划分对象路径
可以在同一个 OBS 桶中按照数据状态设计目录,也可以根据安全边界拆分为多个桶。一个应用设计示例如下:
ai-dataset/
├── raw/ # 原始数据,只允许写入,限制修改
├── staging/ # 待清洗、待校验数据
├── curated/ # 已通过质量检查的数据
├── annotation/ # 标注文件及标注版本
├── dataset-manifest/ # 数据集清单
├── evaluation/ # 评估结果
└── archive/ # 归档数据
这里的目录只是对象名称中的前缀,并不是传统文件系统中的真实目录。数据处理程序应通过对象键、元数据或外部数据库记录文件状态,不能仅依赖目录名称判断数据是否可用于训练。
例如,一张图片可以在 raw/ 中保留原始版本,在 curated/ 中保存经过格式校验后的副本,并通过清单文件记录两者的对应关系。这样可以避免清洗程序直接覆盖原始数据。
2. 使用对象元数据记录处理状态
OBS 支持为对象设置自定义元数据。应用程序可以记录以下信息:
| 字段 | 示例 | 用途 |
|---|---|---|
dataset-id |
defect-2025-001 |
标识所属数据集 |
source-system |
factory-camera-a |
记录数据来源 |
label-status |
verified |
标识标注状态 |
content-hash |
文件摘要值 | 检测内容是否变化 |
schema-version |
v2 |
标识标注格式版本 |
需要注意,元数据适合保存与单个对象直接相关的属性。如果需要记录复杂的审核流程、多人操作记录或数据集成员关系,建议由自行开发的数据管理服务维护,例如使用关系型数据库保存对象索引,再将 OBS 对象标识作为关联字段。OBS 本身负责对象存储,不等同于完整的数据集管理系统。
三、应用设计示例:从上传到训练的处理流程
第一步:上传原始数据
业务系统或数据采集程序将图片上传至 raw/ 前缀。上传时建议同时提交数据来源、采集时间和业务主键等信息。
对于较大的文件,可以根据 SDK 或 API 能力选择分段上传方式;具体接口、参数和适用条件应以OBS API 参考为准。
上传完成后,数据管理服务不应立即将文件标记为“可训练”,而应先进入校验流程,包括:
- 检查对象是否能够正常读取;
- 校验文件类型、大小和图片尺寸;
- 计算摘要值,识别重复文件;
- 检查是否存在对应标注;
- 验证标注格式是否符合当前版本。
第二步:生成数据集清单
校验程序可以生成一个清单文件,例如:
{
"dataset_id": "defect-2025-001",
"schema_version": "v2",
"items": [
{
"object_key": "obs://ai-dataset/curated/part-001/image-0001.jpg",
"label_key": "obs://ai-dataset/annotation/v2/image-0001.json",
"split": "train",
"content_hash": "example-hash"
}
]
}
训练任务读取清单,而不是扫描整个桶。这样做有两个好处:一是可以明确本次训练使用了哪些数据,二是当数据集重新划分时,可以生成新的清单而不必移动原始文件。
清单文件可以写入 dataset-manifest/,并在外部数据库中记录数据集版本、生成时间、创建人和审核状态。训练任务启动时,将清单版本作为输入参数保存到任务记录中。
第三步:触发后续处理
OBS 提供事件通知相关能力,可以在对象创建等事件发生后,将消息发送给后续处理组件。应用可以据此触发文件校验、缩略图生成或数据索引更新。相关配置和支持范围应以OBS 事件通知文档以及目标区域的实际能力为准。
如果使用 FunctionGraph、消息服务或自建处理服务,需要由开发团队负责:
- 防止同一事件被重复处理;
- 记录处理成功和失败状态;
- 设置重试次数与异常转移策略;
- 避免尚未完成上传的对象被提前读取;
- 对无效文件进行隔离,而不是直接删除。
因此,事件通知只能作为流程启动信号,不能替代数据校验和任务状态管理。
四、访问控制与生命周期设计
AI 数据通常包含业务图片、文档或个人信息,建议根据数据敏感程度配置最小权限。采集程序只授予指定前缀的写入权限,训练程序只授予读取已审核数据的权限,人工管理账号则通过更严格的策略执行删除或修改操作。OBS 的权限模型和访问控制方式可参考OBS 权限管理文档。
在数据生命周期方面,可以按照业务保留要求规划:
raw/数据长期保留,作为审计和重新处理依据;staging/中处理失败或过期的临时文件定期清理;curated/中的数据保留多个版本;archive/中的数据转入低频访问或归档存储。
生命周期规则的具体存储类型、转换条件和删除行为,应以OBS 生命周期管理说明为准。配置自动删除前,应先确认是否满足模型复现、审计和合规要求。
五、工程落地时的验证重点
一个可维护的数据集链路,不能只验证“文件是否上传成功”,还应覆盖以下场景:
- 重复上传:相同内容但对象名称不同,是否能够识别并避免重复计入数据集。
- 部分上传:上传中断后,系统是否会误将不完整对象加入训练清单。
- 标注缺失:图片存在但标注文件不存在时,是否进入隔离状态。
- 版本不匹配:数据使用旧版标注格式时,是否被转换或拒绝。
- 事件重复:同一对象收到多次通知时,处理结果是否保持幂等。
- 权限异常:训练任务无权读取某个对象时,是否能够记录明确错误。
- 数据复现:给定清单版本后,是否能够还原本次训练使用的数据范围。
此外,建议为每次数据处理保存日志,包括对象键、处理时间、处理版本、结果状态和异常原因。日志服务、数据库或消息系统属于额外接入的云服务,不应混同为 OBS 的原生数据集治理能力。
结语
使用 OBS 管理 AI 数据时,重点并不是简单地把文件上传到云端,而是建立一条可追踪的数据链路:原始数据保留、处理状态明确、标注版本可识别、数据集清单可复现、异常流程可恢复。OBS 负责稳定存储对象及相关访问控制,数据校验、版本登记、任务编排和审核流程则需要结合应用程序或其他云服务自行实现。对于数据量、访问频率和合规要求不同的项目,还应在正式上线前进一步核对区域能力、权限配置和存储策略。
- 点赞
- 收藏
- 关注作者
评论(0)