当前位置: 首页 > news >正文

模型训练时CPU和GPU大幅度波动——可能是数据的读入拖后腿

模型训练时CPU和GPU大幅度波动——可能是数据的加载拖后腿

问题

在进行猫狗大战分类任务时,发现模型训练时CPU和GPU大幅度波动,且模型训练速度很慢。

原因

​ 初步分析可能是数据加载(包括数据的transform,我用了Resize,ToTensor,Normalize这三个操作)的的速度太慢,于是通过计算一个epoch数据加载的时间来判断,最后发现数据加载的数据和一个epoch训练的时间差不太多(因为用的模型较小,是ResNet18,如果模型比较大,训练时间比数据加载时间大得多的时候,这种情况CPU和GPU的波动频率和幅度会好很多,情况最好的是,在训练一个完batch的数据前,下一个batch的数据已经准备好了)。测量加载时间代码如下:

import time
from torch.utils.data import DataLoaderdata_loader = DataLoader(dataset, batch_size=64)
start_time = time.time()# 遍历数据加载器中的所有批次
for i, data in enumerate(data_loader):passend_time = time.time()
# 计算并打印整个数据读取的时间
total_time = end_time - start_time
print(f"Total data loading time: {total_time:.4f} seconds")

然后再计算训练一个epoch的时间,若没有比加载数据的时间大很多的话,大概率就是数据加载拖后腿了。

解决方法

我使用的是方法是将所有数据一次性读入内存中,避免频繁进行磁盘IO,这样集中把所有数据读出来的时间要比一边训练一边读要快的多(使用较小的模型一般数据量不大,全部读入内存应该没什么问题,如果数据量较大呢?这时候用的模型一般也会较大,训练的时间占据主导,这时候就基本不会出现gpu等待数据的情况了)。以猫狗大战这个任务来说,自定义的Dataset如下,关键代码后用!!!..表示:

class CatDogDataset(Dataset):def __init__(self, root_dir, transform=None, test=False):self.root_dir = root_dirself.transform = transformself.image_paths = []self.image_data = []		# !!!!!!!!!!!!!!!!!!! self.labels = []self.test = testfor filename in os.listdir(root_dir):if filename.endswith('.jpg'):image_path = os.path.join(root_dir, filename)image = Image.open(image_path).convert('RGB')  # 转换为RGB格式if self.transform:image = self.transform(image)self.image_paths.append(image_path)		self.image_data.append(image)		# !!!!!!!!!!!!!!!!!!!!	将所有图片读到内存进来if not test:if 'cat' in filename:self.labels.append(0)  # cat 类别标记为 0elif 'dog' in filename:self.labels.append(1)  # dog 类别标记为 1def __len__(self):return len(self.image_data)def __getitem__(self, idx):if self.test:return self.image_data[idx], self.image_paths[idx]  # 测试集返回图像及其路径else:return self.image_data[idx], self.labels[idx]

相关文章:

模型训练时CPU和GPU大幅度波动——可能是数据的读入拖后腿

