ImageNet训练/amp/gpustat

解决在ImageNet上速度慢的问题,在1080上跑sop

一、about ImageNet

train_data = datasets.CIFAR100(data_dir, train=True, transform=trans_t, download=True)
test_data = datasets.CIFAR100(data_dir, train=False, transform=trans, download=True)
train_data = datasets.ImageFolder(root = train_dir,transform=trans_t)
test_data = datasets.ImageFolder(root = test_dir ,transform=trans)

ImageFolder 是 PyTorch 中的一个通用数据集类,用于加载基于文件夹结构组织的图像数据集。这种数据集结构要求每个类别的图像样本都存放在一个单独的子文件夹中,并且每个子文件夹的名称代表了该类别的标签。不会下载任何东西。

ImageNet 是 PyTorch 中专门用于加载 ImageNet 数据集的数据集类。ImageNet 是一个大型的图像数据集,包含数百万张图像样本,用于图像分类任务。ImageNet 数据集具有特定的结构,包含训练集和验证集两部分,每个图像样本都与一个 ImageNet 类别标签相关联。
ImageNet 类在加载 ImageNet 数据集时,会自动检查数据集是否已经下载,如果没有下载,它会自动尝试从指定的下载链接下载数据集。(和cifar10/100没什么区别)

imagefolder用于加载ImageNet因为,由于 ImageNet 数据集的大小较大,下载和处理可能需要一定的时间和存储空间。所以一般默认imagenet已经下载好了,你要填写已经下载好的位置/nvme/ImageNet/train & val,而不能像cifar系列一样想在哪下在哪下。

对于ImageFolder使用方法,我们需要将所有图像按照文件夹保存,例如所有猫的图像放入到cat文件夹中,所有狗的图像放入到dog文件夹中,该函数就会自动识别类别,将图像所在的目录名称作为label。

问题:ImageNet速度太慢
解决:考虑数据传输的速度瓶颈,重点应该在data的转移:检查dataloader发现问题。
1、num_workers = 0 ----> num_workers = 20
一般建议,在拥有多核 CPU 和较大数据集的情况下,将 num_workers 设置为一个适当的正整数,通常在 2 到 8 之间,以实现更快的数据加载速度。设置0纯属sb
2、没有pin_memory ----> True
Host to GPU copies are much faster when they originate from pinned (page-locked) memory.

好文:
科普帖:深度学习中GPU和显存分析
regarding pin memory

二、技巧操作

还是那句话,一份代码只要能在一台机器上跑就证明代码没问题,剩下的就是环境配置的问题。遇到一个环境问题解决一个即可。
比如:遇到numpy的问题,直接查看原来的numpy版本和现在的numpy版本,发现不一致:

import numpy
print(numpy.__version__)

pip install --upgrade numpy==1.21.5 --upgrade是一个参数
用upgrade直接更新成一样的

三、

TypeError: cat() received an invalid combination of arguments - got (Tensor, Tensor, dim=int), but expected one of:

  • (tuple of Tensors tensors, int dim, *, Tensor out)

received an invalid combination of arguments 说明给的参数不对,得到了一个 tensor,tensor,dim的参数,但是expected 形式给出了
所以应该把代码从:

spikes[module] = torch.cat(spikes[module],output.detach().cpu(), dim=0)

改成

spikes[module] = torch.cat((spikes[module],output.detach().cpu()), dim=0)

RuntimeError: Unable to find a valid cuDNN algorithm to run convolution

显存不够了

四、工具

1. amp混精(可以开,很简单)

一、什么是混合精度训练
在pytorch的tensor中,默认的类型是float32,神经网络训练过程中,网络权重以及其他参数,默认都是float32,即单精度,为了节省内存,部分操作使用float16,即半精度,训练过程既有float32,又有float16,因此叫混合精度训练。

二、如何进行混合精度训练
pytorch中是自动混合精度训练,使用 torch.cuda.amp.autocasttorch.cuda.amp.GradScaler 这两个模块。
torch.cuda.amp.autocast:在选择的区域中自动进行数据精度之间的转换,即提高了运算效率,又保证了网络的性能。
torch.cuda.amp.GradScaler:来解决数据溢出问题,即数据溢出问题:Overflow / Underflow

