Caffe前向计算GPU利用率比较低,有什么办法吗?

Hi,
 
我在Python和C++代码下都试了用训练好的网络进行前向计算。
结果是一致的,就是GPU利用率比较低。
我用的单卡Titan XP,12GB显存,Batch_size 40以后,显存占到10GB,但是GPU利用率只能到77%~79%。
 
在Python和C++脚本中我尝试建立网络输入数据之后,循环执行:net_.forward(),按照我的理解应该是处理相同的数据,不存在内存拷贝问题,理论上应该能最大限度提升GPU使用率。
 
但结果就是GPU使用率差不多只能到80%不到的水平。不知道有谁遇到过类似的问题吗?
 
C++ Classification Tutorial中提到了这么一句:

Use multiple classification threads to ensure the GPU is always fully utilized and not waiting for an I/O blocked CPU thread.


感觉似乎CPU的线程数对GPU性能发挥是有影响的?
 
我试过OpenBLAS编译时选择4线程,然后Python的CPU模式下确实CPU利用率提高了,但是Python的GPU模式下依旧只有100%的CPU利用率,也就是说Python下的Caffe是无视OpenBLAS的线程数的。
 
我还没有试C++的情况如何,或许与Python类似?
 
非常苦恼
 
 
已邀请:

青枫桥影

赞同来自: oscarriddle

Caffe GPU利用率低我觉得有一个可能是网络太深,数据传递需要时间,可以考虑用wide network 而不是用deep network。现在还是比较主推Pytorch和Tensorflow,已经弃坑Caffe了。

卜居2016 - 《深度学习:21天实战Caffe》作者,就职于阿里云计算有限公司。

赞同来自: oscarriddle

提高 GPU 占用率有如下几个思路:
1. 提高 Batch Size(直到显存爆掉);
2. 减少层数;
3. 提高单层计算量(如增大 channels、kernel_size,减小 stride、group);
4. 使用 cuDNN;
5. 如果只是前向计算,可以用 TensorRT;

xmyqsh

赞同来自:

把卷积层换成全连接层  听我的  错不了
 
Use multiple classification threads to ensure the GPU is always fully utilized and not waiting for an I/O blocked CPU thread.
这句话的意思是一个线程跑一个classification网络  也就是同时跑多个classification网络  比如把你那batch_size是40的classification网络换成两个batch_size是20的classification网络试试

要回复问题请先登录注册