Советы по рентабельному обучению моделей

Вступление

Почему?

Существует множество статей и курсов, посвященных последним исследованиям ML / AI, направленным на обучение более крупных моделей и достижение более высокой точности классификации. Это отлично подходит для исследований и академических кругов, а также для расширения возможностей ИИ. Однако на самом деле они не предназначены для бедных студентов-практиков, начинающих свои первые крупные проекты в области ИИ, или для предпринимателей, которые стремятся создать MVP своей крутой революционной идеи.

Какие?

В этой работе я использую бюджетный подход к обучению моделей и пытаюсь ответить на вопрос:

Какова минимальная практическая стоимость завершения реального проекта искусственного интеллекта?

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

Резюме

Ответ: примерно 300 долларов → Это сумма, необходимая для обучения хорошо работающей модели компьютерного зрения с использованием облачных вычислений. Между прочим (или нет) это также сумма кредита, которую Google дает в качестве стимула для начала работы с Google Cloud Platform (GCP) [1].

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

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

Подробное обсуждение каждого этапа следует ниже.

1 ›Исследование данных

При решении проблемы нового набора данных и машинного обучения первое, что нужно сделать, это понять данные, или, говоря словами А. Карпати, Станьте ЕДИНЫМ с данными. [2]

То, что практикующие делают на этом этапе, сильно различается, но есть несколько общих компонентов:

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

B › Посмотрите на несколько случайных изображений из каждого класса глядя, мы действительно пытаемся мысленно ответить на такие вопросы, как : Какие функции может использовать CNN, чтобы различать выходные классы? Каков масштаб этих функций? Насколько разнообразно освещение? Насколько центрирован объект на изображении? - Ответы на эти вопросы определят наш конвейер предварительной обработки и архитектуру модели.

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

Совет по составлению бюджета

Этот этап может занять много времени и потребует некоторых усилий по написанию сценариев / записных книжек. Кроме того, эти шаги часто не работают с графическими процессорами или многоядерными процессорами. При ограниченном бюджете выберите для этого этапа легкий облачный экземпляр. Я пытаюсь имитировать свою конфигурацию Macbook для этого - от 2 до 4 ядер Intel с несколькими сотнями ГБ SSD.

Образцы конфигураций от AWS / GCP, перечисленные в сводной таблице, имеют цену от 0,10 до 0,20 доллара в час, при этом GCP немного более экономичен, чем AWS для аналогичного типа инстанса. При ~ 0,10 доллара в час день использования стоит около 1 доллара. Это самый дешевый экземпляр, использованный в проекте. Сделайте здесь максимальное развитие.

2 ›Выбор модели

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

Существуют сотни сетевых архитектур для классификации объектов, и еще несколько добавляются на arXiv [3] каждый месяц. Легко соблазниться использовать последнюю модель, рекламирующую лучшую точность в ImageNet. Однако это может быть не лучшая идея при ограниченном бюджете ... или даже иначе.

На рисунке ниже (заимствованном и упрощенном из [4]) точность классификации некоторых хорошо известных моделей показана в зависимости от их сложности. FLOPS здесь означает количество операций с плавающей запятой и указывает на сложность модели.

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

Совет по составлению бюджета

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

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

Мои сетевые архитектуры goto для проблемы классификации изображений: -

1 ›Начало-v2

2 ›ResNet-50

Эти две архитектуры обеспечивают отличный компромисс между производительностью и сложностью. Кроме того, это очень популярные модели с хорошими нативными реализациями во всех фреймворках DL, таких как TF и ​​PyTorch. Кроме того, о них написано множество учебных пособий и блогов, которые могут помочь в быстрой адаптации.

3 ›Настройка гиперпараметров

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

A ›Размер мини-пакета. Размер мини-пакета должен быть достаточно большим, чтобы полностью использовать графический процессор, но не больше.

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

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

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

3 ›Марафонская тренировка

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

В этом посте обсуждаются только экземпляры с одним графическим процессором - вероятно, мы обсудим экземпляры с несколькими графическими процессорами в отдельном посте. Удивительно, но ни один из облачных провайдеров не публикует никаких данных о сравнении производительности своих различных экземпляров GPU. Лучшее упоминание об этом было получено от группы Stanford DAWN в Стэнфорде. [5]

