深度学习训练跑庞大数据集(大于内存)载入的正确方式?

Richard141月前0

平台是 pytorch ,数据集情况是单条很小,大概不到 1KB ( json+gzip 存到硬盘上),总数据大概 200 万条左右,存硬盘上体积很小,但是发现加载到 py 内存之后会变得非常大,垃圾电脑内存实在装不下。

目前的数据储存方式是,由于语料是存在文章里的,所以文件夹里大概有一万个文件,每个文件几个 MB ,每个文件里面包含若干条训练数据。

用自定义 dataloader 的话,如果开启随机读取,系统 IO 会爆炸,每次都需要读很多文件,然后从里面选取几条,剩下大部分的读取都是无效读取。。

后面换了一种方式是把数据集中到几个大文件中,然后 dataloader 选用顺序读取,这样每次就可以 load 很多到内存里不用频繁 IO ,但是缺点是只能顺序读取,读取又慢如狗,我这 ssd 也不知道 torch 为啥加载这么慢。。还有内存效率也很奇怪,硬盘上存的数据压缩后大概 200M ,加载到内存里进程内存就要超过 5-6 个 G ,每次多读两个文件的话直接爆炸。。

大佬们有啥读取数据的实现方式可以推荐下么,我去看了下 torchvision 的实现,似乎里面的数据集没有类似情况的

最新回复 (4)
  • murmur1月前
    引用2
    32 个 gb 以下都不需要考虑,直接买内存
    你如果买二手服务器,128g 以下应该都不需要考虑
    我们以前实验室做电磁学仿真用的服务器是 1tb 内存的,对 1tb 的 内存
  • 楼主Richard141月前
    引用3
    @murmur 简明
  • aaniao0021月前
    引用4
    办公室机器就直接加内存,自己家机器就把 linux swap 开几百 g ,至少能跑。
  • 加内存加内存
    ![截屏 2022-06-28 下午 7.27.32]( https://pico-1257283959.cos.ap-nanjing.myqcloud.com/cloud-img/%E6%88%AA%E5%B1%8F2022-06-28%20%E4%B8%8B%E5%8D%887.27.32.png)
  • 游客
    6
返回