Datasets streaming 怎样流式读取大数据集
Hugging Face Datasets 读取大数据集时,在 load_dataset 中传入 streaming=True,再用 for 或 take 消费返回的 IterableDataset。这样无需先把整个数据集转换并加载成可随机访问的表;但后续若调用 list(stream) 收集全部样本,仍然可能耗尽内存。
官方地址:https://huggingface.co/docs/datasets/
先把读取任务拆成加载与消费
“先看几条是否可用”和“把全部文本交给训练任务”应使用不同的消费上限。前者限定预览数量、截断长文本并显示空结果;后者逐条处理,避免在应用层保留完整历史。流式对象提供迭代能力,不代表数据已经全部读取成功。
本文用自己准备的 JSONL 分片说明,文件放在 data 目录,命名如 articles-part-a.jsonl,每行是一个带 text 字符串字段的独立对象。代码为未执行的教学示例,未给出虚构下载速度、内存曲线或运行输出。远端数据集也可采用同样的 streaming 参数,但仓库名称、配置、split 和访问授权须按其数据集卡填写。
用 JSONL 文件建立流式读取组件
下面把文件选择、流对象和预览函数分开。load_dataset 的 json 构建器接收 data_files,train 表示本例的分片名;split="train" 取出单个可迭代对象。创建成功后,真正的文件内容与字段问题仍可能在迭代阶段暴露,因此异常处理要包住消费部分。
from datasets import load_dataset
# 使用你自己的 JSONL 分片;每行一个对象,并含有 text 字段
source_files = {"train": "data/articles-*.jsonl"}
stream = load_dataset(
"json",
data_files=source_files,
split="train",
streaming=True, # 创建可迭代数据集,读取发生在消费样本时
)
def preview_text(dataset, limit=5):
# 只保留受限预览,不将整个流转成列表
rows = []
for row in dataset.take(limit):
text = row.get("text")
if not isinstance(text, str):
raise ValueError("样本的 text 字段必须是字符串")
rows.append(text[:120].replace("\n", " "))
return rows
try:
preview = preview_text(stream)
if not preview:
print("没有可预览的记录")
for position, snippet in enumerate(preview, start=1):
# 序号与文本共同输出,便于识别记录,不只依靠颜色状态
print(f"记录 {position}: {snippet}")
except Exception as exc:
# 入口示例统一报告失败;批处理服务应记录异常类型并交给调用方处理
raise RuntimeError("读取预览失败,请检查文件、格式与字段") from exc

图中的 JSONL分片、data_files、split、streaming=True、load_dataset 与 IterableDataset 分属源文件、加载配置、迭代对象三个边界。data_files 指定文件,split 选择分片,streaming=True 选择读取模式,load_dataset 据此创建 IterableDataset。
只预览少量样本并给出明确状态
preview_text 限定最多读取5条,并把每条预览截成120个字符。这个小列表保存的是展示内容,而不是把全部数据留在内存中。若只想持续处理记录,可以直接在 for 循环里调用业务函数,处理完当前记录就交给下一条。
给数据预览工具接界面时,应区分“尚未读取”“读取中”“没有记录”和“读取失败”。错误提示要保留可定位的字段或文件信息,同时避免把令牌写入页面。状态应有可读文字,样本应有记录序号,不让读者仅凭红绿颜色判断成败;长文本截断后也应说明截断发生在展示层。
take(5) 是有界查看,不等于随机抽样。原始文件前几条可能来自同一个来源,因此不能仅凭这个预览断言整个数据集的分布、质量或类别比例符合训练要求。
用缓冲区控制打乱与内存开销
需要让预览不总是从文件开头取样时,可以先 shuffle 再 take。流式 shuffle 使用有限缓冲区,buffer_size 的单位是样本数量,并非字节。下面的512只是教学起点,不是适用于所有机器的推荐值。
# stream 来自上一个例子;先打乱,再限定预览条数
mixed = stream.shuffle(seed=73, buffer_size=512)
for row in mixed.take(8):
# 逐条使用,避免 list(mixed) 累积全部记录
text = row.get("text", "")
if not isinstance(text, str):
continue # 此处明确跳过异常字段;实际业务可改为记录或报错
print(text[:80])

