2016-11-19 16 views
1

我對Tensorflow和ML一般都很陌生,想知道我可以用什麼策略來提高我正在構建的應用程序的性能。在使用Tensorflow w/C++時提高性能的策略?

我的應用程序使用Tensorflow C++接口,對於AVX或AVX,使用源編譯的TF 0.11 libtensorflow_cc.so(使用bazel構建-c opt --copt = -mavx並可選地添加--config = cuda) + Mac OS X 10.12.1上的CUDA,MacBook Pro 2.8 GHz Intel Core i7(2核8線程),16GB RAM和Nvidia 750m w/2GB VRam)

我的應用程序使用Inception V3模型並拉動來自pool_3圖層的特徵向量。我通過本地API解碼視頻幀,並將那些內存緩衝區傳遞給TF的C++接口並將它們運行到會話中。

我目前沒有配料,但我正在緩存我的會話,並重新使用它爲每個單獨的解碼幀/張量提交。我注意到,CPU和GPU的性能大致相同,需要40到50秒來處理222幀,這對我來說似乎很慢。我確認CUDA正在被調用,加載並且GPU正在運行(或者看起來如此)。

一些問題:

  • 一般來說我應該期待合理的表演時間明智TF在消費筆記本電腦做盜夢空間的框架?

  • 配料對這些操作有多大的區別?對於1x299x299x3的張量,我想我正在進行更多的PCI傳輸等待,而不是等待GPU的有意義的工作?

  • if if在C++中爲InceptionV3進行批處理有一個很好的例子嗎?

  • 是否有操作導致額外的CPU-> GPU同步,否則可能會被避免?

  • 有沒有辦法確保我的會話/圖表共享資源?我能以這種方式以某種方式使用嵌套示波器嗎?我無法完成這項工作,但可能錯過了一些東西。

  • 要做/避免的一般策略的任何好的文檔?

我的代碼如下:

https://github.com/Synopsis/Synopsis/blob/TensorFlow/Synopsis/TensorFlowAnalyzer/TensorFlowAnalyzer.mm

利用感知哈希,直方圖,密集光流,對於點跟蹤稀疏光流非常感謝您

僅供參考,OpenCV的分析,對於使用CPU或CPU + OpenCL的相同222幀,簡單顯着性檢測需要4到5秒。

https://github.com/Synopsis/Synopsis/tree/TensorFlow/Synopsis/StandardAnalyzer

回答

1

首先回答你的最後一個問題,如果有關於性能優化的文檔,是:

筆記本電腦的性能是高度可變的, TF對筆記本電腦GPU沒有特別優化。在使用2016版TensorFlow的筆記本電腦平臺上,您獲得的數字(40-50秒內的222幀)〜= 5 fps似乎並不瘋狂。由於上述性能指南中列出的一些性能改進,在2017年底應該可能會增加一倍。

對於批處理,是的 - 較新的example inception model code允許在推斷時使用可變批量大小。這主要是關於模型本身是否被定義爲處理批量大小,自2016年以來有所改進。

批處理推理將在GPU上產生相當大的差異。它是否對CPU有幫助很大程度上取決於 - 例如,如果使用MKL-DNN支持構建,批處理應該被認爲是強制性的,但基本的TensorFlow可能沒有多少好處。