cpu利用率

cpu利用率过高的原因

Posted by shay on November 10, 2020

问题

这周李振阳学长问我你的cpu使用率咋这么高啊?是不是dataloader设计出了一些问题?

cpu使用率

在此之前,我甚至都不知道程序的设计需要考虑cpu使用率,其实cpu使用率是程序运行的一项非常重要的指标,是指运行的程序占用的CPU资源,表示你的机器在某个时间点的运行程序的情况。使用率越高,说明你的机器在这个时间上运行了很多程序,反之较少。所以我的程序cpu使用率高,说明了我的程序中运行了很多线程。

linux查看cpu使用率

通过top命令可以实时看到当前程序的cpu使用率

使用权限:所有使用者

使用方式:top [-] [d delay] [q] [c] [S] [s] [i] [n] [b]

说明:即时显示process的动态

d :改变显示的更新速度,或是在交谈式指令列( interactive command)按s

q :没有任何延迟的显示速度,如果使用者是有superuser的权限,则top将会以最高的优先序执行

c :切换显示模式,共有两种模式,一是只显示执行档的名称,另一种是显示完整的路径与名称S :累积模式,会将己完成或消失的子行程( dead child process )的CPU time累积起来

s :安全模式,将交谈式指令取消,避免潜在的危机

i :不显示任何闲置(idle)或无用(zombie)的行程

n :更新的次数,完成后将会退出top

b :批次档模式,搭配”n”参数一起使用,可以用来将top的结果输出到档案内

解决

我这个工程中运算啥的基本上都是跑在GPU上的,按理说程序运行中不会有很多线程,但是我的cpu使用率基本都在300左右,属实很高了。通过检查代码,我发现我的程序在检索correct_composition和训练、计算loss时,cpu使用率都很高,这些地方都有一个共同特点,都读取了图片。所以我明白了,是因为在程序中实时读取了图片,导致了cpu使用率高。这一点其实那个学长其实也提醒我了,说我可能有数据能预先存放起来,确实是这样。

总结

所以在以后写pytorch的dataloader时,需要注意将数据预处理,预先存放起来,这样在训练的时候直接读取数据,不用再运行多余的线程。

ps:李振阳学长人真的很好,让我感受到非常好的学术氛围。