Проблема: Обучающие шаги / с при использовании модели трансформатора многократно падают с 20 шагов / с до <1 шага / с. <br>Это воспроизводится внутри.Использование GPU резко падает до ~ 0% за периоды <1 шаг / с </p>
Контекст: Мы тренируемся с моделью трансформатора .
Обучениеплохо работает с Transformer , но хорошо работает с Universal Transformer .
В обоих сценариях мы используем 4x P100, токены подслов (https://github.com/tensorflow/tensor2tensor/blob/master/tensor2tensor/data_generators/text_encoder.py#L448), и MirroredStrategy Enabled стратегия распространения.
(Мы наблюдали такое же поведение и с 8x V100.)
Абляционные тесты на 1) P100 против V100, 2) MirroredStrategy против t2t'sвстроенный мульти-графический процессор и 3) Универсальный трансформатор и Трансформер показывают, что # 3 является движущей переменной.
Мы используем реализации преобразователя / универсального_трансформатора тензорного тензора.Используются hparams: transformer_tiny и universal_transformer_tiny.Одно примечательное отклонение от обычного использования состоит в том, что наше значение hparams.max_length велико (2500), а размер нашего пакета часто мал, поскольку наша средняя длина последовательности составляет 750 токенов.
Текущее поведение СТрансформатор, шаг / сек тренировочного бега чередуется между примерно 20 шагами в секунду и 0,5 шагами в секунду.
В течение первых 3-4 часов он смещается в сторону 20 шагов в секунду.Следующее - ~ 2 часа, оно начинает падать до 0,5 шага / сек чаще, прежде чем окончательно падает почти исключительно до 0,5 шага / сек.
Если мы возобновим наш тренировочный процесс с контрольной точки, которая была сделана, когдамодель работает медленно, поведение повторяется, начиная с 20 шагов в секунду, а затем снижается до 0,5.
Ниже приведены два графика. Первый - это график ухудшения шага в секунду нашей модели в течение тренировочного заезда.Среднее значение на раннем этапе составляет ~ 20 (с некоторыми случайными падениями до уровня ниже 5 шагов в секунду), но по мере продолжения тренировки наша производительность падает почти до 0 шагов в секунду.Обратите внимание, что вертикальная ось является логарифмической
. На втором графике показаны 3,25 последовательных прогона нашей модели, где при каждом перезапуске выбирается контрольная точка, созданная предыдущим прогоном.Эти перезапуски не были вызваны ошибкой, но произошли из-за того, что наша система автоматически прервала работу с интенсивным использованием графических процессоров через 24 часа.Обратите внимание на постоянное снижение производительности после каждого перезапуска.
Ожидаемое поведение
Наши прогоны с универсальным трансформатором демонстрируют абсолютно плоскую кривую шаг / сек.На рисунке ниже показано ожидаемое поведение в красном цвете с точки зрения дисперсии шаг / сек.Обратите внимание, что шаг / сек модели практически не меняется, за исключением резких перепадов, приписанных шагам оценки.
Другая информация / журналы Наше использование графического процессора (по данным nvidia-smi) тесно связано с приведенным выше графиком.Там, где наш шаг / сек высок, наш коэффициент использования графического процессора почти всегда составляет 50%, иногда снижаясь до 0 в течение секунды или двух, прежде чем снимать обратно.Когда наш шаг / сек постоянно падает до уровня ниже единицы, наш коэффициент использования графического процессора в основном составляет 0%.Каждые несколько минут он кратковременно выстреливает до 50%, а затем падает до 0% в секунду.
С точки зрения производительности, наша модель трансформатора продолжает улучшаться даже при уменьшении шага в секунду.
Информация о конфигурации оборудования:
Информация о системе
- Я написал собственный код (в отличие от использования сценария со стандартным примером, предоставленного вTensorFlow):
Да - Платформа и распространение ОС (например, Linux Ubuntu 16.04):
Ubuntu 18.04 - TensorFlow установлен из (источника илидвоичный файл):
Установка двоичного файла / pip - версия TensorFlow
1.13.1 - версия Python:
3.6.7 - версия CUDA / cuDNN:
CUDA = 10 CUDNN_VERSION 7.5
- модель и память графического процессора:
8X V100 16 ГБ
служил тому же поведению с CUDA 9.2 и TF 1.12, скомпилированным для CUDA 9.2.)
Изображение Docker
Смежные вопросы:
https://github.com/tensorflow/tensor2tensor/issues/1484
https://github.com/tensorflow/tensorflow/issues/26635