我编写了Caffe前向分类脚本的Python和C ++版本来测试Caffe的推理性能。该模型已经过培训。结果非常相似,GPU utils还不够用。
我的设置: 1.卡片:Titan XP,12GB 2.型号:InceptionV3 3.尺寸:3 * 299 * 299
当batch_size设置为40时,GRAM的使用率可以达到10GB,但GPU和C ++的GPU工具只能达到77%~79%。所以性能大约是 258帧/秒。
在我的脚本中,我加载了图像,对其进行预处理,将其加载到输入层,然后重复net_.forward()操作。根据我的理解,这不会导致任何Mem copy操作,所以理想情况下应该最大限度地提取GPU utils。但我只能达到不超过80%。
在C++ Classification Tutorial中,我发现以下短语:
使用多个分类线程确保GPU始终得到充分利用,而不是等待I / O阻塞的CPU线程。
所以我尝试使用多线程编译的OpenBLAS,并且在CPU后端,实际上涉及更多的CPU进行转发,但没有用于GPU后端。在GPU后端,CPU工具将固定为大约100%。
然后我甚至尝试将batch_size减少到20,并在两个终端中启动两个分类过程。结果是,GRAM使用率增加到11GB,但GPU工具减少到64%~66%。最后,性能降低到 200帧/秒。
有没有人遇到过这个问题?我真的很困惑。
欢迎任何意见。
谢谢,
答案 0 :(得分:0)
正如我所观察到的,GPU util减少了,
1)低PCI express模式resnet-152(x16)-90%> resnet-152(x8)-80%> RESNET-152(X4)-70% 2)大型 - VGG-100%(x16); ResNet-50(x16)-95~100%; ResNet-152(x16) - 90%
此外,如果我关闭cuDNN,GPU Util总是100%。
所以我认为有一些与cuDNN有关的问题,但我不太了解这个问题。
NVCaffe稍好一些,MXNet可以100%使用GPU(resnet-152; x4)。