2017-01-09 12 views
0

sess.runs(畳み込みニューラルネットワークに適用)のタイムアウト機能をテストしていますが、タイムアウトがあまり正確ではないようです。Tensorflowの不正確なタイムアウト

たとえば、タイムアウトを800ミリ秒に設定すると、タイムアウト例外がトリガーされるまでに1〜2秒の遅延が発生することがあります。このようなことは、計算ノード間で取り消し通知が捕捉されないと私に信じている。

ので

1)タイムアウトがより正確にする方法はあります(タイムラインに応じて0.2から0.5秒ごとれていますか)?

2)ノードの計算の間にTensorflowキャンセルの通知が取り込まれますか?ファイルから空のキューからdequeuing、完全キューにenqueuing、及びreading

答えて

1

TensorFlowでキャンセル及びタイムアウト機構のみ特に、操作を阻止少数をキャンセルするように設計されました。

あなたは、このようなtf.matmul()tf.nn.conv2d()として非ブロック操作を含むグラフを実行し、タイムアウトが満了した場合、これらの操作はエラーを「超え期限」と返す前に完了するまで、TensorFlowは、一般的に待機します。

これはなぜですか?ユーザは、ブロック操作のパイプラインをグラフに作成し始めたため(たとえばreading data)、これらのパイプラインをきれいにシャットダウンするために何らかのキャンセルが必要でした。タイムアウトは、これらのパイプラインで残念なことに起こりうるデッドロックをデバッグするのにも役立ちます。対照的に、TensorFlowは、ノンブロッキング操作を可能な限り効率的にディスパッチするように設計されています。たとえば、GPUで実行する場合、TensorFlowは完了時にブロックすることなくGPUの計算ストリームに非同期でエンキューします。技術的には、各操作の実行の間のキャンセルをチェックすることは可能ですが、これは操作のディスパッチに遅延を追加し、一般的な場合の全体的なパフォーマンスを低下させます。

ただし、ノンブロッキング操作のタイムアウト/キャンセルがご利用の場合に便利な場合は、GitHub issueを機能リクエストとして開いてください。

+0

涼しいですが、少数のブロック操作しかキャンセルできないことがわかります。 – user2454808

+0

キャンセル可能と思われる場所に 'WaitForNotificationWithTimeout'と' WaitForNotification'が散在しています。ノンブロッキング操作に 'WaitForNotificationWithTimeout'を追加すると、それらもキャンセル可能になりますか? 私は変更を試みることができるように、グラフ操作の間で取り消しを無効/有効にするために必要なことを理解しようとしています。私はおそらくそれに対処するgithub機能要求を開くでしょう。 – user2454808

+0

このように解決できるケースがあるかもしれませんが、一般的な問題はそれほど単純ではありません。ノンブロッキング操作は通知を明示的に待つことはほとんどなく、 'run()'コールは、進行中の作業は、返す前に完了しています(ぶら下がっているポインタを避けるため)。暗黙のブロッキングの多くは、Eigen(並列作業が複数のスレッドに分割される)またはGPUデバイス(すべての非同期作業が確実に完了するようにランタイムがGPUストリームと同期する)にあります。これらのそれぞれは修正することが可能ですが、大きな変更が必要な場合があります... – mrry

関連する問題