2016年7月14日木曜日

【速報】TensorFlowの性能問題が解決しました。(今日)

いろいろ理解を深めたり、いろいろなハードウェア構成で学習や処理を試していましたが、TensorFlowはどうもCPUリソースを先に使い切ってしまう傾向があり最近困っていました。
調べてみると、TensorFlowのcifar10のサンプルなんかもそうかも知れませんが、
LRNOp、LRNGradOp クラス絡みがCPU側で重くボトルネックになっているみたいでした。

TensorFlowでは、各xxxOpに対して勾配を求めるクラスxxxGradOpも存在しています。
それは、学習の際に使われることになります。

従来、LRN(tf.nn.lrn()又は名前が変わってtf.nn.local_response_normalization())を含むモデルは、そこがどうしてもCPU処理になってしまい、
特に学習の際は、LRNGradOp の計算処理が重くなり、その計算中のGPU負荷は0%で、GPUを高性能なものに変えてもあまり性能が上がらない原因でした。

自分でなんとかGPU側の処理にできないか、とか他のフレームワークに乗り換えようか、とも思っていたのですが、なんと!「今日直ったみたいです」

 この問題は、結構前からissueであがっていて
 「Add gpu support for LRN
がそうです。cudnnに該当処理があることは分かっていたみたいですね。

そして遂に、今日masterブランチで修正されたみたいです。
Roll-forward of "Local Response Normalization GPU support via Stream Executor."

早速ビルドしなおしてためしてみましたが、
これで、TensorFlowのCPU使いきり問題は「私の手元のモデルでは」解決しました!
皆さんも同じ事象で困っていた人は、最新ソースをビルドして使ってみましょう!

0 件のコメント:

コメントを投稿