在进行去雨去雪去雾算法的实验过程中,博主使用自己的电脑进行实验,尽管能够成功运行,但速度却属实不尽人意,博主的笔记本显卡是GTX960,显存为4G,在进行实验的过程中,batch-size只能设置为3,好在实验的去噪类型也就只与三种,否则这实验根本无法进行,于是,便萌生了更换笔记本的念头,那么在更换前,就要先做下相关实验,看看性能能够提升多少。
首先记录一下博主在GTX960M上的实验情况:
GTX960M实验情况
显存占用
实验用时
训练一个epoch的实验用时:
可以看到时间大约在15分钟左右。
每训练5个epoch进行一次评估:
属实是太慢了,用时31分钟,而且从结果来看,PSNR与SSIM竟然有些许差距,这才是最严重的,当然这并不是最终结果。
RTX3070实验情况
博主的实验配置为GTX3070(笔记本的哈),显存为8G。那么博主的batch-size就可以调大了,先前在GTX960M时的batch-size为3,若是调整为4则会提示算力不足,而在这里可以将其设置的更大,博主设置batch-size=6。
显存占用
batch-size=6时的显存占用情况:
实验用时
训练一个epoch的实验用时:
评估一个epoch的时间:用时不到6分钟,相比GTX960提升简直不要太大。
RTX 4060
博主换新电脑了,使用的是CPU为i713700H,显卡为RTX4060 8G显存,从任务管理器来看,此时的CPU的使用率很低,倒是内存占用率较高,此时博主将batch-size设置为8。
显存占用
batch-size=8 时的显存占用情况:
实验用时
训练一个epoch的实验用时,可以看到此时batch-size=8时,其用时较3070还多了30秒。
随后博主开启野兽模式,将性能拉满,轰鸣声响起
此时的训练用时:可以看到此时的用时直接提升了1分钟,还是蛮明显的。
随后博主将batch-szie设置为6,此时的使用情况:
显存占用
batch-size=6时的显存占用情况:
实验用时
可以看到,此时将batch-size设置为6后的实验用时反而下降了,而且此时博主使用的还是均衡模式。
评估一个epoch的时间:用时大约 8 分钟,当然这个时候是均衡模式下的结果,此时较3070还是有些差距,但当开启野兽模式后,这个结果就很接近了。
评估用时,将模型移到CUDA后,速度极大提升。
总结:
这里不得不说拯救者表现还是蛮不错的,在均衡模式下的风扇声音很小,点个赞!!!!而在使用3070卡时的风扇声音实在吓人,而当拯救者开启狂暴模式的性能直追3070,并且噪声较小。
此外,在运行时出现问题:
untimeWarning: invalid value encountered in scalar divide
ret = ret.dtype.type(ret / rcount)
NaN or Inf found in input tensor.
这可能是在使用numpy时出现了0除以0的情况造成的。
找到报错的地方,加上下面这句:
import numpy as np
np.seterr(divide='ignore',invalid='ignore')
关于num_workers
此外,值得注意的是,这里的num_workers博主设置为0,因为先前在服务器上运行时发现num_workers不为0的话会报错,这是程序的问题了,为了避免意外,还是老老实实的设置为0吧。
- GPU是由CPU发送指令和数据来执行计算任务的。在GPU中,线程是由CPU分配的,并且从CPU获取它们需要处理的数据。GPU本身没有能力添加线程或获取数据,它只能按照CPU给定的指令和数据执行计算任务。因此,送数据是由CPU的主线程负责送的。
2.num_workers=0,CPU不分配额外线程,只有一个主线程,负责将数据送到RAM后再将数据送到GPU.
3.num_works=1时,CPU分配一个单独线程专门负责将数据送到RAM,主线程专门负责将数据送到GPU
尽管将其设置的大一些可以提高,但按理说这种情况是不该出现的,这本身就是数据集加载时的问题,因此为了实验严谨,博主在3070的那台电脑上进行了实验,博主首先将num_workers设置为1。