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

相关推荐
赫尔·普莱蒂科萨·帕塔2 分钟前
医疗新纪元的开启
人工智能·chatgpt
m0_603888715 分钟前
Scaling Trends for Multi-Hop Contextual Reasoning in Mid-Scale Language Models
人工智能·算法·ai·语言模型·论文速览
飞凌嵌入式6 分钟前
解析一下面向教育领域的RV1126B\RK3506B\RK3576开发板
linux·人工智能
congming20208 分钟前
AI赋能软考高项论文:140天分层突破法(适配新大纲绩效域)
人工智能
萤丰信息11 分钟前
开启园区“生命体”时代——智慧园区系统,定义未来的办公与生活
java·大数据·运维·数据库·人工智能·生活·智慧园区
Toky丶12 分钟前
【文献阅读】Pretraining Large Language Models with NVFP4
人工智能·语言模型·自然语言处理
颜值博主13 分钟前
新一代大模型范式: Inner Tools
人工智能·ai·语言模型
IT_陈寒13 分钟前
Python 3.12 新特性实战:这5个改进让我的开发效率提升40%
前端·人工智能·后端
comli_cn15 分钟前
残差链接(Residual Connection)
人工智能·算法
摸鱼仙人~17 分钟前
在政务公文场景中落地 RAG + Agent:技术难点与系统化解决方案
人工智能·政务