模型训练时CPU和GPU大幅度波动——可能是数据的加载拖后腿 问题 在进行猫狗大战分类任务时,发现模型训练时CPU和GPU大幅度波动,且模型训练速度很慢。 原因 ​ 初步分析可能是数据加载(包括数据的transform,我用了Resize&#…...

keep-alive的应用场景

...

【C++ Primer Plus习题】16.9

大家好,这里是国中之林! ❥前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。有兴趣的可以点点进去看看← 问题: 解答: #include <iostream> #include <ctime> #include <v…...

Java入门:09.Java中三大特性(封装、继承、多态)02

2 继承 需要两个类才能实现继承的效果。 比如&#xff1a;类A 继承 类B A类 称为 子类 &#xff0c; 衍生类&#xff0c;派生类 B类 称为 父类&#xff0c;基类&#xff0c;超类 继承的作用 子类自动的拥有父类的所有属性和方法 &#xff08;父类编写&#xff0c;子类不需要…...

AI为云游戏带来的革新及解决方案:深度技术剖析与未来展望

近期&#xff0c;科技巨头埃隆马斯克与热门国产游戏《黑神话&#xff1a;悟空》的互动&#xff0c;再次引发了公众对AI技术在游戏产业中应用的关注。马斯克&#xff0c;作为特斯拉和SpaceX的掌门人&#xff0c;不仅在科技领域引领风骚&#xff0c;其个人兴趣也广泛涉猎&#xf…...

集合是什么

1.是什么 集合&#xff08;Collection&#xff09;是Java语言中一个非常重要的概念&#xff0c;它是一组对象的容器&#xff0c;用于存储、检索和操作对象。在Java中&#xff0c;集合框架定义了一系列接口和实现类&#xff0c;用于处理不同类型的集合。 集合的概念 集合框架提…...

JavaDS —— 图

图的概念 图是由顶点集合以及顶点之间的关系组成的一种数据结构&#xff1a;G &#xff08;V&#xff0c;E&#xff09; 其中 V 表示的是顶点集合 &#xff1a; V { x | x 属于某个数据对象集} 是有穷非空集合 E 叫做边的集合 &#xff1a; E {(x, y) | x, y 属于 V} 或者 …...

魅思-视频管理系统 getOrderStatus SQL注入漏洞复现

0x01 产品简介 魅思-视频管理系统是一款集成了视频管理、用户管理、手机端应用封装等功能的综合性视频管理系统。该系统不仅以其强大的视频管理功能、灵活的用户管理机制、便捷的手机端应用封装功能以及高安全性和现代化的界面设计,成为了市场上备受关注的视频管理系统之一。…...

SOME/IP通信协议在汽车业务具体示例

标签&#xff1a;SOME/IP&#xff1b; SomeIP通信协议在汽车业务具体示例&#xff1b; SomeIP通信协议在汽车业务具体示例 SOME/IP&#xff08;Scalable service-Oriented MiddlewarE over IP&#xff09;协议被广泛应用于现代汽车的多个关键业务领域。SOME/IP协议特别适合需要…...

jupyter notebook添加环境/添加内核

参考&#xff1a; jupyter notebook添加环境/添加内核&#xff08;超详细&#xff09;_python_leoound-GitCode 开源社区 Jupyter Notebook 切换虚拟环境_jupyter 选择环境-CSDN博客 1.激活想添加的环境 conda activate pytorch39 2.下载核 conda install ipykernel 3.按照…...

建模杂谈系列256 规则函数化改造

说明 之前尝试用FastAPI来构造规则&#xff0c;碰到的问题是由于请求量过大(TPS > 1000), 从而导致微服务端口资源耗尽。所以现在的point是: 1 如何使用函数来替代微服务(同时要保留使用微服务的优点)2 进一步抽象并规范规则的执行3 等效合并规则的方法 内容 0 机制讨论…...

python实现冒泡排序的算法

冒泡排序是对数组里面两个相邻的数据进行比较并排序&#xff0c;最大的数会不断向后移动&#xff0c;因此叫冒泡排序。 冒泡排序的步骤&#xff1a; 1.首先对数组第一个数和第二个数进行比较&#xff0c;谁最小&#xff0c;谁排在前面 2.将第二个数与第三个数进行比较排序&a…...

爱玩游戏的弟弟,被人投资了100万

很多人说游戏是个害人的东西&#xff0c;尤其现在的青少年&#xff0c;被毒害得不浅&#xff0c;那还是因为大多数人对游戏本身了解得不够全面&#xff0c;只知道游戏是拿来玩&#xff0c;拿来消遣的&#xff0c;殊不知游戏里面还有大把捞金的机会。 我有个学员&#xff0c;我…...

Pandas_数据结构详解

1.创建DataFrame对象 概述 DataFrame是一个表格型的结构化数据结构&#xff0c;它含有一组或多组有序的列&#xff08;Series&#xff09;&#xff0c;每列可以是不同的值类型&#xff08;数值、字符串、布尔值等&#xff09;。 DataFrame是Pandas中的最基本的数据结构对象&am…...

Leetcode 3287. Find the Maximum Sequence Value of Array

Leetcode 3287. Find the Maximum Sequence Value of Array 1. 解题思路2. 代码实现 题目链接&#xff1a;3287. Find the Maximum Sequence Value of Array 1. 解题思路 这一题我的思路比较暴力&#xff0c;就是求出每一个位置前后所有可能的长度为k的子序列的所有的或结果…...

python 山峦图

效果&#xff1a; 代码&#xff1a; import matplotlib.pyplot as plt import numpy as npdef mountain_plot(data_dict, colorsNone):if colors is None:colors get_colors_from_map(len(data_dict), "Spectral")x list(data_dict.keys())# Y轴位置y_positions …...

Open3D:3D数据处理与可视化的强大工具

创作不易&#xff0c;您的打赏、关注、点赞、收藏和转发是我坚持下去的动力&#xff01; Open3D算法框架简介 Open3D是一个开源的3D数据处理库&#xff0c;旨在为3D数据提供高效、易用的计算和可视化工具。它支持多种3D数据格式&#xff0c;例如点云、网格、RGB-D图像等&…...

YOLOv8改进系列,YOLOv8的Neck替换成AFPN(CVPR 2023)

摘要 多尺度特征在物体检测任务中对编码具有尺度变化的物体非常重要。多尺度特征提取的常见策略是采用经典的自上而下和自下而上的特征金字塔网络。然而,这些方法存在特征信息丢失或退化的问题,影响了非相邻层次的融合效果。一种渐进式特征金字塔网络(AFPN),以支持非相邻…...

BitLocker硬盘加密的详细教程分享

硬盘加密是将数据转换为一种只有授权用户才能读取的形式。通过使用加密算法&#xff0c;硬盘上的数据在存储时被加密&#xff0c;只有输入正确的密钥或密码才能解密和访问这些数据。 硬盘加密的重要性 数据是现代社会的重要资产&#xff0c;保护这些数据免受非法访问和窃取至关…...

YOLOv8的GPU环境搭建方法

首先说明这个环境搭建教程是基于电脑已经安装好CUDA和CUDNN的情况下&#xff0c;去搭建能够正确运行YOLOv8代码的Pytorch的GPU版本。具体安装方法可见&#xff1a;最适合新手入门的CUDA、CUDNN、Pytorch安装教程_cuda安装-CSDN博客 第一步&#xff1a;需要在cmd中创建虚拟环境c…...

Kerberos身份认证原理与实战排错指南

1. 为什么今天还要花时间搞懂 Kerberos&#xff1f;——一个被低估的“老协议”正在悄悄支撑着你的日常你每天登录公司内网查邮件、访问财务系统提交报销、用 Jenkins 构建代码、甚至在 Windows 域环境中打开一台同事的共享文件夹……这些看似顺滑的操作背后&#xff0c;大概率…...

BLE蓝牙扫描深度剖析:扫描原理、核心参数、前后台差异

一、前言BLE设备交互分为两大角色&#xff1a;广播端&#xff08;外设Peripheral&#xff09;与扫描端&#xff08;中心Central&#xff09;。上一篇博客详解了四大广播模式&#xff0c;本文聚焦配套核心能力——BLE扫描机制。绝大多数蓝牙开发疑难问题&#xff1a;前台能扫后台…...

千亿镁合金产业集群正在成形:成都、抚州、池州的新版图

一个新赛道的地理坐标 如果要在中国地图上标注一条正在成形的新兴产业集群走廊&#xff0c;高强镁合金这条线&#xff0c;值得被认真画出来。 成都龙泉驿——江西抚州临川——安徽池州高新区&#xff0c;三个坐标&#xff0c;三条生产线&#xff0c;一家公司&#xff0c;两年内…...

配置OpenClaw Agent使用Taotoken作为后端模型提供商

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 配置OpenClaw Agent使用Taotoken作为后端模型提供商 基础教程类&#xff0c;指导希望使用OpenClaw等Agent工具的开发者&#xff0c…...

ZTE光猫工厂模式解锁:5分钟开启隐藏功能的终极指南

ZTE光猫工厂模式解锁&#xff1a;5分钟开启隐藏功能的终极指南 【免费下载链接】zteOnu A tool that can open ZTE onu device factory mode 项目地址: https://gitcode.com/gh_mirrors/zt/zteOnu 核心关键词&#xff1a;ZTE光猫工厂模式解锁 长尾关键词&#xff1a; ZT…...

OpenIPC开源固件:5分钟解锁网络摄像头的终极控制权

OpenIPC开源固件&#xff1a;5分钟解锁网络摄像头的终极控制权 【免费下载链接】firmware Alternative IP Camera firmware from an open community 项目地址: https://gitcode.com/gh_mirrors/fir/firmware 还在为网络摄像头的封闭系统而烦恼吗&#xff1f;想要完全掌控…...

【DeepSeek集成测试黄金标准】:20年专家亲授5大避坑指南与自动化落地框架

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;DeepSeek集成测试黄金标准的演进与核心价值 集成测试在大语言模型工程化落地过程中已从“验证功能可用”跃迁为“保障推理一致性、上下文鲁棒性与安全边界的三位一体质量门禁”。DeepSeek系列模型&…...

NBTExplorer:让Minecraft数据编辑从专业工具变成人人可用的可视化平台

NBTExplorer&#xff1a;让Minecraft数据编辑从专业工具变成人人可用的可视化平台 【免费下载链接】NBTExplorer A graphical NBT editor for all Minecraft NBT data sources 项目地址: https://gitcode.com/gh_mirrors/nb/NBTExplorer 你是否曾经面对Minecraft世界文件…...

模拟电路实现自主循线机器人:无MCU的硬件逻辑设计

1. 项目概述&#xff1a;用最纯粹的模拟电路&#xff0c;造一台会“思考”的机器人每次看到那些在赛道上灵巧穿梭的循线小车&#xff0c;你是不是也手痒&#xff0c;想自己动手做一个&#xff1f;但一听到“单片机”、“编程”、“Arduino”这些词&#xff0c;又觉得门槛太高&a…...

PostgreSQL Join 执行策略(Nested Loop、Hash Join、Merge Join)与 NOT EXISTS 优化

以集成数据压缩 SQL 优化为例&#xff0c;用大白话讲清楚 Nested Loop、Hash Join、Merge Join 三种执行策略。一、背景&#xff1a;一条慢 SQL 引发的思考 在对上游下发数据做压缩时&#xff0c;有这样一条 UPDATE SQL&#xff1a; -- ❌ 原始写法 UPDATE magellan_nk_order_i…...