使用内存映射加快PyTorch数据集的读取


本文将介绍如何使用内存映射文件加快PyTorch数据集的加载速度

在使用Pytorch训练神经网络时,最常见的与速度相关的瓶颈是数据加载的模块。如果我们将数据通过网络传输,除了预取和缓存之外,没有任何其他的简单优化方式。

但是如果数据本地存储,我们可以通过将整个数据集组合成一个文件,然后映射到内存中来优化读取操作,这样我们每次文件读取数据时就不需要访问磁盘,而是从内存中直接读取可以加快运行速度。

什么是内存映射文件

内存映射文件(memory-mapped file)是将完整或者部分文件加载到内存中,这样就可以通过内存地址相关的load或者store指令来操纵文件。为了支持这个功能,现代的操作系统会提供一个叫做mmap的系统调用。这个系统调用会接收一个虚拟内存地址(VA),长度(len),protection,一些标志位,一个打开文件的文件描述符,和偏移量(offset)。

由于虚拟内存代表的附加抽象层,我们可以映射比机器的物理内存容量大得多的文件。正在运行的进程所需的内存段(称为页)从外部存储中获取,并由虚拟内存管理器自动复制到主内存中。

使用内存映射加快PyTorch数据集的读取

使用内存映射文件可以提高I/O性能,因为通过系统调用进行的普通读/写操作比在本地内存中进行更改要慢得多,对于操作系统来说,文件以一种“惰性”的方式加载,通常一次只加载一个页,因此即使对于较大的文件,实际RAM利用率也是最低的,但是使用内存映射文件可以改善这个流程。

 

完整文章:

https://avoid.overfit.cn/post/33d9496e1f8440d69a220fe6b9ab700c

原创文章,作者:kepupublish,如若转载,请注明出处:https://blog.ytso.com/278041.html

(0)
上一篇 2022年7月31日
下一篇 2022年7月31日

相关推荐

发表回复

登录后才能评论