Шаг трансформатора / сек уменьшается со временем до 0 - PullRequest
0 голосов
/ 19 марта 2019

Проблема: Обучающие шаги / с при использовании модели трансформатора многократно падают с 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 шагов в секунду.Обратите внимание, что вертикальная ось является логарифмической image

. На втором графике показаны 3,25 последовательных прогона нашей модели, где при каждом перезапуске выбирается контрольная точка, созданная предыдущим прогоном.Эти перезапуски не были вызваны ошибкой, но произошли из-за того, что наша система автоматически прервала работу с интенсивным использованием графических процессоров через 24 часа.Обратите внимание на постоянное снижение производительности после каждого перезапуска.image

Ожидаемое поведение

Наши прогоны с универсальным трансформатором демонстрируют абсолютно плоскую кривую шаг / сек.На рисунке ниже показано ожидаемое поведение в красном цвете с точки зрения дисперсии шаг / сек.Обратите внимание, что шаг / сек модели практически не меняется, за исключением резких перепадов, приписанных шагам оценки.Transformer vs Universal Transformer Step_Sec Decrease (2)

Другая информация / журналы Наше использование графического процессора (по данным 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

...