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

相关推荐
weixin_499771551 分钟前
Python上下文管理器(with语句)的原理与实践
jvm·数据库·python
weixin_452159554 分钟前
高级爬虫技巧:处理JavaScript渲染(Selenium)
jvm·数据库·python
策知道5 分钟前
依托政府工作报告准备省考【经验贴】
大数据·数据库·人工智能·搜索引擎·政务
多米Domi01110 分钟前
0x3f 第48天 面向实习的八股背诵第五天 + 堆一题 背了JUC的题,java.util.Concurrency
开发语言·数据结构·python·算法·leetcode·面试
小Tomkk11 分钟前
PyTorch +YOLO + Label Studio + 图像识别 深度学习项目实战 (二)
pytorch·深度学习·yolo
深蓝海拓17 分钟前
PySide6从0开始学习的笔记(二十六) 重写Qt窗口对象的事件(QEvent)处理方法
笔记·python·qt·学习·pyqt
纠结哥_Shrek17 分钟前
外贸选品工程师的工作流程和方法论
python·机器学习
工程师老罗17 分钟前
Pytorch如何加载和读取VOC数据集用来做目标检测?
人工智能·pytorch·目标检测
测试_AI_一辰17 分钟前
Agent & RAG 测试工程05:把 RAG 的检索过程跑清楚:chunk 是什么、怎么来的、怎么被命中的
开发语言·人工智能·功能测试·自动化·ai编程
Henry-SAP18 分钟前
SAP(ERP) 组织结构业务视角解析
大数据·人工智能·sap·erp·sap pp