GPU(Nvidia GeForce GTX Titan X)とTensorflow 0.6を備えたNvidia Digits Boxを使用してニューラルネットワークをトレーニングしていますが、すべてが機能しています。しかし、Volatile GPU Util
usingを確認するnvidia-smi -l 1
と、わずか 6% であり、Tensorflow を実行するプロセスの CPU 使用率が約 90% であることから、ほとんどの計算は CPU で行われていると思います。その結果、トレーニング プロセスが非常に遅くなります。トレーニング プロセスを高速化するために、CPU の代わりに GPU を最大限に活用する方法はあるのでしょうか。ありがとう!
1 に答える
どこかにボトルネックがあると思われます (この github issueのように) -- GPU 実装を持たない操作があるため、CPU に配置され、データ転送のために GPU がアイドル状態になっています。たとえば、最近までreduce_mean
GPU に実装されておらず、それ以前は GPU にRank
実装されておらず、暗黙のうちに多くの op で使用されていました。
ある時点で、 CPU に配置された op があったため、 full_connected_preloaded.pyからのネットワークが遅くRank
なり、各ステップで GPU から CPU へのデータセット全体の転送がトリガーされることがわかりました。
reduce_prod
これを解決するには、まず 0.8 にアップグレードすることをお勧めします。これは、GPU用 (整数入力reduce_mean
など)にいくつかの操作が実装されているためです。
次に、でセッションを作成し、log_device_placement=True
CPU または GPU に、ステップごとに過剰な転送を引き起こす ops が配置されているかどうかを確認できます。
parse_example
GPU 実装を持たない入力パイプライン ( など) には多くの場合、with tf.device("/cpu:0"):
ブロックを使用して入力パイプライン全体を CPU に固定することが役立つ場合があります。