机器学习数据量很大选择什么存储方式比较好/快? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
SonnyBoi
V2EX    问与答

机器学习数据量很大选择什么存储方式比较好/快?

  •  a href="Javascript:" Onclick="downVoteTopic(931779);" class="vote">
  •   SonnyBoi 2023-04-12 03:03:39 +08:00 2187 次点击
    这是一个创建于 920 天前的主题,其中的信息可能已经有所发展或是发生改变。

    之前炼丹的时候就发现一个问题,用 Pytorch 的 DataLoader 第一次遍历数据集的速度会大大的慢于后面的 epoch 。这在数据量比较小( 100k ~ 700k 张图片 + 另一张同尺寸的数据)的时候还可以勉强接受,第一个 epoch 可能花个 40 ~ 50 分钟,后面就是神速 5 ~ 10 分钟左右。然而当数据量增加到 300M 张图片的时候直接就爆炸了(□),第一个 epoch 可能要花 20 个小时!。。然而我在集群上的节点一次介么也就只能用 24 小时,这回是真的麻了。。。

    想了很多办法无果,想问问炼丹的 V 友是有没有遇见过这个问题的?目前我用的存储方式是 .h5df 文件 + h5py 库,每 1000 张图片分进一个 group 进行储存,因为每张图片因为尺寸大小不一样(后续才进行 crop 处理),所以每张单独就存储为 group 中的一个 dataset ,这里我也就没法尝试 chunk size 在速度提升方面有没有帮助了。想了有两个方案目前还没有尝试,不知道会不会有提升:1 )改用 lmdb 库。2) 直接存成 .npy 文件用 np.load 读取。看了一些论文的源码很多都是直接用 PIL 暴力读图片,然而我的输出是一个与输入同尺寸的数组,所以就没办法用这个办法了。

    根本原因也是完全不清楚为什么 DataLoader 会出现这样的情况。。。为啥就第一次读取速度慢这么多。搞了半天也没找到瓶颈和问题出现在哪里,目前就只想到从数据的存储方式下手。

    9 条回复    2023-04-12 14:10:49 +08:00
    MeePawn666
        1
    MeePawn666  
       2023-04-12 03:08:19 +08:00 via Android
    不清楚是否直接相关,但是可以了解一下 NVIDIA 的 DALI
    lovestudykid
        2
    lovestudykid  
       2023-04-12 03:16:39 +08:00
    业余选手,很久没碰了。好像 tf 没这个问题
    SonnyBoi
        3
    SonnyBoi  
    OP
       2023-04-12 05:00:36 +08:00
    @MeePawn666 #1 刚刚看了看一些帖子,貌似 DALI 加速效果确实不错,你也是用的这个库处理大数据么?
    SonnyBoi
        4
    SonnyBoi  
    OP
       2023-04-12 05:01:37 +08:00
    @lovestudykid tf 应该是会好不少,盲猜应该是 tfrecord 读取速度会快很多。然而 pytorch 就。。。方便都是要付出代价的。。。
    MeePawn666
        5
    MeePawn666  
       2023-04-12 07:20:20 +08:00 via Android
    @SonnyBoi hmm, 没有直接用过,但是看一些 mlsys 的论文经常那这个做 baseline
    KissmeBaby
        6
    KissmeBaby  
       2023-04-12 07:34:32 +08:00
    用 parquet ?
    qzwmjv
        7
    qzwmjv  
       2023-04-12 09:58:48 +08:00
    你 dataloader 是全部遍历的? dataloader 源码应该是按 batch 预读的,开调试看看卡在哪个操作,dataset 处理还是 io 阻塞(第二个 epoch 很快应该不是)
    paopjian
        8
    paopjian  
       2023-04-12 10:09:41 +08:00
    有可能是第一个 epoch 是纯读图加预训练,而其他 epoch 是在训练的时候顺便读? 有时间的话还是把预处理提前做一下,都剪切填充好以后保存
    yuluoxinsheng
        9
    yuluoxinsheng  
       2023-04-12 14:10:49 +08:00
    redis 做索引,elstaicsearch 做全文存储?
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2805 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 06:38 PVG 14:38 LAX 23:38 JFK 02:38
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86