Моя команда, команда Data Science Research в Digital Turbine, работала над новым продуктом, основным компонентом которого была модель DL для классификации изображений.

Когда команда взялась за эту задачу, нашей первой мыслью было: «Что мы будем использовать в качестве инструмента управления экспериментом?»

На этапе POC мы подумали, что было бы здорово опробовать некоторые новые инструменты, которые мы никогда раньше не пробовали. Это дало бы нам некоторую реальную ценность при принятии решения о том, как нам двигаться вперед с точки зрения развития.

В основном мы хотели инструмент, который отвечал бы следующим требованиям:

  • Визуализируйте результаты эксперимента в режиме реального времени
  • Разрешить удобное сравнение запусков эксперимента
  • Разрешите нам автоматический метод настройки гиперпараметров
  • Сможете легко соединить нашу кодовую базу и нашу среду разработки

Основываясь на вышеуказанных потребностях, мы решили выбрать Weights and Biases (W&B).

Обзор

Давайте посмотрим, что предлагает этот инструмент и как он может помочь нам достичь наших целей.

Следующий отрывок взят из документации W&B:

«Weights & Biases — это платформа машинного обучения, позволяющая разработчикам быстрее создавать более качественные модели. Используйте легкие, совместимые инструменты W&B, чтобы быстро отслеживать эксперименты, версии и итерации наборов данных, оценивать производительность моделей, воспроизводить модели, визуализировать результаты и выявлять регрессии, а также делиться результатами с коллегами.

Выделенные жирным шрифтом части — это именно то, чего мы хотели добиться.

В любом случае использования Data Science есть 3 основные части, которые мы должны учитывать при разработке:

  1. Данные
  2. Модель
  3. Код

В нашем случае данные загружаются в загрузчики данных PyTorch, модель построена на основе PyTorch Lightning, а наш код основан на этих двух технологиях, а также на чистом Python. К счастью, W&B имеет интеграцию со всеми этими фреймворками.

В рамках нашего POC с помощью этого инструмента мы хотели убедиться, что:

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

Это, очевидно, включает настройку гиперпараметров, а также некоторые базовые прогоны.

Основные пробежки W&B

Здесь цель состояла в том, чтобы запустить процесс и отследить ряд «базовых» прогонов, которые дадут нам представление о том, как работает наша модель.

С помощью W&B нам удалось сделать это быстро, легко и, самое главное, мы смогли получить решение о том, как нам перейти к «более глубокому» этапу настройки гиперпараметров.

Ниже вы можете увидеть график, который демонстрирует некоторые прогоны различных моделей вместе с отслеживанием конкретной метрики, которую мы больше всего заинтересованы наблюдать (пробел проверки — глобальная средняя точность):

Интеграция довольно проста и включает в себя две основные части:

  • Определение проекта. «Проект» в W&B — это то, что содержит несколько прогонов модели и, в конечном счете, предназначено для хранения всей информации об этапе разработки модели.
  • Определение запуска — когда у нас есть проект, мы можем определить запуск, который будет включать «инфраструктуру» того, что мы планируем отслеживать:
  • Параметры в течение эпох — включает информацию о текущем прогоне, в частности — с какими параметрами запускалась эта модель
  • Имя прогона (например, model=ResNet__date=2022–03–29_15_30_00) — уникальное имя, которое поможет вам проанализировать этот конкретный прогон.
  • Метрики в течение эпох — это может быть самая важная часть мониторинга. Он включает в себя метрики, которые вы хотите визуализировать — например. точность, потери, несколько функций оценки, вы называете это. Чтобы добавить метрику, просто вызовите метод журнала, основанный на регистраторе W&B.

Использование гиперпараметров

В W&B есть компонент под названием «Sweeps». Одним словом, «развертка» — это процесс автоматизации гиперпараметров, посредством которого разработчик может легко диктовать стратегию настройки гиперпараметров с большими возможностями «пространственного поиска», в основном:

  • Поиск по сетке (для проверки всех возможных комбинаций данной модели)
  • Случайный поиск (чтобы добавить немного «рандомизации» поверх поиска по параметрам)
  • Байесовский поиск — статистический метод, использующий теорему Байеса для минимизации/максимизации заданной функции.

В нашем случае наши гиперпараметры сосредоточены на инженерной стороне таблицы, например:

  • Размер внедрения модели «признаков». В нашем случае размер внедрения — это размер вектора, который представляет данное изображение и заданный класс. Наша цель — сделать его как можно меньше, сохраняя при этом высокий уровень точности наряду с некоторыми другими показателями оценки модели. Если мы оставим его небольшим, это означает меньший объем памяти для сохранения/загрузки, что приведет к более высокой производительности при выводе.
  • Точный размер. Основной целью этого параметра является производительность, актуальная для PyTorch Lightning. Lightning поддерживает обучение с двойной точностью (64), полной точностью (32) или половинной точностью (16) для хранения значений параметров.
    Половинная точность или смешанная точность — это комбинированное использование 32- и 16-битных плавающих чисел. указывает на уменьшение объема памяти во время обучения модели
  • «Магистраль» данной модели. Термин «магистраль» используется в моделях/документах глубокого обучения для обозначения сети извлечения признаков.
    Эти сети извлечения признаков вычисляют признаки из входного изображения.
  • Мы признаем, что чем меньше объем памяти GPU, тем больше мы можем выжать из наших ресурсов:
  • Чем быстрее данная модель может быть применена к пакету выборок данных.
  • В качестве альтернативы, вместо того, чтобы сжимать больше данных параллельно, можно использовать меньший графический процессор или параллельно выполнять больше требуемой работы графического процессора.

Однако простого сравнения использования памяти графического процессора недостаточно для понимания производительности модели — мы также должны отслеживать фактическое время выполнения каждого приложения модели (во время обучения или проверки), поскольку некоторые модели могут потреблять меньше ресурсов графического процессора, но при этом работать. в целом с самым медленным потоком вычислений.

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

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

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

Выводы

В заключение, Weights and Biases позволили нам выполнить очень быстрый и успешный POC в нашем проекте. Мы уверены, что его использование в долгосрочной перспективе окажет большое влияние на нашу скорость и простоту разработки моделей глубокого обучения в Digital Turbine!