2017-10-25 24 views
0

Tensorflow with Pythonを使用して非常に多数のNeural Netsを訓練する必要があります。私のニューラルネット(MLP)は、非常に小さなもの(約30個のニューロンを持つ〜2つの隠れたレイヤー)から大きなもの(それぞれ500以上のニューロンを持つ3-4レイヤー)までに及んでいます。CPUとGPUでPython Tensorflowを並列に実行する

私はそれらのすべてを自分のGPUでシーケンシャルに実行することができます。これは問題ありません。しかし、私のCPUはほとんど空転しています。さらに、私のCPUは私の非常に小さなネットのGPUよりも速いことがわかりました(私はGPUオーバーヘッドなどのために仮定します)。なぜ私はCPUと私のGPUを並列に使ってネットをトレーニングしたいのですか? CPUは小さい方のネットワークをより大きなものに処理する必要があり、GPUは大きい方から小さい方へ処理する必要があります...私は考えています:-)

だから、私は消費者をいろいろなプロセスで二度使い始めるだけです。デバイス= CPUのデバイス、デバイス= GPUのデバイス。どちらも期待どおり最初の2つのネットを使い始めています。しかし、GPUコンシューマはExceptionをスローし、テンソルはCPU上の別のプロセス(!)によってアクセスされ/違反することがわかりました。これはGPU上で動作するはずですから...誰かが私を手伝って、私をプロセスに完全に分けることができますか?

+1

CPUとGPUの両方を使用している場合、期待どおりに動作しません。 GPUの計算よりもはるかに遅い通信が必要です。それでいいですが、GPUを使用して小さなものを実行すると、データの転送/通信が増えるため、動作が遅くなります。 – Sraw

+0

さらに、 "> 500個のニューロンを有する3-4層"は、単なる赤ちゃんネットである。 – Sraw

+0

@スロー:お返事ありがとうございます。しかし、明確にするために:私はCPUとGPUを一緒に1つのネットを鍛えたいとは思っていません。私は、CPUがnet1とGPUを訓練して、net2を独立して訓練したいと思っています。したがって、両方のプロセス間で通信する必要はありません。実際に私はそれらを完全に分離したいと思います。私はちょうど私のアイドリングCPUの計算力を使いたいと思っています。 – Sauer

答えて

1

いずれかのネットワークが通信事業者を共有していますか? など。 variable_scope(reuse=True)

に設定されている同じvariable_scopeで同じ名前の変数を使用する場合、複数のネットが同じ基礎となるTensor構造を再利用しようとします。

また、tf.ConfigProto.allow_soft_placementがあなたのtf.SessionでTrueまたはFalseに設定されていることを確認してください。 Trueの場合、デバイス配置が実際にコードの意図どおりに実行されることは保証されません。

関連する問題