Руководство по запуску нового проекта

В этом разделе объясняется, как выбрать следующее в начале проекта ML:

  • модель архитектуры
  • оптимизатор
  • размер партии
  • начальная конфигурация

Предположения

Рекомендации в этом разделе предполагают следующее:

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

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

Выберите архитектуру модели

Начнем со следующих определений:

  • Архитектура модели — это система для создания прогнозов. Архитектура модели содержит основу для преобразования входных данных в прогнозы, но не содержит значений параметров . Например, нейронная сеть с тремя скрытыми слоями по 10, 5 и 3 узлами соответственно представляет собой модельную архитектуру.
  • Модель — это архитектура модели плюс конкретные значения всех параметров. Например, модель состоит из нейронной сети, описанной в определении архитектуры модели, а также определенных значений весов и смещений каждого узла.
  • Семейство моделей — это шаблон для построения архитектуры модели с учетом набора гиперпараметров .

Выбор архитектуры модели на самом деле означает выбор набора различных моделей (по одной для каждой настройки гиперпараметров модели).

Если возможно, постарайтесь найти документированную кодовую базу, которая решает что-то, максимально близкое к текущей проблеме. Затем воспроизведите эту модель в качестве отправной точки.

Выберите оптимизатор

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

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

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

  1. В начале проекта выберите оптимизатор с небольшим количеством настраиваемых гиперпараметров. Вот два примера:
    • SGD с фиксированным импульсом.
    • Адам с фиксированными Epsilon, Beta1 и Beta2.
  2. На более поздних этапах проекта переключитесь на более общий оптимизатор, который настраивает больше гиперпараметров вместо того, чтобы устанавливать для них значения по умолчанию.

Выберите размер партии

Резюме: Размер пакета определяет скорость обучения; не используйте размер пакета для непосредственной настройки производительности набора проверки.

Размер пакета во многом определяет время обучения и потребление вычислительных ресурсов. Увеличение размера пакета часто уменьшает время обучения, что:

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

Увеличение размера пакета может уменьшить или увеличить потребление ресурсов или оставить потребление ресурсов неизменным.

Не рассматривайте размер пакета как настраиваемый гиперпараметр производительности проверочного набора . Если соблюдены все следующие условия, производительность модели не должна зависеть от размера партии:

  • Все гиперпараметры оптимизатора хорошо настроены.
  • Регуляризация достаточная и хорошо настроенная.
  • Количество этапов обучения достаточное.

Одинаковая конечная производительность должна быть достигнута при использовании любого размера пакета (см. Shallue et al. 2018 и «Почему бы не настроить размер пакета для непосредственного улучшения производительности набора проверки?») .

Определите возможные размеры пакетов и оцените производительность обучения

Для конкретной модели и оптимизатора доступное оборудование обычно поддерживает диапазон размеров пакетов. Ограничивающим фактором обычно является память ускорителя. К сожалению, может быть сложно рассчитать, какие размеры пакетов поместятся в памяти, не запуская или, по крайней мере, не компилируя полную программу обучения. Самым простым решением обычно является запуск обучающих заданий с разными размерами пакетов (например, возрастание степени 2) за небольшое количество шагов, пока одно из заданий не превысит доступную память. Для каждого размера пакета тренируйтесь достаточно долго, чтобы получить надежную оценку производительности обучения :

пропускная способность обучения = количество примеров, обрабатываемых в секунду

или, что то же самое, время на шаг :

время на шаг = размер пакета/пропускная способность обучения

Когда ускорители еще не насыщены, а размер пакета удваивается, производительность обучения также должна удвоиться (или, по крайней мере, почти удвоиться). Аналогично, время каждого шага должно быть постоянным (или, по крайней мере, почти постоянным) по мере увеличения размера партии. Если это не так, то в конвейере обучения есть узкое место, например, ввод-вывод или синхронизация между вычислительными узлами. Прежде чем продолжить, рассмотрите возможность диагностики и устранения узкого места.

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

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

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

