TF: ошибка выделения памяти при наличии двух графических процессоров - PullRequest
0 голосов
/ 06 июля 2018

У меня установлено 2 графических процессора в двух слотах pciex16. Один - 1080Ti, один - 980.

GPU-Z показывает наличие обоих устройств, а диспетчер устройств говорит, что оба устройства работают нормально. Это ОС Windows Server 2012.

Если включено только одно из устройств (через диспетчер устройств я отключаю одно), я могу запустить

from tensorflow.python.client import device_lib
local_device_protos = device_lib.list_local_devices()

и посмотрите GPU: 0 устройства. Он работает как для 980, так и для 1080ti. Я могу запустить другой код TF, и он правильно использует графический процессор.

Если оба устройства включены, если я запускаю этот код, я получаю следующую ошибку CUDA из памяти:

InternalError: failed initializing StreamExecutor for CUDA device ordinal 1: Internal: failed call to cuDevicePrimaryCtxRetain: CUDA_ERROR_OUT_OF_MEMORY; total memory reported: 4294967296

Несмотря на то, что GPU-Z показывает, что использование памяти 980 равно 0.

Если я запускаю sess = tf.Session(), я получаю ошибку "не удалось создать сеанс".

Наконец, если я выполню одну из двух команд дважды, процесс python умрет (python перестал работать во всплывающем окне).

Я попытался запустить с меньшей долей памяти

gpu_fraction = 0.1
gpu_options = tf.GPUOptions(per_process_gpu_memory_fraction=gpu_fraction)
sess = tf.Session(config=tf.ConfigProto(gpu_options=gpu_options))

Но эти сеансы также не запускаются.

В чем причина этих ошибок? На самом деле меня не волнует, чтобы оба gpu были доступны для конкретного процесса python, однако я хочу, чтобы два разных процесса python использовали один gpus каждый.

Спасибо за вашу помощь!

Edit:

просто добавить код, подобный этому, не удается создать сеанс для любого графического процессора, если включены оба графических процессора.

with tf.device("/gpu:1"):
    sess2=tf.Session()

Edit2:

В соответствии с предложением @RobertCrovella, os.putenv('CUDA_VISIBLE_DEVICES','1') or '0' позволил мне успешно выполнять код на одном GPU для процесса.

Edit3:

использование cuda_visible_devices для запуска tf приводит к тому, что gpu-z показывает неправильное использование памяти (оно отображается как 0).

...