Пришло время отказаться от генераторов Keras?

Генераторы Keras и их дополнения упростили обучение модели AI / ML на основе видения. Но по мере роста обучающих данных ограничения генераторов Keras начали проявляться. Генераторы Keras обычно работают на ЦП, и во время обучения с несколькими графическими процессорами производительность обучения затрудняется генераторами Keras.

Чтобы решить эту проблему, мы начали изучать возможность миграции генераторов Keras на входные конвейеры сборки tf.data. Производительность была потрясающей, но ограниченное количество доступных дополнений было серьезной проблемой. После того, как мы сломали голову, чтобы безуспешно интегрировать дополнения Keras, мы наконец решили интегрировать Albumentations в конвейер tf.data.

Основные причины выбора Albumentations:

  1. С Albumentations становится проще применять и экспериментировать с различными дополнениями с конвейером tf.data, по сравнению с дополнениями, включенными в конвейер tf.data по умолчанию.
  2. Мы отдельно тестировали Albumentations на производительность и обнаружили, что скорость впечатляет.

Производительность генератора сырых данных с увеличением

Настройка оборудования

ЦП: AMD Ryzen 7 1800X - 8 ядер - 16 логических процессоров - 3600 МГц. RAM: 32 ГБ. GPU: 1 x NVIDIA 1080Ti 11 ГБ. Тест MultiGPU с 6 видеокартами NVIDIA 1080Ti 11 ГБ будет добавлен позже.

E Настройки эксперимента

Всего образцов: 5000. Размер выходного изображения: 224 * 224 * 3.

Те же дополнения были использованы для измерения производительности Keras и Albumentations:

  1. Случайный горизонтальный переворот
  2. Случайная яркость с диапазоном +/- 20%.
  3. Изменить масштаб изображения между [0,1]

Мы выполняем несколько запусков одной и той же реализации более одного раза, поскольку настройки предварительной выборки и кеширования tf.data вступают в силу после завершения первого запуска.

Во-первых, мы измеряем исходную пропускную способность всех генераторов, вызывая метод next () каждого итератора реализаций («iter»).

Как показано на приведенных выше рисунках, последовательность Keras с альбументациями дает улучшение примерно на 6% по сравнению с Keras Generator с добавлением Keras. Однако с tf.data и альбументациями первый запуск сам по себе показывает ускорение на 130–200% и 180–6658% в последующих запусках.

Подробный анализ настроек TF.Data

Настройка предварительной выборки TF.Data

Из официальных документов Tensorflow:

Предварительная выборка перекрывает предварительную обработку и выполнение модели на этапе обучения. Пока модель выполняет шаг обучения s, входной конвейер считывает данные для шага s+1. Это сокращает время шага до максимума (в отличие от суммы) обучения и времени, необходимого для извлечения данных.

Преобразование предварительной выборки дает преимущества в любое время, когда есть возможность перекрыть работу «производителя» с работой «потребителя».

По сути, предварительная выборка создает конвейерную реализацию для функции увеличения данных и функции обучения, чтобы они могли работать параллельно.

Судя по приведенным выше цифрам, предварительная выборка, похоже, немного улучшает производительность при cache = False, но оказывает значительное влияние при cache = True.

Настройка кэша TF.Data

Из официальных документов Tensorflow:

Преобразование tf.data.Dataset.cache может кэшировать набор данных в памяти или в локальном хранилище. Это убережет некоторые операции (например, открытие файла и чтение данных) от выполнения в каждую эпоху.

Если cache = True, преобразованный набор данных будет загружен в память / ОЗУ.

Если cache = ‹‘ file_name ’›, преобразованный набор данных будет сохранен как файл на жестком диске. В обоих случаях первый запуск будет медленнее, а последующие будут намного быстрее.

Если cache = False, кэширование не выполняется. Таким образом, все прогоны будут иметь одинаковую производительность.

Основываясь на приведенных выше цифрах, cache = True обеспечивает исходную пропускную способность 3500–4500 изображений в секунду, что в 52–66 раз больше по сравнению с базовым генератором Keras + дополнением Keras. Чтобы использовать этот параметр, нужен здоровенный барабан, в который можно загрузить полный набор данных.

При использовании файла кеша с настройкой - cache = ‹‘ file_name ’› пропускная способность составляет ~ 1000 изображений / сек. Это компромисс из вышеприведенного случая, но все же 10-кратное ускорение по сравнению с исходным уровнем.

Даже без кеша и предварительной выборки мы получаем 194 изображения в секунду, что примерно в 2 раза быстрее.

Теперь нам нужно измерить, влияет ли эта чистая производительность на улучшение нашего обучения.

Сравнение эффективности тренировок

Во-первых, мы устанавливаем одинаковое количество рабочих для всех конфигураций. Базовым показателем для сравнения является Keras Generator с Keras Augmentation.

Как и ожидалось, tf.data с кэшированием памяти и предварительной выборкой дает 8-кратное ускорение по сравнению с базовым уровнем. Ускорение необработанной пропускной способности tf.data в 66 раз упало до 8X, это может быть связано только с 1 графическим процессором, где узким местом будет время обучения в графическом процессоре, а не во входном генераторе. Использование нескольких графических процессоров может уменьшить это. Эти результаты экспериментов будут сформулированы и добавлены позже.

Производительность конфигурации с несколькими сотрудниками

Увеличиваем количество рабочих к конфигурациям генератора и последовательности Keras.

tf.data не влияет на настройку параметра worker.

С помощью Keras Generator + Keras Augmentation максимальный достигнутый IPS составил 234 с рабочими = 9. С Keras Sequence + Albumentations Augmentation, 258 изображений / сек были самыми высокими с рабочими = 10.

По сравнению с опцией tf.data с кешем, которая дала производительность обучения 565 изображений в секунду, генератор и последовательности Keras не справляются с производительностью как минимум в 2 раза в системе с одним графическим процессором.

Если рассматривать вариант tf.data без кеширования и предварительной выборки, производительность составит 180 изображений в секунду. Однако это будет случай недоиспользования ресурсов.

Последние мысли

Из исследования становится ясно, что использование tf.data для обучения и Albumentations для более простых и эффективных дополнений должно использоваться в будущем.

Хотя tf.data кажется нестабильным при работе с большими наборами данных - по крайней мере, с нашей стороны. При выбранной опции файла кеша создается временный файл размером более 100 ГБ для используемого нами набора данных.

Автор: Винаяка Джьоти

Linkedin: https://www.linkedin.com/in/vinayakajyothi/

Компания Linkedin: https://www.linkedin.com/company/aibharata/

Сайт компании: https://www.aibharata.com/