# Creates model and optimizer in default precision
model = Net().cuda()
optimizer = optim.SGD(model.parameters(), ...)
# Creates a GradScaler once at the beginning of training.
scaler = GradScaler()
for epoch in epochs:for input, target in data:optimizer.zero_grad()# Runs the forward pass with autocasting.with autocast():output = model(input)loss = loss_fn(output, target)# Scales loss.  Calls backward() on scaled loss to create scaled gradients.# Backward passes under autocast are not recommended.# Backward ops run in the same dtype autocast chose for corresponding forward ops.scaler.scale(loss).backward()# scaler.step() first unscales the gradients of the optimizer's assigned params.# If these gradients do not contain infs or NaNs, optimizer.step() is then called,# otherwise, optimizer.step() is skipped.scaler.step(optimizer)# Updates the scale for next iteration.scaler.update()

https://zhuanlan.zhihu.com/p/145427849

2、gpustat

直接pip install gpustat即可安装,gpustat基于nvidia-smi,可以提供更美观简洁的展示,结合watch命令,可以动态实时监控GPU的使用情况。
如果使用『watch --color -n1 gpustat』没有显示颜色的话,可以改为『watch --color -n1 gpustat --color』

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

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

相关文章

ubuntu下使用GCC开发单片机的过程

在Ubuntu下使用GCC进行单片机开发的过程主要涉及以下几个步骤: 1. 安装GCC工具链:首先需要安装GNU MCU Eclipse插件,以便使用GCC编译器。打开终端,执行以下命令来安装GNU MCU Eclipse插件:sudo apt-get install gcc-a…

Linux下的scp 、rsync两种命令同步文件

SCP命令 scp还非常不占资源,不会提高多少系统负荷,在这一点上,rsync就远远不及它了。虽然 rsync比scp会快一点,但当小文件众多的情况下,rsync会导致硬盘I/O非常高,而scp基本不影响系统正常使用。 语法 scp…

Tensorflow2-初识

TensorFlow2是一个深度学习框架,可以理解为一个工具,有谷歌的全力支持,具有易用、灵活、可扩展、性能优越、良好的社区资源等优点。 1、环境的搭建 1.1 Anaconda3的安装 https://www.anaconda.com/ Python全家桶,包括Python环境和…

jmeter使用步骤

jmeter 使用步骤 1,进入jmeter目录中的bin目录,双击jmeter.bat 打开 2,右键test plan 创建线程组 3,配置线程组参数 4,右键刚刚创建的线程组,创建请求,填写请求地址 5,需要携带to…

Spring Boot如何整合mybatisplus

文章目录 1. 相关配置和代码2. 整合原理2.1 spring boot自动配置2.2 MybatisPlusAutoConfiguration2.3 debug流程2.3.1 MapperScannerRegistrar2.3.2MapperScannerConfigurer2.3.3 创建MybatisPlusAutoConfiguration2.3.4 创建sqlSessionFactory2.3.5 创建SqlSessionTemplate2.…

科研热点|5本Scopus期刊不再被收录,Scopus期刊目录更新(附下载)!

