模型训练速度下降

1. 问题描述:
重复训练之前的模型,发现训练速度明显下降,之前寻一个epoch只需要4分钟,但现在训一个epoch半个多小时。

2. 解决办法
排查了一整天,结果在另一个人的程序停止后,我的训练速度自动回复了正常。我没有解决,服务器自己解决了。。。
下面这张图:6号GPU是另一个同学在用,我的训练很慢的时候,他的GPU利用率基本保持在95%~97%(watch -n 1 nvidia-smi看得)。而我的GPU 利用率在0和20%左右,50%左右跳跃,大概60%的时间停在60%
后来他的GPU利用率变成0了,我的保持在90%多。
猜想这和服务器的主线程有关,可能另一个同学同时占用主线程,导师数据读取时候费时。

3. 排查过程
(1)开始是怀疑我的模型有问题

去找模型前向传播和反向传播的时间:

发现在这个过程中,反向传播(optimize)最费时,又去看具体是反向传播那个过程最费时:


发现是更新参数的时候最费时,开始网上找反向传播很费时怎么解决
一早上搞到中午12:20,得赶紧去吃饭了,不吃食堂关门了。然后在去食堂的路上,算。。。这个模型计算过程时间没有问题啊,每个batch0.3秒,我一个epoch不超过500个batch,算起来时间对的啊。。。问题应该出在数据读取的时候。

(2) 找数据读取的问题
把模型前向传播和反向传播都去掉,只看数据读取的时间:
在DataLoad()的参数中,worker的数量设为4,可以看到,基本上是4个4个一组,换一批的时候时间要很久。而且看久一点会发
现,不同的批次之前间隔的时间差别很大,有时候要40s,有时候只要5s。不知道什么原因,去找自己Dataset的定义,也没找到错。

继续折腾,到下午三点左右,再重新运行时候,数据读取变得很快,被玩死

 

4. 现在仍然不理解的点:
中途为了确定服务其没有问题,找了一个简单的示例:
https://github.com/pytorch/examples/tree/master/mnist
这个示例从头到尾训练都很快
这推翻了我之前的推导:不是因为主进程被其他人占用?

一个程序员知道debug,不了解系统怎么工作的,遇到不是代码导致的问题时,懵逼。要继续修仙啊,补课

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章