Tensorflow с двумя графическими процессорами игнорирует один из них
У меня проблема с вычислением тензорного потока на 2 графических процессорах, подключенных по технологии SLI: только один из них работает, а второй нет, хотя оба графических процессора распознаются TF.
Настройка: - Ubuntu 18.04 - Python 3 - Tensorflow 2.1 - Cuda 10.1 - Драйверы Nvidia (официальные) 440.64 - AMD Ryzen 2700 - Asus x470 prime - Два графических процессора GTX 1070, подключенных через SLI techno.
Я уже протестировал много вещей, которые нашел в Интернете. Конкретно:
Я начал с Tensorflow 2.0, он не работал, поэтому обновил его до TF 2.1. Проблема остается
Очистил и переустановил драйверы Nvidia 430.50. Обновил их до 440.64. Проблема остается
Я проверил каждый из своих графических процессоров отдельно. Я физически удалил один из них, а на остальных запустил код. Это сработало, и кажется, что с графическими процессорами все в порядке.
Я проверил каждый из портов GPU на материнской плате отдельно. Сработало, а значит, с каждым из портов все в порядке.
Я вставил два графических процессора с аппаратным SLI-подключением и без него и запустил следующий код:
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras.applications import Xception
import numpy as np
num_samples = 100
height = 224
width = 224
num_classes = 50
strategy = tf.distribute.MirroredStrategy(devices=['/GPU:0', '/GPU:1'])
with strategy.scope():
parallel_model = Xception(weights=None,
input_shape=(height, width, 3),
classes=num_classes)
parallel_model.compile(loss='categorical_crossentropy', optimizer='rmsprop')
### Works only for the first GPU of the
# parallel_model = Xception(weights=None,
# input_shape=(height, width, 3),
# classes=num_classes)
# parallel_model.compile(loss='categorical_crossentropy', optimizer='rmsprop')
print("Num GPUs Available: ", len(tf.config.experimental.list_physical_devices('GPU')))
# Generate dummy data.
x = np.random.random((num_samples, height, width, 3))
y = np.random.random((num_samples, num_classes))
parallel_model.summary()
# This `fit` call will be distributed on 8 GPUs.
# Since the batch size is 256, each GPU will process 32 samples.
parallel_model.fit(x, y, epochs=20, batch_size=16)
В результате, когда strategy = tf.distribute.MirroredStrategy(devices=['/GPU:0'])
, код работает нормально. Однако когдаdevices=['/GPU:1']
или devices=['/GPU:0', '/GPU:1']
, nvidia-smi показывает некоторый процесс на 2-м графическом процессоре, но выполнение кода складывается в строку
2020-03-28 21:51:14.891325: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1241] Created TensorFlow device (/job:localhost/replica:0/task:0/device:GPU:0 with 7162 MB memory) -> physical GPU (device: 0, name: GeForce GTX 1070, pci bus id: 0000:08:00.0, compute capability: 6.1)
2020-03-28 21:51:14.891805: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:981] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2020-03-28 21:51:14.892399: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1241] Created TensorFlow device (/job:localhost/replica:0/task:0/device:GPU:1 with 7624 MB memory) -> physical GPU (device: 1, name: GeForce GTX 1070, pci bus id: 0000:09:00.0, compute capability: 6.1),
поэтому мне нужно перезагрузить компьютер, потому что он мертв.
- Изначально моя конфигурация X11 (xorg.conf) не была настроена для SLI:
Section "Device"
Identifier "Device0"
Driver "nvidia"
VendorName "NVIDIA Corporation"
EndSection
Section "Device"
Identifier "Device1"
Driver "nvidia"
VendorName "NVIDIA Corporation"
EndSection
Section "Screen"
Identifier "Screen0"
Device "Device0"
Monitor "Monitor0"
DefaultDepth 24
SubSection "Display"
Depth 24
EndSubSection
EndSection
После поиска в Google я играл с sudo nvidia-xconfig -sli=on
; sudo nvidia-xconfig -sli=auto
, так далее
В итоге после перезагрузки получаю бутлуп с 2 строчками:
recovering journal
/dev/nume0n1p2: clean, XXX/XXX files, XXX/XXX blocks
Каждые ~3 секунды экран становится черным, а затем снова отображаются эти 2 строки. Невозможно получить доступ к TTY, потому что он также находится в загрузочном цикле. Посмотрел все, что смог найти по этой теме, ничего не получилось. Итак, я сохранил предыдущую конфигурацию X11 без SLI
Если вы столкнулись с подобной проблемой, не стесняйтесь поделиться ею. Любой совет поможет.
Спасибо!