Проблема: Обучающие шаги / с при использовании модели трансформатора многократно падают с 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](https://user-images.githubusercontent.com/43351375/54249496-c64c5880-4516-11e9-86ad-3a6d6f1c940b.png)
. На втором графике показаны 3,25 последовательных прогона нашей модели, где при каждом перезапуске выбирается контрольная точка, созданная предыдущим прогоном.Эти перезапуски не были вызваны ошибкой, но произошли из-за того, что наша система автоматически прервала работу с интенсивным использованием графических процессоров через 24 часа.Обратите внимание на постоянное снижение производительности после каждого перезапуска.![image](https://user-images.githubusercontent.com/43351375/54249582-0b708a80-4517-11e9-9287-663c54799d00.png)
Ожидаемое поведение
Наши прогоны с универсальным трансформатором демонстрируют абсолютно плоскую кривую шаг / сек.На рисунке ниже показано ожидаемое поведение в красном цвете с точки зрения дисперсии шаг / сек.Обратите внимание, что шаг / сек модели практически не меняется, за исключением резких перепадов, приписанных шагам оценки.![Transformer vs Universal Transformer Step_Sec Decrease (2)](https://user-images.githubusercontent.com/43351375/54287868-dc8cff80-457c-11e9-8c64-52dbfa98c833.png)
Другая информация / журналы Наше использование графического процессора (по данным 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