У меня установлено 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).