此次Scopus期刊目录更新后,有5本期刊不再被收录(Discontinued titles July 2023),同上次更新时相比,此次又新增139本期刊(Accepted titles)进入Scopus数据库。目前Scopus 来源出版物列表(Scopus Sources&am…

全志F1C200S嵌入式驱动开发(soc系统集成)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 任何一个嵌入式设备都是由很多的子系统组成的。这里面有硬件、有软件,还可能有机械,并不一定就是大家看到的消费电子那样,即一个soc构成了所有的系统。现实情况是,要构建一个系…

Java 调用 WebService 、java调用Soap请求、Java对接soap接口

工作第一次遇到对接soap接口,觉得有必要记录一下,毕竟踩了不少坑,网上帖子很多但大都不全,也不可能完全满足自己的需求,于是就有了下面的代码: 除了只是借鉴, 注意事项:1.http://i…

A stop job is running for xxxxxx

有时候服务器关机时,会有个进程卡在那里,使系统无法关闭 提示: A stop job is running for xxxxxx方法: 设置一个启动/停止的默认超时时间即可 vim /etc/systemd/system.conf DefaultTimeoutStartSec300s DefaultTimeoutStopSe…

mqtt、tcp、http的区别

文章目录 一、MQTT(Message Queuing Telemetry Transport)1、类型2、用途 二、TCP(Transmission Control Protocol)1、类型2、用途 三、HTTP(Hypertext Transfer Protocol)1、类型2、用途 四、主要区别1、类…

使用Python将图像转换为PDF:一次性解决您的批量转换需求

导语: 在数字化时代,我们经常需要处理大量的图像文件。将这些图像转换为PDF格式可以方便地存档、分享和打印。本文将介绍如何使用Python编程语言将图像批量转换为PDF,并提供了一个简单易用的图形界面来跟踪转换进度。 准备工作 在开始之前…

一个Linux驱动工程师必知的内核编译机制

Linux内核的编译主要过程:配置、编译、安装。 配置主要由Kconfig提供图形界面完成编译主要基于Kbuild编译系统,执行make完成编译安装主要也是基于Kbuild提供的脚本,然后执行make完成安装 Kconfig Kconfig用于内核的配置,make m…

Kafka入门,保姆级教学

文章目录 Kafka概念消息中间件对比消息中间件对比-选择建议Kafka常用名词介绍Kafka入门1. Kafka安装配置2.Kafka生产者与消费者关系3.Kafka依赖4.生产者发消息5.消费者接受消息6.Kafka高可用性设计6.1集群Kafka备份机制(Reolication) 7.kafka生产者详解7.1 发送类型7.2参数详解…

任务12、Quality指令加持,Midjourney生成电影级数码作品

12.1 任务概述 本次实验任务旨在帮助你掌握Midjourney AI绘画中的Quality指令。通过深入介绍Quality指令的概念和作用,我们将解释为什么它在绘画中至关重要。通过测试不同的Quality参数对绘画效果的影响,并提供实战演示,你将学会如何在Midjourney中设置Quality参数以达到更…

背包问题一维写法(状态压缩)实战,其二(目标和、零一和)

给定一个非负整数数组,a1, a2, ..., an, 和一个目标数,S。现在你有两个符号 和 -。对于数组中的任意一个整数,你都可以从 或 -中选择一个符号添加在前面。 返回可以使最终数组和为目标数 S 的所有添加符号的方法数。 示例: 输…

解决msvc编译luajit找不到ftelli64的问题

为避免恶心的版本套版本的msvcxxx,我一直用的是wdk-7600.16385.1,执行msvcbuild.bat编译,报错lib_io.obj : error LNK2019: unresolved external symbol __imp__ftelli64 referenced in function lj_cf_io_method_seek,网上搜索&a…

node上传文件 + vue3 + elementPlus 组件封装

一、node 1.在node环境中安装multer(node.js中间件)包,用于处理 multipart/form-data 类型的表单数据 npm install --save multer 2.userRouter var express require(express); const multer require(multer) const upload multer({ dest: public/avataruplo…

“实现数字化转型:探索会议OA项目的高级技术与创新应用“

文章目录 引言:1.项目背景和需求分析:2.技术选型和架构设计:3.项目实现和功能亮点:3.0 layui实现登录及注册3.1 会议管理模块3.1.1 会议发布3.1.2 我的会议3.1.3 我的审批3.1.4 会议通知3.1.5 待开会议3.1.6 历史会议3.1.7 所有会…

学生管理系统(升级版)

import java.util.ArrayList; import java.util.Random; import java.util.Scanner;public class Demo_学生管理系统 {public static void main(String[] args) {ArrayList<User> list new ArrayList<>();Scanner sc new Scanner(System.in);while (true) {Syste…

浅谈新电改背景下电网企业综合能源服务商业模式研究及发展方向

安科瑞 华楠 摘要: 新电改方案实施后&#xff0c;由于输配电价的改革和售电侧的放开&#xff0c;电网企业的盈利模式也随之发生了变化。这就要求电网企业转变服务理念与经营方式&#xff0c;来寻求竞争优势。基于“魏朱六要素商业模式”模型&#xff0c;对电网企业综合能源服务…