Руководство по эффективному развертыванию моделей машинного обучения в SageMaker

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

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

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

1. Развертывание модели машинного обучения в SageMaker

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

  1. Вывод в реальном времени: стратегия делать прогнозы с помощью вашей модели всякий раз, когда это требуется. Примером может служить Нетфликс. Когда вы открываете приложение, оно спрашивает у модели, какие фильмы будут появляться на вашем экране и в каком порядке.
  2. Асинхронный вывод: вывод почти в реальном времени, который ставит входящие запросы в очередь для их асинхронной обработки. Существует множество приложений, позволяющих генерировать изображения по подсказке. Некоторые из них добавляют вас в очередь до тех пор, пока не освободят ресурсы.
  3. Пакетный вывод: используется для одновременного создания прогнозов для всего набора данных и сохранения их в хранилище. Пример Netflix также может соответствовать этому. Они могут заранее рассчитать фильмы для вас и сохранить прогнозы, чтобы использовать их только при открытии приложения.
  4. Бессерверный вывод: используется для автоматического запуска вашей модели в зависимости от вашего трафика, исключая процесс выбора и управления инфраструктурой. У меня нет хорошего примера, чтобы проиллюстрировать это.

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

2. Типы экземпляров

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

2.1 Общее назначение

  • Разработан для баланса вычислений и памяти.
  • Как понятно из названия, это единственный неспециализированный тип. Он хорошо сбалансирован для задач общего назначения.

2.2 Оптимизировано для вычислений

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

2.3 Оптимизация памяти

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

2.4 Ускоренные вычисления

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

2.5 Ускорение логического вывода

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

3. Имена типов экземпляров

Существует соглашение об именах для всех типов экземпляров, которое следует порядку:

  1. Семейство экземпляров, например «r».
  2. Генерация экземпляра, например «5».
  3. Остальные буквы перед точкой (.) указывают на дополнительные возможности. Не во всех экземплярах они есть.
  4. После точки (.) указывается размер экземпляра, например «2xlarge».

Например: «r5.9xlarge» — это экземпляр с оптимизированным объемом памяти, 5-го поколения и размера 2xlarge.

4. Как выбрать тип инстанса

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

  1. Определите требования к рабочей нагрузке: может быть сложно заранее определить, сколько ЦП вам понадобится, но легко проверить, сколько памяти нужно вашей модели. Загрузите обученную модель в память, смоделируйте свой вывод и рассчитайте его.
  2. Определите, интенсивно ли используется ваша модель ЦП. Использует ли ваша модель многопоточность или каким-либо образом распараллеливает вывод? Вы можете ограничить количество ядер, доступных при выполнении вывода, чтобы увидеть, повлияет ли это на время вывода.
  3. Выберите экземпляр, соответствующий вашим требованиям. Теперь, когда вы оценили требования своей модели, выберите экземпляр, который лучше всего им соответствует. Примите во внимание компромиссы между стоимостью и производительностью каждого типа экземпляра. Цены на каждый экземпляр для вашего региона вы можете уточнить в официальной документации.
  4. Контролируйте свой экземпляр с помощью CloudWatch. После выбора экземпляра используйте доступные ресурсы, чтобы перепроверить свои оценки. Amazon CloudWatch интегрирован в SageMaker, и вы можете видеть показатели почти в реальном времени, такие как использование памяти, использование ЦП и использование диска.
  5. При необходимости попробуйте другой уровень экземпляра. Если вы обнаружите, что выбранный вами экземпляр не соответствует вашим ожиданиям по производительности, попробуйте другой уровень. Кроме того, если ваша модель использует менее 50 % емкости вашего экземпляра, вы, вероятно, можете уменьшить ее до более низкого уровня.
  6. Не забывайте использовать автоматическое масштабирование для получения логических выводов в реальном времени. Большинство реальных приложений испытывают пики и спады нагрузки, что может повлиять на задержку. Автоматическое масштабирование может снизить стоимость вашей модели, поскольку оно удаляет ненужные экземпляры во время минимумов и увеличивает только при необходимости.

4.1 Напоминание об асинхронном выводе в реальном времени

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

Рекомендуется отслеживать метрики, предоставляемые в CloudWatch, и активировать некоторые оповещения о проверке работоспособности, чтобы уведомить вашу команду.

4.2 Напоминание о пакетном выводе

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

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

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

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

Спасибо, что прочитали