streaming

GitHub
1.5k 188 简单 1 次阅读 2天前Apache-2.0开发框架数据工具
AI 解读 由 AI 自动生成,仅供参考

streaming 是一款专为高效神经网络训练打造的数据流式传输库。在人工智能大模型训练中,面对海量数据集,传统方式往往需要先将数据完整下载到本地存储,这不仅耗时耗力,还极大地增加了存储成本和管理复杂度。streaming 正是为了解决这一痛点而生,它允许用户直接从云端存储(如 AWS S3、Google Cloud、Azure 等)按需“流式”读取训练数据,无需预先下载全量数据。

这款工具特别适合从事大模型研发的 AI 工程师、数据科学家以及学术研究人员。无论是处理图像、文本、视频还是多模态数据,streaming 都能轻松应对。其核心亮点在于专为多节点分布式训练设计,在确保数据读取正确性和一致性的前提下,最大化了训练性能。作为 PyTorch IterableDataset 的无缝替代品,它能帮助团队在任何地点高效开展训练任务,彻底摆脱数据物理位置的束缚,让大规模模型训练变得更加快速、经济且易于扩展。

使用场景

某自动驾驶团队正在利用多节点 GPU 集群,基于存储在 AWS S3 上的 PB 级高清路况视频数据训练大型视觉模型。

没有 streaming 时

  • 启动延迟极高:训练前需花费数小时将 TB 级数据集从云端下载到本地高速存储,严重拖慢实验迭代节奏。
  • 存储成本高昂:每个计算节点都必须配置昂贵的本地大容量硬盘来缓存全量数据,造成巨大的资源浪费。
  • 数据一致性风险:在分布式环境下,不同节点间的数据同步容易出现版本不一致或损坏,导致模型训练收敛困难。
  • 扩展性受限:增加训练节点时,必须重复繁琐的数据拷贝和校验流程,难以实现弹性伸缩。

使用 streaming 后

  • 秒级启动训练:streaming 支持直接从 S3 流式读取数据,无需预先下载,任务提交后即刻开始计算。
  • 大幅降低存储开销:各节点仅需按需缓存当前批次数据,不再依赖昂贵的本地全量存储,成本降低 90% 以上。
  • 确保训练准确性:内置的强一致性保证机制自动处理分片与去重,确保多节点读取的数据精确无误且无重复。
  • 无缝弹性扩展:新增节点可直接加入训练队列并即时获取数据流,轻松实现大规模分布式训练的动态扩容。

streaming 通过消除数据搬运瓶颈,让大规模模型训练真正实现了“数据在哪,算力就在哪”的高效敏捷模式。

运行环境要求

操作系统
  • 未说明
GPU

未说明

内存

未说明

依赖
notes该工具是一个数据流式加载库(StreamingDataset),旨在替代 PyTorch 的 IterableDataset,用于从云存储(如 AWS S3, GCS, Azure, OCI 等)高效流式传输训练数据。它本身不强制要求特定的 GPU 型号或显存大小,也不直接依赖 transformers 或 accelerate 等模型库,而是作为数据管道与任何深度学习框架配合使用。安装方式为 pip install mosaicml-streaming。支持多种数据格式(图像、文本、视频、多模态)及压缩格式(如 zstd)。其核心优势在于分布式训练中的确定性采样、秒级断点续训以及高吞吐量。
python3.8+
torch
Pillow
numpy
streaming hero image

快速开始


从云存储中快速、准确地流式传输训练数据

[官网] - [快速入门] - [文档] - [招聘!]

PyPi版本 PyPi包版本 单元测试 PyPi下载量 文档 Slack聊天 许可证 许可证


👋 欢迎

我们构建了StreamingDataset,旨在使基于云存储的大型数据集训练尽可能快速、经济且可扩展。

它专为大型模型的多节点分布式训练而设计,最大限度地保证正确性、性能和易用性。现在,您可以不受训练数据位置的限制,在任何地方高效地进行训练。只需在需要时按需流式加载所需数据即可。要了解我们为何构建StreamingDataset,请阅读我们的公告博客

StreamingDataset兼容任何数据类型,包括图像、文本、视频和多模态数据

StreamingDataset支持主要的云存储提供商(AWSOCIGCSAzureDatabricks,以及任何与S3兼容的对象存储,如Cloudflare R2CoreweaveBackblaze b2等),并且被设计为PyTorch IterableDataset 类的即插即用替代品,能够无缝集成到您现有的训练工作流中。

