1

モデルのキューがありますが、GPU が 2 つあるため、並行して実行できるのは 2 つだけです。そのために、コードの最初で、 を使用してどの GPU が利用可能かを判断しようとしますGPUtil--runtime=nvidia関連するかもしれませんが、このコードは、フラグを使用して起動された docker コンテナー内で実行されます。

どの GPU で実行するかを決定するコードは、次のようになります。

import os
import GPUtil
gpu1, gpu2 = GPUtil.getGPUs()

available_gpu = gpu1 if gpu1.memoryFree > gpu2.memoryFree else gpu2
os.environ['CUDA_VISIBLE_DEVICES'] = str(available_gpu.id)

import tensorflow as tf

さて、この方法で 2 つのスクリプトを起動しました (最初のスクリプトが GPU を占有するまで少し遅れました) が、両方とも同じ GPU を使用しようとしました!

さらに問題を調査しました。手動で を設定しos.environ['CUDA_VISIBLE_DEVICES'] = '1'、モデルを実行させました。トレーニングだったので、出力を確認しnvidia-smiたところ、次のようになりました

user@server:~$ docker exec awesome_gpu_container nvidia-smi
Mon Mar 12 06:59:27 2018       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 384.111                Driver Version: 384.111                   |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  GeForce GTX 980 Ti  Off  | 00000000:01:00.0  On |                  N/A |
|  0%   50C    P2   131W / 280W |   5846MiB /  6075MiB |     81%      Default |
+-------------------------------+----------------------+----------------------+
|   1  GeForce GTX 1080    Off  | 00000000:03:00.0 Off |                  N/A |
|  0%   39C    P8    14W / 200W |      2MiB /  8114MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+

1そして、可視デバイスを に設定している間、実際には 0 で実行されていることに気付きました

繰り返しますが、私の使命は、実行を開始する各モデルが使用する GPU を自分で決定する複数のモデルをキューに入れることです。

を調べましallow_soft_placement=Trueたが、両方の GPU にメモリが割り当てられたので、プロセスを停止しました。

要するに、トレーニング スクリプトが 1 つの GPU のみを使用し、無料の GPU を選択するようにするにはどうすればよいでしょうか?

4

1 に答える 1