まず、私はまだテンソルフローの初心者です。私はv0.9を使用しており、使用しているマシンにインストールされている2つのGPUを使用しようとしています。だから、ここで何が起こっているのですか?
training data
スクリプトを起動すると、2つのGPUのうちの1つでのみ機能します。デフォルトでは最初のものを取りますgpu:0/
。training data
スクリプトを起動して2番目のGPUで実行すると(必要な変更、つまりwith tf.device..
を実行した後)、tensorflowは最初のプロセスを強制終了し、2番目のプロセスのみを使用します2番目のプロセスを実行するGPU。では、テンソルフローでは一度に1つのプロセスしか許可されていないようです。必要なのは、同じマシンにインストールされた2つの異なるGPUで、2つの異なるモデルに対して2つの別々のtraining data
スクリプトを起動できるようにすることです。この場合、何かが足りませんか?これは予想される動作ですか?ローカルマシンで分散テンソルフローを実行する必要がありますか?
では、テンソルフローでは一度に1つのプロセスしか許可されていないようです。
いいえ。つまり、そのような制限はありません。
これは予想される動作ですか?ローカルマシンで分散テンソルフローを実行する必要がありますか?
予想される動作ではありません。やりたいことは完全に可能です(現在実行中です)ので、問題がある可能性があります。
まず、CUDA
は環境変数CUDA_VISIBLE_DEVICE
を使用しました。これは、ご想像のとおり、セッションに表示されるGPUを設定します。
つまり、異なるGPUで2つのプロセスを実行する場合、より簡単な方法は2つのコンソールを開いて次のことを行うことです。
export CUDA_VISIBLE_DEVICE=0
./train.py
export CUDA_VISIBLE_DEVICE=1
./train.py
私の推測では、あなたのCUDA_VISIBLE_DEVICE
はどういうわけかO(または1)に設定されており、これは実際に問題を引き起こすでしょう。
1つのプロセスに両方のGPUを使用する場合は、次のコマンドを実行できます。
export CUDA_VISIBLE_DEVICE=0,1
./train.py
あるいは:
export CUDA_VISIBLE_DEVICE=
./train.py
それが役に立てば幸いpltrdy
Tensorflowは、検出したすべてのGPUにスペースを割り当てようとします。
これを回避するには、Tensorflowにスクリプトごとに単一の(そして異なる)GPUを表示させます。これを行うには、環境変数_CUDA_VISIBLE_DEVICES
_を次のように使用する必要があります。
_CUDA_VISIBLE_DEVICES=0 python script_one.py
CUDA_VISIBLE_DEVICES=1 python script_two.py
_
_script_one.py
_と_script_two.py
_の両方で、tf.device("/gpu:0")
を使用して、デバイスが表示される唯一のGPUにデバイスを配置します。