样本从云端分片流向集群中设备的流程

🚀 快速开始

💾 安装

可以通过pip安装Streaming:

pip install mosaicml-streaming

🏁 快速入门

1. 准备您的数据

将原始数据集转换为我们的支持的流式格式之一:

  • MDS(Mosaic Data Shard)格式,可编码和解码任何Python对象
  • CSV / TSV
  • JSONL
import numpy as np
from PIL import Image
from streaming import MDSWriter

# 用于存储压缩后输出文件的本地或远程目录
data_dir = '数据集路径'

# 将输入字段映射到其数据类型的字典
columns = {
    'image': 'jpeg',
    'class': 'int'
}

# 如果有分片压缩,则指定压缩算法
compression = 'zstd'

# 使用MDSWriter将样本保存为分片
with MDSWriter(out=data_dir, columns=columns, compression=compression) as out:
    for i in range(10000):
        sample = {
            'image': Image.fromarray(np.random.randint(0, 256, (32, 32, 3), np.uint8)),
            'class': np.random.randint(10),
        }
        out.write(sample)

2. 将您的数据上传到云存储

将您的流式数据集上传到您选择的云存储中(AWSOCIGCP)。以下是使用AWS CLI将目录上传到S3存储桶的一个示例。

$ aws s3 cp --recursive 数据集路径 s3://my-bucket/数据集路径

3. 构建StreamingDataset和DataLoader

from torch.utils.data import DataLoader
from streaming import StreamingDataset

# 存储完整数据集的远程路径
remote = 's3://my-bucket/数据集路径'

# 数据集在运行期间缓存的本地工作目录
local = '/tmp/数据集路径'

# 创建流式数据集
dataset = StreamingDataset(local=local, remote=remote, shuffle=True)

# 让我们看看第1337个样本里有什么...
sample = dataset[1337]
img = sample['image']
cls = sample['class']

# 创建PyTorch DataLoader
dataloader = DataLoader(dataset)

📚 下一步?

入门指南、示例、API 参考以及其他有用的信息,都可以在我们的文档中找到。

我们提供了针对以下数据集训练模型的端到端教程:

此外,我们还为以下常用数据集提供了入门代码,这些代码可以在 streaming 目录中找到:

数据集 任务 读取 写入
LAION-400M 文本和图像 读取 写入
WebVid 文本和视频 读取 写入
C4 文本 读取 写入
EnWiki 文本 读取 写入
Pile 文本 读取 写入
ADE20K 图像分割 读取 写入
CIFAR10 图像分类 读取 写入
COCO 图像分类 读取 写入
ImageNet 图像分类 读取 写入

要开始使用这些数据集进行训练:

  1. 使用 convert 目录中的相应脚本将原始数据转换为 .mds 格式。

例如:

$ python -m streaming.multimodal.convert.webvid --in <CSV文件> --out <MDS输出目录>
  1. 导入数据集类以开始训练模型。
from streaming.multimodal import StreamingInsideWebVid
dataset = StreamingInsideWebVid(local=local, remote=remote, shuffle=True)

🔑 关键特性


无缝的数据混合

借助 Stream,您可以轻松地试验不同的数据集组合。数据采样既可以通过相对比例控制,也可以通过绝对数量(重复次数或样本数)来控制。在流式处理过程中,不同数据集会实时无缝地被加载、打乱并混合。

# 混合 C4、GitHub 代码库和内部数据集
streams = [
  Stream(remote='s3://datasets/c4', proportion=0.4),
  Stream(remote='s3://datasets/github', proportion=0.1),
  Stream(remote='gcs://datasets/my_internal', proportion=0.5),
]

dataset = StreamingDataset(
  streams=streams,
  samples_per_epoch=1e8,
)

真正的确定性

我们解决方案的一个独特优势:无论 GPU 数量、节点数或 CPU 工作进程如何,样本的顺序始终保持一致。这使得以下操作更加容易:

  • 复现和调试训练过程及损失突增问题
  • 加载在 64 个 GPU 上训练的检查点,并在 8 个 GPU 上进行可复现的调试

请参见下图——无论使用 1、8、16、32 或 64 个 GPU 训练模型,都会得到完全相同的损失曲线(受限于浮点运算精度)!

