pytorch 训练模型很慢,卡在数据读取,卡I/O的有效解决方案

多线程加载

  • 在 datalaoder中指定num_works > 0,多线程加载数据集,最大可设置为 cpu 核数
  • 设置 pin_memory = True, 固定内存访问单元,节约内存调度时间
  • 示例如下:
loader = DataLoader(dataset,batch_size=batch_size * group_size,shuffle=True,collate_fn=dataset.collate_fn,num_workers=2,pin_memory=True,)

预加载数据集

说别的都没大用,还得是预加载

  • 原理:将整个数据集预先 load 到内存单元中,读取则直接访问内存,不存在与磁盘的I/O问题
  • 构建自己的dataset类
  • 示例如下:
class My_Dataset(Dataset):def __init__(self, filename, preprocess_config, train_config, sort=False, drop_last=False):self.dataset_name = preprocess_config["dataset"]self.preprocessed_path = preprocess_config["path"]["preprocessed_path"]self.cleaners = preprocess_config["preprocessing"]["text"]["text_cleaners"]self.batch_size = train_config["optimizer"]["batch_size"]self.basename, self.speaker, self.text, self.raw_text = self.process_meta(filename)with open(os.path.join(self.preprocessed_path, "speakers.json")) as f:self.speaker_map = json.load(f)self.sort = sortself.drop_last = drop_last# addself.mel_list = []self.pitch_list = []self.energy_list = []self.duration_list = []for idx in range(len(self.text)):basename = self.basename[idx]speaker = self.speaker[idx]mel_path = os.path.join(self.preprocessed_path,"mel","{}-mel-{}.npy".format(speaker, basename),)mel = np.load(mel_path)pitch_path = os.path.join(self.preprocessed_path,"pitch","{}-pitch-{}.npy".format(speaker, basename),)pitch = np.load(pitch_path)energy_path = os.path.join(self.preprocessed_path,"energy","{}-energy-{}.npy".format(speaker, basename),)energy = np.load(energy_path)duration_path = os.path.join(self.preprocessed_path,"duration","{}-duration-{}.npy".format(speaker, basename),)duration = np.load(duration_path)self.mel_list.append(mel)self.pitch_list.append(pitch)self.energy_list.append(energy)self.duration_list.append(duration)def __len__(self):return len(self.text)def __getitem__(self, idx):basename = self.basename[idx]speaker = self.speaker[idx]speaker_id = self.speaker_map[speaker]raw_text = self.raw_text[idx]phone = np.array(text_to_sequence(self.text[idx], self.cleaners))mel = self.mel_list[idx]pitch = self.pitch_list[idx]       energy = self.energy_list[idx]        duration = self.duration_list[idx]sample = {"id": basename,"speaker": speaker_id,"text": phone,"raw_text": raw_text,"mel": mel,"pitch": pitch,"energy": energy,"duration": duration,}return sample
  • __init__函数里,即将所有数据load进内存
  • __getitem__(self, idx):函数,则直接通过列表idx访问每一条数据

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/507896.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python达梦数据库_python 操作达 梦数据库

python 达梦数据库操作流程连接数据库 dm.connect( ... )获取游标 dm_conn.cursor()编写SQL语句 sql_str执行SQL语句 dm_cursor.execute()获取结果列表 dt_breakpoint dm_cursor.fetchall()关闭游标 dm_cursor.close()关闭数据库连接 dm_conn.close()代码示例import pandas as…

C++求复数的角度_11.初中数学:方程5x2m=4x的解,在2与10之间,怎么求m的取值范围?...

欢迎您来到方老师数学课堂,请点击上方蓝色字体,关注方老师数学课堂。所有的视频内容,全部免费,请大家放心关注,放心订阅。初中数学:方程5x-2m-4-x的解,在2与10之间,怎么求m的取值范围…

python3 beautifulsoup 模块详解_关于beautifulsoup模块的详细介绍

这篇文章主要给大家介绍了python中 Beautiful Soup 模块的搜索方法函数。 方法不同类型的过滤参数能够进行不同的过滤,得到想要的结果。文中介绍的非常详细,对大家具有一定的参考价值,需要的朋友们下面来一起看看吧。前言我们将利用 Beautifu…

python解zuobiaoxi方程_欧式期权定价的python实现

0. pre 在《给你的二叉树期权定价》中就挖了坑要写期权定价的代码,这会有时间来填坑啦。本文将会用python实现欧式期权定价。具体的定价算法分别是基于BS公式的、蒙特卡洛的以及二叉树的。对于二叉树和BS公式还不熟悉的小伙伴可以移步至往期关于二叉树期权定价和BS公…

去除标签_有效去除“狗皮膏药”标签,快学起来吧

去除商品标签向来是比较头疼一件事,有时候在去掉标签后会留下粘性残留物,它会粘上灰尘和其他脏东西,把表面变成脏兮兮的颜色,让人看着太不舒服了。其实去除标签残留粘胶并不难,可能家里就有去除它的工具哦~那今天小编就…