Выберите размер партии, чтобы минимизировать время обучения

Вот наше определение времени обучения :

  • время тренировки = (время на шаг) x (общее количество шагов)

Часто можно считать, что время на шаг примерно постоянно для всех возможных размеров партии. Это верно, когда:

  • Накладные расходы на параллельные вычисления отсутствуют.
  • Все узкие места в обучении были диагностированы и устранены. (См. предыдущий раздел о том, как выявить узкие места в обучении. На практике увеличение размера пакета обычно приводит к некоторым накладным расходам.

По мере увеличения размера пакета общее количество шагов, необходимых для достижения фиксированной цели производительности, обычно уменьшается, при условии, что вы перенастраиваете все соответствующие гиперпараметры при изменении размера пакета. (См. Shallue et al. 2018. ) Например, удвоение размера пакета может вдвое сократить общее количество необходимых шагов. Это соотношение называется идеальным масштабированием и должно сохраняться для партий всех размеров вплоть до критического размера партии.

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

При сравнении размеров партий помните о различиях между следующим:

  • Пример бюджета или бюджета эпохи — проведение всех экспериментов с фиксированным количеством презентаций обучающих примеров.
  • Бюджет шага — проведение всех экспериментов с фиксированным количеством шагов обучения.

Сравнение размеров пакетов с бюджетом эпохи лишь позволяет определить идеальный режим масштабирования, даже если большие размеры пакетов все же могут обеспечить значительное ускорение за счет сокращения количества необходимых шагов обучения. Зачастую максимальный размер пакета, поддерживаемый доступным оборудованием, меньше критического размера пакета. Поэтому хорошее практическое правило (без проведения каких-либо экспериментов) — использовать максимально возможный размер пакета. Нет смысла использовать пакет большего размера, если это приведет к увеличению времени обучения.

Выберите размер пакета, чтобы минимизировать потребление ресурсов.

Существует два типа затрат ресурсов, связанных с увеличением размера партии:

  • Первоначальные затраты . Например, покупка нового оборудования или переписывание конвейера обучения для реализации обучения с несколькими графическими процессорами/мульти-ТПУ.
  • Расходы на использование . Например, выставление счетов в рамках бюджетов ресурсов команды, выставление счетов от облачного провайдера, расходы на электроэнергию/техническое обслуживание.

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

Мы называем общую стоимость использования (которая может включать в себя несколько различных видов затрат) потреблением ресурсов, рассчитываемым следующим образом:

потребление ресурсов = потребление ресурсов на шаг x общее количество шагов

Увеличение размера пакета обычно уменьшает общее количество шагов. Увеличится или уменьшится потребление ресурсов, зависит от того, как изменится потребление за шаг, которое зависит от размера пакета следующим образом:

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

Изменение размера пакета требует повторной настройки большинства гиперпараметров.

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

  • Гиперпараметры оптимизатора (например, скорость обучения и импульс)
  • Гиперпараметры регуляризации

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

Как норма партии взаимодействует с размером партии

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

Выберите начальную конфигурацию

Первым этапом настройки гиперпараметров является определение отправных точек для следующего:

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

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

Наш руководящий принцип заключается в следующем:

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

где:

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

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

Выбор количества тренировочных шагов предполагает балансировку следующего напряжения:

  • Обучение большему количеству шагов может повысить производительность и упростить настройку гиперпараметров. (Подробнее см. Shallue et al. 2018 ).
  • И наоборот, обучение с меньшим количеством шагов означает, что каждое обучение происходит быстрее и использует меньше ресурсов, что повышает эффективность настройки за счет сокращения времени между циклами и позволяет проводить больше экспериментов параллельно. Более того, если вы выбрали неоправданно большой бюджет шага в начале проекта, его может быть сложно изменить позже в проекте; например, после того, как вы настроили график скорости обучения для этого количества шагов.