模型训练时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
大家好,这里是国中之林! ❥前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。有兴趣的可以点点进去看看← 问题: 解答: #include <iostream> #include <ctime> #include <v…...
Java入门:09.Java中三大特性(封装、继承、多态)02
2 继承 需要两个类才能实现继承的效果。 比如:类A 继承 类B A类 称为 子类 , 衍生类,派生类 B类 称为 父类,基类,超类 继承的作用 子类自动的拥有父类的所有属性和方法 (父类编写,子类不需要…...
AI为云游戏带来的革新及解决方案:深度技术剖析与未来展望
近期,科技巨头埃隆马斯克与热门国产游戏《黑神话:悟空》的互动,再次引发了公众对AI技术在游戏产业中应用的关注。马斯克,作为特斯拉和SpaceX的掌门人,不仅在科技领域引领风骚,其个人兴趣也广泛涉猎…...
集合是什么
1.是什么 集合(Collection)是Java语言中一个非常重要的概念,它是一组对象的容器,用于存储、检索和操作对象。在Java中,集合框架定义了一系列接口和实现类,用于处理不同类型的集合。 集合的概念 集合框架提…...
JavaDS —— 图
图的概念 图是由顶点集合以及顶点之间的关系组成的一种数据结构:G (V,E) 其中 V 表示的是顶点集合 : V { x | x 属于某个数据对象集} 是有穷非空集合 E 叫做边的集合 : E {(x, y) | x, y 属于 V} 或者 …...
魅思-视频管理系统 getOrderStatus SQL注入漏洞复现
0x01 产品简介 魅思-视频管理系统是一款集成了视频管理、用户管理、手机端应用封装等功能的综合性视频管理系统。该系统不仅以其强大的视频管理功能、灵活的用户管理机制、便捷的手机端应用封装功能以及高安全性和现代化的界面设计,成为了市场上备受关注的视频管理系统之一。…...
SOME/IP通信协议在汽车业务具体示例
标签:SOME/IP; SomeIP通信协议在汽车业务具体示例; SomeIP通信协议在汽车业务具体示例 SOME/IP(Scalable service-Oriented MiddlewarE over IP)协议被广泛应用于现代汽车的多个关键业务领域。SOME/IP协议特别适合需要…...
jupyter notebook添加环境/添加内核
参考: jupyter notebook添加环境/添加内核(超详细)_python_leoound-GitCode 开源社区 Jupyter Notebook 切换虚拟环境_jupyter 选择环境-CSDN博客 1.激活想添加的环境 conda activate pytorch39 2.下载核 conda install ipykernel 3.按照…...
建模杂谈系列256 规则函数化改造
说明 之前尝试用FastAPI来构造规则,碰到的问题是由于请求量过大(TPS > 1000), 从而导致微服务端口资源耗尽。所以现在的point是: 1 如何使用函数来替代微服务(同时要保留使用微服务的优点)2 进一步抽象并规范规则的执行3 等效合并规则的方法 内容 0 机制讨论…...
python实现冒泡排序的算法
冒泡排序是对数组里面两个相邻的数据进行比较并排序,最大的数会不断向后移动,因此叫冒泡排序。 冒泡排序的步骤: 1.首先对数组第一个数和第二个数进行比较,谁最小,谁排在前面 2.将第二个数与第三个数进行比较排序&a…...
爱玩游戏的弟弟,被人投资了100万
很多人说游戏是个害人的东西,尤其现在的青少年,被毒害得不浅,那还是因为大多数人对游戏本身了解得不够全面,只知道游戏是拿来玩,拿来消遣的,殊不知游戏里面还有大把捞金的机会。 我有个学员,我…...
Pandas_数据结构详解
1.创建DataFrame对象 概述 DataFrame是一个表格型的结构化数据结构,它含有一组或多组有序的列(Series),每列可以是不同的值类型(数值、字符串、布尔值等)。 DataFrame是Pandas中的最基本的数据结构对象&am…...
Leetcode 3287. Find the Maximum Sequence Value of Array
Leetcode 3287. Find the Maximum Sequence Value of Array 1. 解题思路2. 代码实现 题目链接:3287. Find the Maximum Sequence Value of Array 1. 解题思路 这一题我的思路比较暴力,就是求出每一个位置前后所有可能的长度为k的子序列的所有的或结果…...
python 山峦图
效果: 代码: 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数据处理与可视化的强大工具
创作不易,您的打赏、关注、点赞、收藏和转发是我坚持下去的动力! Open3D算法框架简介 Open3D是一个开源的3D数据处理库,旨在为3D数据提供高效、易用的计算和可视化工具。它支持多种3D数据格式,例如点云、网格、RGB-D图像等&…...
YOLOv8改进系列,YOLOv8的Neck替换成AFPN(CVPR 2023)
摘要 多尺度特征在物体检测任务中对编码具有尺度变化的物体非常重要。多尺度特征提取的常见策略是采用经典的自上而下和自下而上的特征金字塔网络。然而,这些方法存在特征信息丢失或退化的问题,影响了非相邻层次的融合效果。一种渐进式特征金字塔网络(AFPN),以支持非相邻…...
BitLocker硬盘加密的详细教程分享
硬盘加密是将数据转换为一种只有授权用户才能读取的形式。通过使用加密算法,硬盘上的数据在存储时被加密,只有输入正确的密钥或密码才能解密和访问这些数据。 硬盘加密的重要性 数据是现代社会的重要资产,保护这些数据免受非法访问和窃取至关…...
YOLOv8的GPU环境搭建方法
首先说明这个环境搭建教程是基于电脑已经安装好CUDA和CUDNN的情况下,去搭建能够正确运行YOLOv8代码的Pytorch的GPU版本。具体安装方法可见:最适合新手入门的CUDA、CUDNN、Pytorch安装教程_cuda安装-CSDN博客 第一步:需要在cmd中创建虚拟环境c…...
如何在看板中有效管理突发紧急任务
在看板中有效管理突发紧急任务需要:设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP(Work-in-Progress)弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中,设立专门的紧急任务通道尤为重要,这能…...
Mac软件卸载指南,简单易懂!
刚和Adobe分手,它却总在Library里给你写"回忆录"?卸载的Final Cut Pro像电子幽灵般阴魂不散?总是会有残留文件,别慌!这份Mac软件卸载指南,将用最硬核的方式教你"数字分手术"࿰…...
C++.OpenGL (10/64)基础光照(Basic Lighting)
基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...
关于 WASM:1. WASM 基础原理
一、WASM 简介 1.1 WebAssembly 是什么? WebAssembly(WASM) 是一种能在现代浏览器中高效运行的二进制指令格式,它不是传统的编程语言,而是一种 低级字节码格式,可由高级语言(如 C、C、Rust&am…...
(转)什么是DockerCompose?它有什么作用?
一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用,而无需手动一个个创建和运行容器。 Compose文件是一个文本文件,通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...
Java面试专项一-准备篇
一、企业简历筛选规则 一般企业的简历筛选流程:首先由HR先筛选一部分简历后,在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如:Boss直聘(招聘方平台) 直接按照条件进行筛选 例如:…...
SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)
上一章用到了V2 的概念,其实 Fiori当中还有 V4,咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务),代理中间件(ui5-middleware-simpleproxy)-CSDN博客…...
MFC 抛体运动模拟:常见问题解决与界面美化
在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...
uniapp手机号一键登录保姆级教程(包含前端和后端)
目录 前置条件创建uniapp项目并关联uniClound云空间开启一键登录模块并开通一键登录服务编写云函数并上传部署获取手机号流程(第一种) 前端直接调用云函数获取手机号(第三种)后台调用云函数获取手机号 错误码常见问题 前置条件 手机安装有sim卡手机开启…...
C++实现分布式网络通信框架RPC(2)——rpc发布端
有了上篇文章的项目的基本知识的了解,现在我们就开始构建项目。 目录 一、构建工程目录 二、本地服务发布成RPC服务 2.1理解RPC发布 2.2实现 三、Mprpc框架的基础类设计 3.1框架的初始化类 MprpcApplication 代码实现 3.2读取配置文件类 MprpcConfig 代码实现…...
