web-dev-qa-db-ja.com

2つのGPUを同時に使用するテンソルフロー

まず、私はまだテンソルフローの初心者です。私はv0.9を使用しており、使用しているマシンにインストールされている2つのGPUを使用しようとしています。だから、ここで何が起こっているのですか?

  1. マシンでtraining dataスクリプトを起動すると、2つのGPUのうちの1つでのみ機能します。デフォルトでは最初のものを取りますgpu:0/
  2. 最初のプロセスを最初のGPUで実行したまま、別のtraining dataスクリプトを起動して2番目のGPUで実行すると(必要な変更、つまりwith tf.device..を実行した後)、tensorflowは最初のプロセスを強制終了し、2番目のプロセスのみを使用します2番目のプロセスを実行するGPU。では、テンソルフローでは一度に1つのプロセスしか許可されていないようです。

必要なのは、同じマシンにインストールされた2つの異なるGPUで、2つの異なるモデルに対して2つの別々のtraining dataスクリプトを起動できるようにすることです。この場合、何かが足りませんか?これは予想される動作ですか?ローカルマシンで分散テンソルフローを実行する必要がありますか?

6
Maystro

では、テンソルフローでは一度に1つのプロセスしか許可されていないようです。

いいえ。つまり、そのような制限はありません。

これは予想される動作ですか?ローカルマシンで分散テンソルフローを実行する必要がありますか?

予想される動作ではありません。やりたいことは完全に可能です(現在実行中です)ので、問題がある可能性があります。


まず、CUDAは環境変数CUDA_VISIBLE_DEVICEを使用しました。これは、ご想像のとおり、セッションに表示されるGPUを設定します。

つまり、異なるGPUで2つのプロセスを実行する場合、より簡単な方法は2つのコンソールを開いて次のことを行うことです。

シングルGPUプロセス(#1):

export CUDA_VISIBLE_DEVICE=0
./train.py

シングルGPUプロセス(#2):

export CUDA_VISIBLE_DEVICE=1
./train.py

私の推測では、あなたのCUDA_VISIBLE_DEVICEはどういうわけかO(または1)に設定されており、これは実際に問題を引き起こすでしょう。

1つのプロセスに両方のGPUを使用する場合は、次のコマンドを実行できます。

デュアルGPUプロセス:

export CUDA_VISIBLE_DEVICE=0,1
./train.py

あるいは:

CPUプロセス(GPUを無効にする):

export CUDA_VISIBLE_DEVICE=
./train.py

それが役に立てば幸い
pltrdy

6
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にデバイスを配置します。

7
nessuno