Ubuntu上PyTorch数据加载加速方法
通过torch.utils.data.DataLoader的num_workers参数启用多线程/多进程数据加载,充分利用Ubuntu系统的多核CPU资源,减少数据加载的I/O等待时间。建议根据CPU核心数设置num_workers(如4-8个),避免过多导致内存溢出。
numpy.memmap或torch.load(..., mmap=True)将数据存储为内存映射文件,避免频繁的磁盘IO操作,直接通过内存地址访问数据。DataLoader的prefetch_factor参数(如prefetch_factor=2)让数据加载器提前预取下一个批次的数据,减少训练时的数据等待时间,提升GPU利用率。turbojpeg或jpeg4py替代Python内置的PIL库进行图像解码,这些库基于C/C++实现,解码速度更快(如turbojpeg比PIL快2-3倍)。.npy或.pt文件),避免每次训练时重复计算。设置DataLoader的pin_memory=True,将数据加载到CPU的固定内存(Pinned Memory)中,加速数据从CPU到GPU的传输过程(GPU可以直接访问固定内存)。该参数尤其适合GPU训练场景,能提升10%-30%的数据传输效率。
对于重复使用的小型数据集(如验证集、测试集),使用torch.utils.data.DataLoader的cache参数(如cache=True)或手动将数据加载到内存中(如dataset = dataset.cache()),避免每次迭代都从磁盘读取数据。
batch_size,避免批次过小导致数据加载成为瓶颈(如显存充足时可增大batch_size至64或128)。num_workers负责加载,GPU负责训练),提升整体吞吐量。htop或top命令关闭不必要的后台进程(如浏览器、下载工具),释放CPU、内存和磁盘IO资源,确保数据加载过程获得足够的系统资源。