win10很多软件显示模糊_还在使用第三方软件?Win10可以直接显示显卡温度啦

微软刚刚开始向参与快速通道测试的用户推送Windows 10 20H1 Build 18963 版带来部分新功能和优化等。这个版本也是常规优化版本因此带来的新功能很少,但这次更新为任务管理器带来原生的显示显卡温度功能。用户打开任务管理器点击性能选项卡然后找到「独立显卡」即可…

分数怎么化成带分数_小升初数学总复习第三个基础模块:分数的认识

今天我们开始小升初数学总复习第三个基础模块的复习:分数的认识分数的认识一共分为8个知识考点。第一,分数的意义把单位“1”.平均分成若干份,表示这样的一份或者几份的数叫做分数。表示其中一份的数叫做分数单位。第二&#xff0…

active mq topic消费后删除_《我想进大厂》之MQ夺命连环11问

继之前的mysql夺命连环之后,我发现我这个标题被好多套用的,什么夺命zookeeper,夺命多线程一大堆,这一次,开始面试题系列MQ专题,消息队列作为日常常见的使用中间件,面试也是必问的点之一&#xf…

嘀嗒还是滴答_2021年顺风车车主口碑榜!滴滴、滴答、一喂顺风车成TOP3

出行平台烧钱抢用户抢司机,大家都见怪不怪了,只是近期平台为自身利益而牺牲司机的例子层出不穷,在司机刚进入平台补贴多流水多,没多久司机收入都不够交车租的,司机踩坑,全家受罪,很多司机表示自…

wampserver橙色如何变成绿色_实验室如何自建数据库和网站主页

本文首发于微信公众号:火行(ID:firegotech)实验室如何自建数据库和网站主页作者:沐倾(火行科研Club创始成员)编辑:火花(声明:本文适用于非计算机专业领域人士&#xff09…

mysql ( )连接_MySQL中concat函数(连接字符串)

MySQL中concat函数使用方法:CONCAT(str1,str2,…)返回结果为连接参数产生的字符串。如有任何一个参数为NULL ,则返回值为 NULL。注意:如果所有参数均为非二进制字符串,则结果为非二进制字符串。如果自变量中含有任一二进制字符串&…

远程连接电脑_Python黑科技:在家远程遥控公司电脑,python+微信一键连接!

有时候需要远程家里的台式机使用,因为我平时都是用 MAC 多,但是远程唤醒只能针对局域网,比较麻烦,于是我想用微信实现远程唤醒机器。准备工作本程序主要是实现远程管理 Windows10操作系统的开机和关机:在 Windows机器的…

mysql count 优化索引_如何通过使用索引在InnoDB上优化COUNT(*)性能

我有一个小而狭窄的InnoDB表,大约有900万条记录。在桌子上count(*)或count(id)桌子上做的速度非常慢(超过6秒):DROP TABLE IF EXISTS perf2;CREATE TABLE perf2 (id int(11) NOT NULL AUTO_INCREMENT,channel_id int(11) DEFAULT NULL,timestamp bigint(…

ppt生成器_9款魔性#傻瓜生成器#,上班可以划水一天

有些 #傻瓜生成器#,表面上叫傻瓜,实际上一玩就停不下来。不分享出来,未免不近人情。毕竟,大伙上班累了,也需要一些奇怪的东西划划水不是?1 沙雕DIY跳舞生成器这款傻瓜生成器,真不能叫傻瓜&#…

vue组件prop变量和内部变量数据格式不一样时,变量同步prop值,变量改变通知父组件.

vue组件含有v-model的props,当对其进行封装,想对该属性进行双向绑定时,可以采用computed的方式包一层get(){return props.xxx},set(v)>{emit(update:xxx,v)},或者使用vueuse的useModel来深层代理,但是只适合要封装的组件prop的内部的变量数据类型一致,不一致就只能拆开写,通…

mysql移动文件后打不开_Windows端MySQL data目录迁移(貌似会启动不了)

遇到一个现场问题,实施人员把mysql的data放在C盘,用过一阵以后C盘快满了。于是准备做数据迁移,想到如下几种方案(均需要先把mysql服务停掉):1.转储SQL文件但是问题是,想要迁移的库占了1.5T,是T啊&#xff0…

302 found是什么意思_犯罪大师心中的恶魔答案是什么 心中的恶魔答案真相分析...

犯罪大师是今年很热门的一个破案题材的游戏,游戏中有很多匪夷所思的案件,需要玩家解答,游戏中经常更新一些突发案件,最新的突发案件是心中的恶魔是一个很不错的案件,那么到底要怎么才能找到正确的凶手呢?希…

mysql源码安装报错_mysql 的二进制和源码包 安装的报错总结

MySQL报错总结报错原因:/application/mysql-5.6.44/tmp不存在解决方法:mkdir /application/mysql-5.6.44/tmp报错原因: /application/mysql-5.6.44/存放socket 目录没有权限解决方法:chown -R mysql.mysql /application/mysql-5.6…