弹性确定性的图表

无需等待,即可在训练中途恢复

当硬件故障或损失突增导致数据加载器卡住时,等待作业恢复可能既昂贵又令人沮丧。得益于我们确定性的样本排序机制,StreamingDataset 允许您在长时间训练过程中随时快速恢复训练,而无需等待数小时。

与现有方案相比,这种低延迟的恢复方式可以节省数千美元的流量费用和空闲 GPU 计算时间。

高吞吐量

我们的 MDS 格式最大限度地减少了冗余工作,从而实现了极低的样本延迟和更高的吞吐量,特别适合那些受数据加载瓶颈限制的工作负载。

工具 吞吐量
StreamingDataset ~19000 张/秒
ImageFolder ~18000 张/秒
WebDataset ~16000 张/秒

以上结果来自 ImageNet + ResNet-50 的训练,数据在第一个 epoch 缓存后,经过 5 次重复实验得出。

平等的收敛性

由于我们采用了独特的洗牌算法,使用 StreamingDataset 进行模型训练的收敛效果与直接使用本地磁盘无异。

平等收敛性的图表

以下是 ImageNet + ResNet-50 训练的结果,共进行了 5 次重复实验。

工具 Top-1 准确率
StreamingDataset 76.51% ± 0.09
ImageFolder 76.57% ± 0.10
WebDataset 76.23% ± 0.17

StreamingDataset 会在分配给某个节点的所有样本中进行洗牌,而其他方案则仅在一个较小的范围内(单个进程内)对样本进行洗牌。更广泛的洗牌范围能够更好地分散相邻样本。此外,我们的洗牌算法还能最大限度地减少样本丢失。我们发现,这两种洗牌特性都有助于提升模型的收敛性能。

随机访问

在需要时访问所需的数据。

即使某个样本尚未下载,您仍然可以通过 dataset[i] 来获取第 i 个样本。系统会立即启动下载,并在完成后返回结果——这与按顺序编号且可任意访问的 PyTorch map-style 数据集类似。

dataset = StreamingDataset(...)
sample = dataset[19543]

无数据集大小可除性要求

StreamingDataset 可以愉快地遍历任意数量的样本。您无需永久删除部分样本,以使数据集大小能被预设的设备数量整除。相反,在每个 epoch 中,都会重复不同的样本子集(不丢弃任何样本),从而确保每台设备处理的样本数量相同。

dataset = StreamingDataset(...)
dl = DataLoader(dataset, num_workers=...)

磁盘使用限制

为了将磁盘使用量控制在指定的上限内,系统会动态删除最近最少使用的分片。此功能可通过设置 StreamingDataset 的 cache_limit 参数来启用。更多详细信息请参阅 洗牌 指南。

dataset = StreamingDataset(
    cache_limit='100gb',
    ...
)

🏆 项目展示

以下是一些使用了 StreamingDataset 的项目和实验。您也有想分享的吗?请发送邮件至 mcomm@databricks.com 或加入我们的 Community Slack

  • BioMedLM:由 MosaicML 和斯坦福 CRFM 共同推出的生物医学领域专用大型语言模型
  • Mosaic 扩散模型:从零开始训练 Stable Diffusion 的成本低于 16 万美元
  • Mosaic LLM:以不到 50 万美元的成本实现 GPT-3 水平的性能
  • Mosaic ResNet:借助 Mosaic ResNet 和 Composer,实现超快速的计算机视觉训练
  • Mosaic DeepLabv3:使用 MosaicML Recipes,图像分割训练速度提升 5 倍
  • …更多内容即将发布!敬请期待!

💫 贡献者

我们欢迎任何形式的贡献、拉取请求或问题反馈。

如需开始贡献,请参阅我们的 贡献指南

附注:我们正在招聘

如果您喜欢这个项目,请为我们点亮星标 ,并查看我们的其他项目:

  • Composer —— 一个现代化的 PyTorch 库,让大规模、高效的神经网络训练变得简单易行
  • MosaicML 示例 —— 快速且高精度训练机器学习模型的参考示例,包含 GPT / 大型语言模型、Stable Diffusion、BERT、ResNet-50 和 DeepLabV3 的入门代码
  • MosaicML Cloud —— 我们的训练平台专为降低大型语言模型、扩散模型及其他大型模型的训练成本而设计,提供多云编排、轻松的多节点扩展以及底层优化,以加速训练过程

