三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

环境配置与基础教程:自定义数据集加载:手写 DataLoader 兼容超大标签文件与增量式数据读取优化

环境配置与基础教程:自定义数据集加载:手写 DataLoader 兼容超大标签文件与增量式数据读取优化

一、问题背景:当“标签文件”比“模型”还大

2025年全球AI市场规模已突破3900亿美元,日均Token调用量从2024年初的1000亿飙升至2026年3月的140万亿,两年多时间增长超千倍。伴随而来的,是训练数据规模的指数级膨胀——多模态数据集动辄TB级别,标签文件(如目标检测的JSON标注、文本分类的TSV映射表、推荐系统的用户行为日志)单文件超过数十GB已不再罕见。

传统数据加载方案正在遭遇三重困境:

  1. 全量加载OOM:标准torch.utils.data.Dataset要求实现__len____getitem__方法,依赖随机访问,这意味着所有数据必须能在内存中被索引,或至少通过内存映射(memory-mapping)访问。一旦标签文件超过可用RAM,程序直接崩溃。
  2. 启动延迟巨大:即使内存勉强装下,加载一个30GB的标签文件也可能需要数分钟,使每次调试都变成漫长的等待。
  3. 多进程通信瓶颈:PyTorch DataLoader默认在num_workers>0时会通过pickle序列化将数据从worker进程传给主进程,超大标签对象在进程间传递时带宽消耗惊人。

根据PyTorch官方文档(截至2026年5月),DataLoader支持两种数据集范式——map-style dataset

← 返回列表