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

相关推荐
Coovally AI模型快速验证11 分钟前
SFTrack:面向警务无人机的自适应多目标跟踪算法——突破小尺度高速运动目标的追踪瓶颈
人工智能·神经网络·算法·yolo·计算机视觉·目标跟踪·无人机
Brduino脑机接口技术答疑12 分钟前
脑机新手指南(七):OpenBCI_GUI:从环境搭建到数据可视化(上)
人工智能·算法·脑机接口·新手入门
RockyRich22 分钟前
突然无法调用scikit-learn、xgboost
python·机器学习·scikit-learn
真的很上进23 分钟前
2025最全TS手写题之partial/Omit/Pick/Exclude/Readonly/Required
java·前端·vue.js·python·算法·react·html5
jndingxin27 分钟前
OPenCV CUDA模块光流处理------利用Nvidia GPU的硬件加速能力来计算光流类cv::cuda::NvidiaHWOpticalFlow
人工智能·opencv·计算机视觉
计算机小手36 分钟前
开源大模型网关:One API实现主流AI模型API的统一管理与分发
人工智能·语言模型·oneapi
kk57943 分钟前
保姆级教程:在无网络无显卡的Windows电脑的vscode本地部署deepseek
人工智能·windows·vscode·chatgpt
柠檬味拥抱1 小时前
融合CLIP与语言规划的大规模具身智能系统设计探索
人工智能
‘’林花谢了春红‘’1 小时前
高等三角函数大全
人工智能
敲键盘的小夜猫1 小时前
大模型智能体核心技术:CoT与ReAct深度解析
人工智能·python