✍️ 引用

@misc{mosaicml2022streaming,
    author = {The Mosaic ML Team},
    title = {streaming},
    year = {2022},
    howpublished = {\url{<https://github.com/mosaicml/streaming/>}},
}

版本历史

v0.13.02025/07/15
v0.12.02025/04/03
v0.11.02025/01/15
v0.10.02024/12/03
v0.9.12024/11/04
v0.9.02024/09/25
v0.8.12024/08/23
v0.8.02024/07/30
v0.7.62024/05/10
v0.7.52024/04/09
v0.7.42024/02/08
v0.7.32024/01/12
v0.7.22023/12/14
v0.7.12023/11/06
v0.7.02023/11/06
v0.6.12023/10/18
v0.6.02023/09/13
v0.5.22023/06/19
v0.5.12023/08/08
v0.5.02023/06/06

常见问题

相似工具推荐

openclaw

OpenClaw 是一款专为个人打造的本地化 AI 助手,旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚,能够直接接入你日常使用的各类通讯渠道,包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息,OpenClaw 都能即时响应,甚至支持在 macOS、iOS 和 Android 设备上进行语音交互,并提供实时的画布渲染功能供你操控。 这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地,用户无需依赖云端服务即可享受快速、私密的智能辅助,真正实现了“你的数据,你做主”。其独特的技术亮点在于强大的网关架构,将控制平面与核心助手分离,确保跨平台通信的流畅性与扩展性。 OpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者,以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力(支持 macOS、Linux 及 Windows WSL2),即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你

349.3k|★★★☆☆|4天前
Agent开发框架图像

stable-diffusion-webui

stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。

162.1k|★★★☆☆|5天前
开发框架图像Agent

everything-claude-code

everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上

148.6k|★★☆☆☆|今天
开发框架Agent语言模型

ComfyUI

ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。

108.1k|★★☆☆☆|2天前
开发框架图像Agent

gemini-cli

gemini-cli 是一款由谷歌推出的开源 AI 命令行工具,它将强大的 Gemini 大模型能力直接集成到用户的终端环境中。对于习惯在命令行工作的开发者而言,它提供了一条从输入提示词到获取模型响应的最短路径,无需切换窗口即可享受智能辅助。 这款工具主要解决了开发过程中频繁上下文切换的痛点,让用户能在熟悉的终端界面内直接完成代码理解、生成、调试以及自动化运维任务。无论是查询大型代码库、根据草图生成应用,还是执行复杂的 Git 操作,gemini-cli 都能通过自然语言指令高效处理。 它特别适合广大软件工程师、DevOps 人员及技术研究人员使用。其核心亮点包括支持高达 100 万 token 的超长上下文窗口,具备出色的逻辑推理能力;内置 Google 搜索、文件操作及 Shell 命令执行等实用工具;更独特的是,它支持 MCP(模型上下文协议),允许用户灵活扩展自定义集成,连接如图像生成等外部能力。此外,个人谷歌账号即可享受免费的额度支持,且项目基于 Apache 2.0 协议完全开源,是提升终端工作效率的理想助手。

100.8k|★★☆☆☆|今天
插件Agent图像

markitdown

MarkItDown 是一款由微软 AutoGen 团队打造的轻量级 Python 工具,专为将各类文件高效转换为 Markdown 格式而设计。它支持 PDF、Word、Excel、PPT、图片(含 OCR)、音频(含语音转录)、HTML 乃至 YouTube 链接等多种格式的解析,能够精准提取文档中的标题、列表、表格和链接等关键结构信息。 在人工智能应用日益普及的今天,大语言模型(LLM)虽擅长处理文本,却难以直接读取复杂的二进制办公文档。MarkItDown 恰好解决了这一痛点,它将非结构化或半结构化的文件转化为模型“原生理解”且 Token 效率极高的 Markdown 格式,成为连接本地文件与 AI 分析 pipeline 的理想桥梁。此外,它还提供了 MCP(模型上下文协议)服务器,可无缝集成到 Claude Desktop 等 LLM 应用中。 这款工具特别适合开发者、数据科学家及 AI 研究人员使用,尤其是那些需要构建文档检索增强生成(RAG)系统、进行批量文本分析或希望让 AI 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性,但其核心优势在于为机器

93.4k|★★☆☆☆|3天前
插件开发框架