Система:
Ubuntu 18.04 LTS
(2) Графические процессоры NVIDIA GTX 1080Ti 11 ГБ
Версия драйвера: 440.33.01
CUDA версия: 10.0
В настоящее время я использую Tensorflow 2.0 (Python) и библиотеку tf.keras для обучения CNN. Тем не менее, я сталкиваюсь с проблемой, когда пытаюсь обучить свою модель, позвонив по номеру model.fit()
. После того, как я начинаю тренировку, потеря для первой эпохи нормальна для 1-2 шагов. Но после этого он внезапно становится NaN потерей. Если я пытаюсь остановить ядро, на котором выполняется обучающий скрипт, весь компьютер зависает.
Эта проблема только возникает при использовании нескольких графических процессоров. Код, который я использую, прекрасно работает на одном графическом процессоре. Я завернул весь свой код в область действия tf.distribute.MirroredStrategy
, используя with strategy.scope():
. Я загружаю свою сеть данными из tf.data.Dataset
(хотя эта ошибка возникает независимо от данных, которые я использую для обучения).
Затем я выполнил несколько тестов:
1) Я попытался заменить данные в моем наборе данных случайными числами из распределения, но стиль потерь пошел к NaN.
2) Я также попытался подать numpy массивы непосредственно на .fit()
, но это не решило проблему.
3) Я пытался использовать разные оптимизаторы (Adam, RMSprop, SGD), размеры пакетов (4, 8, 16, 32) и скорости обучения, но ни один из них не помог решить эту проблему.
4) Я поменял свою сеть на простой многоуровневый персептрон, но ошибка не исчезла.
Похоже, это не проблема OOM, поскольку данные относительно малы и работают watch -n0.1 nvidia-smi
показывает, что использование памяти никогда не превышает 30% ни на одном из моих графических процессоров. Похоже, что в выводе консоли нет никаких предупреждений или ошибок, которые могли бы намекают на проблему.
Любая помощь приветствуется