Сверху обратите внимание, что ResNet164 занимает около 10 часов для обучения на одном экземпляре графического процессора K80 (K80 является наименее дорогим экземпляром графического процессора на AWS и GCP), а стоимость запуска полной модели составляет ~ 10 долларов. Для настройки большинства гиперпараметров мы можем запустить модель примерно вдвое короче.

Учитывая размер проблемы, такой же, как у CIFAR10, большинство экспериментов на экземпляре K80 должно завершиться за 5–10 часов.

Совет по бюджету

При такой структуре затрат мы сможем провести около 20 полных экспериментов за 20 X 10 долларов = 200 долларов. На практике мы могли бы провести около 20 экспериментов, которые длятся короткий промежуток времени - может быть, 1–10 эпох и около 10–15 экспериментов для более длительного периода времени.

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

Знай, когда остановиться

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

Удивительно, но все вышеперечисленные тренировочные кривые показывают ровно два локтя или большие прыжки в точности. Также обратите внимание, что две из приведенных выше обучающих кривых находятся в наборе данных CIFAR10, а две другие - в наборе данных ImageNet1K. Также обратите внимание, что скачки производительности часто происходят после плато, когда кажется, что сеть насыщена и ничего не обучается в течение 20–30 эпох!

Совет по составлению бюджета

Длительное время обучения и пошаговый характер кривых обучения приводят к головоломке при итерации модели в рамках бюджета. Ключом к решению этой проблемы является (здесь не доказанная) гипотеза о том, что гиперпараметры, которые хорошо работают в первые несколько эпох, похоже, хорошо работают и в более высокие эпохи. Это означает, что для настройки гиперпараметров мы можем ограничиться небольшим количеством эпох, скажем 10–20. И затем мы можем тренироваться в течение большого количества эпох (100-200), когда окончательно определимся с гиперпараметрами.

Примечание по хранению

На AWS и GCP доступно множество вариантов хранения. AWS бесплатно предоставляет 30 ГБ EBS и 5 ГБ хранилища EFS. Стоимость дополнительного хранилища составляет от 0,1 доллара США за гигабайт в месяц до 0,3 доллара США за гигабайт в месяц. GCP оценивает SSD-хранилище примерно в 0,17 доллара за гигабайт в месяц. Для большинства начальных приложений достаточно нескольких сотен ГБ дискового пространства.

Если мы используем разные экземпляры для исследования и моделирования данных, возможно, на этих этапах можно будет использовать общий том SSD. Подробнее см. [11].

Ключевые выводы

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

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

использованная литература

[1] Google Cloud Platform, https://cloud.google.com/free/

[2] А. Karpathy, Рецепт обучения нейронных сетей, https://karpathy.github.io/2019/04/25/recipe/.

[3] Корнельский университет, ArXiv, https://arxiv.org/

[4] M. Tan, Q.V. Ле, EfficientNet: переосмысление масштабирования модели для сверточных нейронных сетей, ICML 2019.

[5] Stanford DAWN, https://dawn.cs.stanford.edu/benchmark/v1/CIFAR10/train.html

[6] Цены на AWS https://aws.amazon.com/ec2/pricing/on-demand/

[7] Цены на GCP https://cloud.google.com/compute/vm-instance-pricing

[8] К. Хе, Х. Чжан, С. Рен, Дж. Сун, Глубокое остаточное обучение для распознавания изображений, CVPR 2016

[9] С. Се, Р. Гиршик, П. Доллар, З. Ту, К. Хе, Агрегированные остаточные преобразования для глубоких нейронных сетей, CVPR 2017.

[10] С.Л. Смит, П.Дж. Киндерманс, К. Инь, К.В. Ле, Не снижайте скорость обучения, увеличивайте размер партии, ICLR 2018

[11] https://n2ws.com/blog/how-to-guides/connect-aws-ebs-volume-another-instance

[12] 1820796, Изображение без денег, Pixabay