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

相关推荐
im_AMBER16 分钟前
学习日志19 python
python·学习
白-胖-子2 小时前
深入剖析大模型在文本生成式 AI 产品架构中的核心地位
人工智能·架构
想要成为计算机高手3 小时前
11. isaacsim4.2教程-Transform 树与Odometry
人工智能·机器人·自动驾驶·ros·rviz·isaac sim·仿真环境
mortimer3 小时前
安装NVIDIA Parakeet时,我遇到的两个Pip“小插曲”
python·github
@昵称不存在3 小时前
Flask input 和datalist结合
后端·python·flask
静心问道4 小时前
InstructBLIP:通过指令微调迈向通用视觉-语言模型
人工智能·多模态·ai技术应用
宇称不守恒4.04 小时前
2025暑期—06神经网络-常见网络2
网络·人工智能·神经网络
赵英英俊4 小时前
Python day25
python
东林牧之4 小时前
Django+celery异步:拿来即用,可移植性高
后端·python·django
何双新4 小时前
基于Tornado的WebSocket实时聊天系统:从零到一构建与解析
python·websocket·tornado