最近在一个工控机上跑深度学习的模型,遇到一些奇怪的问题,打算记录下来。(当个工作日志)。软硬件环境:
Ununtu18 + CUDA11.0 + CUDNN,驱动nvidia-450,opencv......;
GPU:2080s(8Gb),CPU:i7 6700
进入正题:
因为最近在学语义分割的算法,在之前跌跌撞撞的配好了环境以后,先拿tensorflow的官方demo进行了测试,在jupyter上运行fashion-mnist的demo没有发生任何问题。
随后我找了一个开源的U-Net的语义分割模型,下载了VOC数据集,在训练程序启动后,可以看到在进入第一个epoch的时候,电脑立即黑屏,显示“进入省电模式”,此时工控机还在响,但是无论重启屏幕,还是重新插拔显示器的电源线、数据线,都无法在显示。
调整训练参数,多次尝试后依然是黑屏的状态,因为我对找到的开源模型不是100%的了解,所以在想有没有可能是哪里设置的不对导致了这种情况,又或者是这个项目的作者写的代码本身有缺陷。想到这里我打算找一个我比较熟悉的深度学习的项目,验证一下是这个Unet模型的问题,还是我的硬件环境的问题。
因为之前做过yolov3的目标检测的项目,我就去官网上找了yolov3的程序,然后用我之前项目的数据集进行训练。(之前在别的多个机器上都运行过同样的训练,我可以确认程序,数据都是没问题的)但是离谱的是,启动训练后,工控机依然是直接黑屏,更扯的是强制重启以后,我的显卡驱动不见了,变成了禁用nouveau而没有驱动的奇怪的显示状态。
重装驱动后,基本确定了是我的硬件上出了什么问题。首先考虑了是不是显示器的问题。在工控机和笔记本上下载了个teamviewer,在笔记本上对工控机进行操控,但是当训练程序运行起来,ubuntu的系统直接卡死,teamviewer上也没法操控。至此排除了显示器问题的嫌疑。
其次想到,会不会是因为爆显存导致的黑屏。tensorflow有限制显存使用的代码,首先我还是在fashion-mnist的demo里测试了一下,硬性限制显存使用为4G,6G,对应训练时显卡的功率为50W左右,显存也在受控的情况。但是将同样的操作带入unet的模型中,首先我设置了4G的显存约束,训练启动依然是黑屏。然后又设置了1G的约束,却直接cuda out of memory。
现在基本排除掉了所有的软件问题,那只能是硬件有问题了。因为我这里的工控机是其他项目用后剩下的,搬回来以后电源很简陋,是用220V转15V再转24V,用了两个逆变器,再重复运行了几遍上面的操作,同时用万用表测了一下工控机的电压电流,发现原来是电源的功率问题!开机静止的时候只有15V,5A,程序运行后到了11A,然后瞬间黑屏。也就是说这套电源只能提供150W左右的功率支持,可是光一个显卡就有250W的功率呢!
最后的解决办法就是:换一个正经的电源。(图里480W的)至于为什么之前有的demo的程序可以运行,可能是它的数据集和网络模型都很简单,不需要显卡满载吧。而yolov3的程序为什么会吃驱动,不得而知了......