Skip to content

Latest commit

 

History

History
90 lines (64 loc) · 5.06 KB

README.zh-CN.md

File metadata and controls

90 lines (64 loc) · 5.06 KB
语言: 🇨🇳 🇺🇸

««MPDataset»实现了一个全新的用于大规模数据加载的Iterable数据类

文件夹mp/提供了一个简易实现,相关测试代码参看test/

完整的MPDataset类已经集成到zcls。具体路径位于mp_dataset.pyMPDataset

下面是基于cifar100的训练结果:

arch dataset shuffle gpu top1 top5
sfv1_3g1x CIFAR100 no 1 69.470 91.350
sfv1_3g1x MPDataset no 1 67.340 89.560
sfv1_3g1x GeneralDataset no 1 1.010 4.960
sfv1_3g1x CIFAR100 yes 1 70.350 91.040
sfv1_3g1x MPDataset yes 1 68.000 90.030
sfv1_3g1x GeneralDataset yes 1 68.680 90.660
sfv1_3g1x CIFAR100 no 3 69.716 91.112
sfv1_3g1x MPDataset no 3 67.367 89.652
sfv1_3g1x GeneralDataset no 3 1.420 5.879
sfv1_3g1x CIFAR100 yes 3 70.756 91.972
sfv1_3g1x MPDataset yes 3 68.806 90.252
sfv1_3g1x GeneralDataset yes 3 68.656 90.472

对于dataset字段表示含义,参见Dataset

  • CIFAR100Pytorch提供的数据类;
  • MPDataset: 自定义的基于Iterable类型的数据类;
  • GeneralDataset: 一个包装类,内部使用ImageFolder
  • 完整配置文件位于configs/

从训练结果来看,对于MPDatasetGeneralDataset而言并没有明显差异,甚至MPDataset能够得到更好的结果(因为基于原始数据加载顺序,已经进行了一次打乱操作)。

上面也出现了一个很奇怪的现象,就是官方提供的cifar文件能够得到更好的效果,在网上也找到一些相关链接,有人也遇到了这个问题

内容列表

背景

基于当前大数据训练需求(几千万甚至上亿训练数据),有必要进一步优化训练环境。在Pytorch实现中,可以通过多进程同步加载的方式来预处理更多的数据。然而,每个进程都保留了全部数据的副本,尽管它们只需要其中的一部分。

对于传统的基于Map类型的数据类而言,DataLoader会在主进程中使用采样器,为子进程数据类分配相应的数据索引集合。从v1.2开始,Pytorch提供了一种新的基于Iterable样式的数据类 - IterableDataset,它可以在每个进程中定义和使用采样器。本仓库为实现大规模数据加载定义了一个基于Iterable类型的数据集类MPDataset,可以确保每个进程只保留它所需要的部分数据。

主要维护人员

  • zhujian - Initial work - zjykzj

致谢

参与贡献方式

欢迎任何人的参与!打开issue或提交合并请求。

注意:

许可证

Apache License 2.0 © 2021 zjykzj