我们构建了StreamDataSet,以尽可能快,便宜和可扩展的云存储在大型数据集上进行培训。
它是专门为大型模型的多节点,分布式培训而设计的,最大程度地提高了正确性保证,性能和易用性。现在,您可以在任何地方有效地训练,而与培训数据位置无关。只需在需要时流中所需的数据即可。要了解有关我们为什么构建StreamDataSet的更多信息,请阅读我们的公告博客。
StreamingDataSet与任何数据类型兼容,包括图像,文本,视频和多模式数据。
支持主要的云存储提供商(AWS,OCI,GCS,Azure,Databricks和任何S3兼容对象存储,例如CloudFlare R2,CoreWeave,Backblaze B2等),并设计为用于您的Pytorch IterabledataSet类的置换式替代品,StreamDataSet无缝集成到您现有的培训工作流程中。
可以使用pip
安装流媒体:
PIP安装MosaiCML流程
将您的原始数据集转换为我们支持的流媒体格式之一:
可以编码和解码任何Python对象的MDS(Mosaic Data Shard)格式
CSV / TSV
jsonl
import numpy as npfrom PIL import Imagefrom streaming import MDSWriter# Local or remote directory in which to store the compressed output filesdata_dir = 'path-to-dataset'# A dictionary mapping input fields to their data typescolumns = {'image': 'jpeg' ,'class':'int'}#shard Compression,如果AnyCompression ='ZSTD'#使用mdswriterwith mdswriter(out = data_dir,columns = columns = columns = compression = compression = compression = compression = compression = compression = out)将样品保存为shards:in范围(10000)(10000) ):sample = {'image':image.fromarray(np.random.randint(0,256,(32,32,3),np.uint8)),'class':np.random.randint(10),, } out.write(示例)
将流数据集上传到您选择的云存储(AWS,OCI或GCP)。以下是使用AWS CLI将目录上传到S3存储桶的一个示例。
$ AWS S3 CP-恢复途径to to-dataset s3:// my-bucket/to to to to to to to-dataset
来自TORCH.UTILS.DATA import DataLoAdervrom trow imprimpt streamDataSet#远程路径,其中完整数据集持续使用StordRemote ='s3:// my-bucket/my-bucket/my-bucket/path to to to to to to to to to to to to to to to to to to to to path to to local working dir,其中数据集在操作las cach ='/tmp ='/tmp ='/tmp ='/tmp ='/tmp ='/tmp ='/tmp ='/tmp /to to to to to to create create stream datasetDataSet = streamingdataset(local = local = local = remote = remote,shuffle = true)#让我们查看样本#1337中的内容...示例= dataset [1337] img = sample ['image ['image '] cls =示例['class']#创建pytorch dataloaderdataloader = dataloader(dataset)
入门指南,示例,API参考和其他有用的信息可以在我们的文档中找到。
我们有端到端的教程用于培训模型:
CIFAR-10
脸部固有
Syntheticnlp
我们还提供以下流行数据集的入门代码,可以在streaming
目录中找到:
数据集 | 任务 | 读 | 写 |
---|---|---|---|
Laion-400m | 文字和图像 | 读 | 写 |
Webvid | 文字和视频 | 读 | 写 |
C4 | 文本 | 读 | 写 |
Enwiki | 文本 | 读 | 写 |
桩 | 文本 | 读 | 写 |
ADE20K | 图像分割 | 读 | 写 |
CIFAR10 | 图像分类 | 读 | 写 |
可可 | 图像分类 | 读 | 写 |
成像网 | 图像分类 | 读 | 写 |
开始在这些数据集上培训:
使用convert
目录的相应脚本将原始数据转换为.mds格式。
例如:
$ python -m streaming.multimodal.convert.webvid - in <csv file> - 输出<mds <mds output umput Directory>
导入数据集类以开始训练模型。
来自stream.multimodal import streamInsideWebViddataset = streamInsideWebVid(local = local = local,remote,远程=远程,shuffle = true)
轻松地使用与Stream
数据集混合物进行实验。数据集采样可以相对(比例)或绝对(重复或样本项)控制。在流媒体播放期间,不同的数据集被流式传输,洗牌并无缝恰到时间混合。
# mix C4, github code, and internal datasets 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的模型产生完全相同的损耗曲线(直至浮点数学的局限性!)
在硬件故障或损失峰值之后,在数据加载器旋转时,等待您的工作恢复可能很昂贵,而且很烦人。多亏了我们确定的样本订购,StreamDataSet使您可以在长期训练中恢复几秒钟而不是小时的培训。
与现有解决方案相比,最大程度地减少恢复延迟可以节省数千美元的出口费和闲置的GPU计算时间。
我们的MDS格式将无关紧要的工作切割为骨骼,与数据层加载器瓶颈的替代方案相比,超低样品潜伏期和更高的吞吐量。
工具 | 吞吐量 |
---|---|
StreamingDataset | 〜19000 img/sec |
ImageFolder | 〜18000 img/sec |
WebDataSet | 〜16000 img/sec |
显示的结果来自Imagenet + Resnet-50训练,在第一个时期后,数据缓存后,在5个重复中收集了5个训练。
由于我们的洗牌算法,使用StreamingDataSet的模型收敛与使用本地磁盘一样好。
以下是Imagenet + Resnet-50训练的结果,该培训收集了5个重复。
工具 | TOP-1准确性 |
---|---|
StreamingDataset | 76.51%+/- 0.09 |
ImageFolder | 76.57%+/- 0.10 |
WebDataSet | 76.23%+/- 0.17 |
分配给节点的所有样品中的流式dataset随机散装,而替代解决方案仅在较小的池中(在单个过程中)中的样品进行洗牌样品。在更宽的游泳池上进行改组会更多地散布相邻的样品。此外,我们的洗牌算法最大程度地减少了掉落的样品。我们发现,这两个改组功能对模型收敛有利。
需要时访问您需要的数据。
即使尚未下载示例,您也可以访问dataset[i]
以获取示例i
。下载将立即启动,结果将在完成后返回 - 类似于地图式的Pytorch数据集,其样品依次按任何顺序访问。
dataset = streamdataset(...)示例=数据集[19543]
StreamingDataSet将在任何数量的样本上愉快地迭代。您不必永远删除样品,因此数据集可以在烘烤数量的设备上排除。相反,每个时期都重复了不同的样品选择(无掉落),以便每个设备都会处理相同的计数。
dataset = streamingdataset(...)dl = dataloader(数据集,num_workers = ...)
动态删除最近使用的碎片,以将磁盘使用保持在指定的限制下。通过设置streamdataset参数cache_limit
启用了这一点。有关更多详细信息,请参见“改组指南”。
dataset = StreamingDataset( cache_limit='100gb', ... )
以下是一些使用StreamingDataSet的项目和实验。有东西要添加吗? 发送电子邮件至[email protected]或加入我们的社区懈怠。
BiomedLM:Mosaicml和Stanford CRFM的生物医学特定领域的大型语言模型
马赛克扩散模型:训练稳定的从划痕成本<$ 160k
Mosaic LLM:GPT-3质量<$ 500K
马赛克重新安装:与马赛克重新连接和作曲家相关的快速计算机视觉训练
Mosaic DeepLabv3:使用MosaiCML食谱更快的图像分割训练速度更快
…还有更多!敬请关注!
我们欢迎任何贡献,拉的请求或问题。
要开始贡献,请参阅我们的贡献页面。
PS:我们正在招聘!
如果您喜欢这个项目,请给我们一颗星星并查看我们的其他项目:
作曲家 -现代的Pytorch库,使可扩展,高效的神经网络培训变得容易
MOSAICML示例- 快速训练ML模型的参考示例,并具有很高的准确性 - 具有GPT /大语言模型的入门代码,稳定的扩散,Bert,Resnet -50和DeepLabV3
MOSAICML云- 我们构建的培训平台旨在最大程度地降低LLM,扩散模型和其他大型型号的培训成本 - 具有多云的编排,轻松的多节点缩放以及用于加速训练时间的高度优化
@misc{mosaicml2022streaming, author = {The Mosaic ML Team}, title = {streaming}, year = {2022}, howpublished = {url{<https://github.com/mosaicml/streaming/>}}, }