我们开发 StreamingDataset 的目的是为了让从云存储训练大型数据集变得尽可能快速、经济和可扩展。
它专为多节点、分布式大型模型训练而设计——最大化正确性保证、性能和易用性。现在,无论您的训练数据位于何处,您都可以高效地进行训练。只需在需要时流式传输所需的数据即可。要了解我们为什么要构建 StreamingDataset,请阅读我们的公告博客。
StreamingDataset 兼容任何数据类型,包括图像、文本、视频和多模态数据。
它支持主要的云存储提供商(AWS、OCI、GCS、Azure、Databricks,以及任何兼容 S3 的对象存储,如 Cloudflare R2、Coreweave、Backblaze b2 等),并设计为可直接替代 PyTorch IterableDataset 类,StreamingDataset 可无缝集成到您现有的训练工作流程中。

可以使用 pip 安装 Streaming:
pip install mosaicml-streaming
将原始数据集转换为我们支持的流式格式之一:
import numpy as np from PIL import Image from streaming import MDSWriter # 存储压缩输出文件的本地或远程目录 data_dir = 'path-to-dataset' # 将输入字段映射到其数据类型的字典 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)
将流式数据集上传到您选择的云存储(AWS、OCI 或 GCP)。以下是使用 AWS CLI 将目录上传到 S3 存储桶的示例。
$ aws s3 cp --recursive path-to-dataset s3://my-bucket/path-to-dataset
from torch.utils.data import DataLoader from streaming import StreamingDataset # 存储完整数据集的远程路径 remote = 's3://my-bucket/path-to-dataset' # 运行期间缓存数据集的本地工作目录 local = '/tmp/path-to-dataset' # 创建流式数据集 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 | 图像分类 | 读取 | 写入 |
开始训练这些数据集:
convert 目录中的相应脚本将原始数据转换为 .mds 格式。例如:
$ python -m streaming.multimodal.convert.webvid --in <CSV 文件> --out <MDS 输出目录>
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 工作进程的数量如何,样本顺序都保持不变。这使得以下操作更加容易:
请看下图 — 在 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 式数据集,样本按顺序编号并可以任意顺序访问。
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 或加入我们的社区 Slack。
我们欢迎任何贡献、拉取请求或问题。
要开始贡献,请查看我们的贡献指南。
附:我们正在招聘!
如果您喜欢这个项目,请给我们一个星标 ⭐,并查看我们的其他项目:
@misc{mosaicml2022streaming,
author = {The Mosaic ML Team},
title = {streaming},
year = {2022},
howpublished = {\url{<https://github.com/mosaicml/streaming/>}},
}


AI一键生成PPT,就用博思AIPPT!
博思AIPPT,新一代的AI生成PPT平台,支持智能生成PPT、AI美化PPT、文本&链接生成PPT、导入Word/PDF/Markdown文档生成PPT等,内置海量精美PPT模板,涵盖商务、教育、科技等不同风格,同时针对每个页面提供多种版式,一键自适应切换,完美适配各种办公场景。


AI赋能电商视觉革命,一站式智能商拍平台
潮际好麦深耕服装行业,是国内AI试衣效果最好的软件。使用先进AIGC能力为电商卖家批量提供优质的、低成本的商拍图。合作品牌有Shein、Lazada、安踏、百丽等65个国内外头部品牌,以及国内10万+淘宝、天猫、京东等主流平台的品牌商家,为卖家节省将近85%的出图成本,提升约3倍出图效率,让品牌能够快速上架。


企业专属的AI法律顾问
iTerms是法大大集团旗下法律子品牌,基于最先进的大语言模型(LLM)、专业的法律知识库和强大的智能体架构,帮助企业扫清合规障碍,筑牢风控防线,成为您企业专属的AI法律顾问。


稳定高效的流量提升解决方案,助力品牌曝光
稳定高效的流量提升解决方案,助力品牌曝光


最新版Sora2模型免费使用,一键生成无水印视频
最新版Sora2模型免费使用,一键生成无水印视频


实时语音翻译/同声传译工具
Transly是一个多场景的AI大语言模型驱动的同声传译、专业翻译助手,它拥有超精准的音频识别翻译能力,几乎零延迟的使用体验和支持多国语言可以让你带它走遍全球,无论你是留学生、商务人士、韩剧美剧爱好者,还是出国游玩、多国会议、跨国追星等等,都可以满足你所有需要同传的场景需求,线上线下通用,扫除语言障碍,让全世界的语言交流不再有国界。


选题、配图、成文,一站式创作,让内容运营更高效
讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。


AI辅助编程,代码自动修复
Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。


最强AI数据分析助手
小浣熊家族Raccoon,您的AI智能助手,致力于通过先进的人工智能技术,为用户提供高效、便捷的智能服务。无论是日常咨询还是专业问题解答,小浣熊都能以快速、准确的响应满足您的需求,让您的生活更加智能便捷。


像人一样思考的AI智能体
imini 是一款超级AI智能体,能根据人类指令,自主思考、自主完成、并且交付结果的AI智能体。
最新AI工具、AI资讯
独家AI资源、AI项目落地

微信扫一扫关注公众号