我们开发 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编程神器IDE
Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。
全能AI智能助手,随时解答生活与工作的多样问题
问小白,由元石科技研发的AI智能助手,快速准确地解答各种生活和工作问题,包括但不限于搜索、规划和社交互动,帮助用户在日常生活中提高效率,轻松管理个人事务。
实时语音翻译/同声传译工具
Transly是一个多场景的AI大语言模型驱动的同声传译、专业翻译助手,它拥有超精准的音频识别翻译能力,几乎零延迟的使用体验和支持多国语言可以让你带它走遍全球,无论你是留学生、商务人士、韩剧美剧爱好者,还是出国游玩、多国会议、跨国追星等等,都可以满足你所有需要同传的场景需求,线上线下通用,扫除语言障碍,让全世界的语言交流不再有国界。
一键生成PPT和Word,让学习生活更轻松
讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。
深度推理能力全新升级,全面对标OpenAI o1
科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。
一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型
Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。
AI助力,做PPT更简单!
咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。
选题、配图、成文,一站式创作,让内容运营更高效
讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。
专业的AI公文写作平台,公文写作神器
AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。
OpenAI Agents SDK,助力开发者便捷使用 OpenAI 相关功能。
openai-agents-python 是 OpenAI 推出的一款强大 Python SDK,它为开发者提供了与 OpenAI 模型交互的高效工具,支持工具调用、结果处理、追踪等功能,涵盖多种应用场景,如研究助手、财务研究等,能显著提升开发效率,让开发者更轻松地利用 OpenAI 的技术优势。
最新AI工具、AI资讯
独家AI资源、AI项目落地
微信扫一扫关注公众号