Pytorch DataLoader 训练读取数据报错 h5py objects cannot be pickled

问题描述

数据集为h5文件,文件较大无法全部读入内存,故使用自定义Dataset和DataLoader从硬盘中读取,再使用Pytorch训练模型。在多张GPU同时训练时,希望通过设置 DataLoader(..., num_workers=8, ...) 使用多进程读取数据,加速训练,但遇到报错 h5py objects cannot be pickled,后查询得知基本版h5py不支持多进程操作。

设置num_workers=0可以解决报错,但无法加速训练

有博主(https://blog.csdn.net/qq_36468195/article/details/114922648)建议设置 DataLoader(..., num_workers=0, ...) ,通过主线程读取数据,这样可以见解决报错,但无法提升训练速度,主进程在读取数据时会阻塞训练,使得训练时间延长。

解决方法

安装 h5pickle 模块

pip install h5pickle

在实例化Dataset中打开h5文件时,使用h5pickle模块替代h5py模块打开文件.

import torch
import h5py
import h5pickle

class MyDataset(torch.utils.data.Dataset):
    def __init__(self, h5_file, ...):
    	...
    	...
		# self.h5_file_handle = h5py.File(h5_file, "r")
		self.h5_file_handle = h5pickle.File(h5_file, "r")
		...
		...

具体请参考

https://github.com/DaanVanVugt/h5pickle

相关推荐
_.Switch3 分钟前
Python机器学习:自然语言处理、计算机视觉与强化学习
python·机器学习·计算机视觉·自然语言处理·架构·tensorflow·scikit-learn
JUNAI_Strive_ving16 分钟前
番茄小说逆向爬取
javascript·python
彤银浦17 分钟前
python学习记录7
python·学习
A_lvvx21 分钟前
OpenCV透视变换
人工智能·opencv·计算机视觉
百锦再28 分钟前
自动驾驶的技术实现及原理
人工智能·机器学习·自动驾驶
AcademicIdeas学境思源31 分钟前
避免学术欺诈!在ChatGPT帮助下实现严格引用并避免抄袭
人工智能
简单.is.good37 分钟前
【测试】接口测试与接口自动化
开发语言·python
鲸~屿1 小时前
计算机视觉 第十章OpenCV
人工智能·opencv·计算机视觉
小红红的学习笔记1 小时前
银从初级个人理财_25_第七章第五节
人工智能·银从初级·个人理财
管二狗赶快去工作!1 小时前
体系结构论文(五十四):Reliability-Aware Runahead 【22‘ HPCA】
人工智能·神经网络·dnn·体系结构·实时系统