IterableDataset、shuffle、buffer_size、seed、take 与预览文本组成图中的六个节点。IterableDataset 是 shuffle 的来源,buffer_size 配置缓冲容量,seed 配置随机种子,take 约束预览条数,预览文本绑定有限的展示结果。这些限制控制不同层面的资源,不能互相替代。
缓冲区越大,可能保留的样本越多;单条文本的体积、解码后的对象和下游批大小也会影响内存。固定 seed 便于在相同输入与设置下复查抽样,不能让变化的远端数据自动保持一致。有限缓冲打乱也不等于对全体记录进行完整随机排列。
空数据、坏字段和随机访问怎样处理
| 现象或需求 | 原因或限制 | 处理方式 |
|---|---|---|
| 创建对象后读取才报错 | 内容读取是惰性的 | 在实际迭代处处理异常 |
| 内存仍持续增长 | 应用可能累积样本或缓冲过大 | 检查列表、缓存和批大小 |
| text字段不是字符串 | 输入与消费函数约定不一致 | 选择报错、转换或跳过并记录 |
| 想直接取第百万条 | IterableDataset不适合按行随机访问 | 评估普通Dataset及索引需求 |
streaming=True 是否完全不下载任何内容?不是。远端迭代仍需传输数据、读取元数据或进行预读;它主要避免先完成整个数据文件的下载与表转换,不能承诺零网络、零缓存或固定内存。
本地流式文件需要联网吗?本例的数据来自自己的本地 JSONL 文件,源文件本身不需要从 Hub 获取。安装依赖、远端数据源和认证是另外的事项,不能从“使用本地路径”推导所有环境都绝对离线。
可以把大 JSON 数组直接当 JSONL 吗?不可以。JSONL 是逐行独立对象。格式与压缩方式会影响流式支持,有些 JSON 文件可能需要整体读取;选择格式时要查构建器说明,而不是只改文件扩展名。
开始接训练前,先让有限预览明确显示可读字段,再逐步接入消费函数与错误记录。保留清晰的记录上限和缓冲预算,才能避免在展示或处理层重新把大数据集全部攒进内存。
流式使用文档:https://huggingface.co/docs/datasets/stream
对象差异文档:https://huggingface.co/docs/datasets/about_mapstyle_vs_iterable
加载参数文档:https://huggingface.co/docs/datasets/package_reference/loading_methods
Moderation 怎样组合多类别判断
- 上一篇
- Moderation 怎样组合多类别判断
- 下一篇
- PyTorch Profiler 怎么导出可分享的 Chrome trace
-
- 科技周边 · 人工智能 | 1小时前 |
- model card 怎样读取输入约束
- 439浏览 收藏
-
- 科技周边 · 人工智能 | 1小时前 |
- JSON schema 怎样约束模型返回结构
- 241浏览 收藏
-
- 科技周边 · 人工智能 | 1小时前 |
- file search 怎样设置检索过滤
- 420浏览 收藏
-
- 科技周边 · 人工智能 | 1小时前 |
- PyTorch Profiler 怎么导出可分享的 Chrome trace
- 418浏览 收藏
-
- 科技周边 · 人工智能 | 1小时前 |
- Moderation 怎样组合多类别判断
- 101浏览 收藏
-
- 科技周边 · 人工智能 | 1小时前 |
- Batch API 怎样提交离线任务
- 126浏览 收藏
-
- 科技周边 · 人工智能 | 1小时前 |
- ONNX 形状推断怎样保留符号维度
- 418浏览 收藏
-
- 科技周边 · 人工智能 | 1小时前 |
- Embeddings 怎样分块长文本
- 185浏览 收藏
-
- 科技周边 · 人工智能 | 1小时前 |
- Responses tools 怎样串联工具结果
- 307浏览 收藏
-
- 科技周边 · 人工智能 | 1小时前 | 结构化输出 JSON Schema Responses API OpenAI API
- Responses API 怎样保存结构化输出
- 250浏览 收藏
-
- 科技周边 · 人工智能 | 12小时前 |
- vLLM 怎样设置连续批处理的并发上限
- 397浏览 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 516次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 500次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 485次学习
-
- PubMedQA
- 深入了解PubMedQA生物医学问答数据集,涵盖其核心功能、使用方法及在临床决策、药物研发等场景的应用,助力提升NLP模型性能。
- 685次使用
-
- H2O EvalGPT
- H2O EvalGPT是H2O.ai推出的开源LLM评估平台,提供详细的大模型性能排行榜、行业特定基准测试及A/B测试功能,助您快速选择最适合项目的高性能大语言模型。
- 699次使用
-
- LMArena
- LMArena是加州大学伯克利分校推出的AI模型匿名评测平台。通过盲测投票机制,用户可对比不同大模型回答并生成实时排行榜,助力开发者优化模型及用户选择最佳AI工具。
- 753次使用
-
- HELM
- 深入了解斯坦福推出的HELM(Holistic Evaluation of Language Models)大模型评测体系。本文解析其核心功能、安装配置步骤及应用场景,涵盖准确性、公平性、鲁棒性等多维度指标,助力开发者全面优化语言模型性能。
- 717次使用
-
- MMBench
- MMBench是由上海人工智能实验室等机构联合推出的多模态基准测试平台,提供细粒度能力评估、大规模数据集及VLMEvalKit工具。本文详细介绍其核心功能、安装使用方法及应用场景,助力开发者全面评估多模态模型性能。
- 552次使用
-
- 量化模型本地推理的显存估算方法
- 2026-10-17 501浏览
-
- 本地大模型反复输出同一句话怎么调整生成参数
- 2026-09-06 501浏览
-
- Python 调用大模型时如何用结构化输出校验 JSON:从解析失败到可重试
- 2026-08-29 501浏览
-
- AI写作工具免费版安装教程(含豆包Clawdbot)
- 2026-05-30 501浏览
-
- WPS AI能自动生成PPT吗?输入主题一键制作演示文稿
- 2026-05-27 501浏览

