2016-10-24 3 views
1

私は複数の4GB GPUノードを持っていますので、それらを並列に巨大モデルを実行してください。適切なデバイススコープで複数のレイヤーに分割するだけで、モデルの並列処理が可能になりますが、マスターノード(タスク0)のメモリフットプリントは削減されません。 (10ノード構成 - マスター:20g、フォロワー:2g、1ノード構成 - マスター:6〜7g)テンソルフローでモデルの並列処理を行う正しい方法は何ですか?

疑問のあるものは、デバイスの正しい範囲を設定しなかったためです。

私のモデルはgithubの上でご利用いただけます(https://github.com/nakosung/tensorflow-wavenet/tree/model_parallel_2

デバイス配置ログはここにある:https://gist.github.com/nakosung/a38d4610fff09992f7e5569f19eefa57

答えて

4

だから、良いニュースは、あなたがcolocate_gradients_with_opsを使用していることで、あなたは勾配がされていることを確実にしていることを意味していますopsが配置されている同じデバイスで計算されます。 (https://github.com/nakosung/tensorflow-wavenet/blob/model_parallel_2/train.py#L242

デバイス配置ログを読み込むのは少し難しいので、TensorBoardを使用してグラフを視覚化することをお勧めします。ノードにデバイスを配置する方法を視覚化できるオプションがあります。

第2に、操作のサイズがデバイスにどのようにマッピングされているかを確認できます。最大のレイヤー(最大のアクティベーションまたは最大の重み)が、他のノードよりも多くのノードに不均衡に配置される可能性があります。 https://github.com/tensorflow/tensorflow/blob/6b1d4fd8090d44d20fdadabf06f1a9b178c3d80c/tensorflow/python/tools/graph_metrics.pyを使用してグラフを分析し、グラフ内のリソースが必要な場所をより正確に把握できます。

長期的には、これらの配置問題を自動的に解決しようとしていますが、これまでのモデル並列処理では、物事を正確に配置するために少し注意が必要です。

関連する問題