Руководство по эффективному развертыванию моделей машинного обучения в SageMaker
На днях я решил взглянуть на рабочую нагрузку производственных моделей компании, в которой работаю, и понял, что многие из них используют типы экземпляров, которые им не положены, например, экземпляр с оптимизированным объемом памяти для модель, которая использовала только 4% доступной памяти.
Я поговорил со своими коллегами и обнаружил, что многие из них выбирают один экземпляр и обнаруживают, что он не соответствует их потребностям. В конечном итоге они пробуют разные экземпляры, пока не найдут тот, который способен работать с их моделью без учета ее требований. Такой подход не только тратит драгоценное время, но и может привести к ненужным затратам.
Вот почему я составил это руководство о том, как принять обоснованное решение о том, какой тип экземпляра использовать для вашей модели машинного обучения. Это было написано для Amazon SageMaker, но может быть полезно, даже если вы размещаете свои модели в другом облаке.
1. Развертывание модели машинного обучения в SageMaker
Прежде чем выбрать свой экземпляр, важно понять, как вы будете делать прогнозы с помощью своей модели. Вы должны решить, делать ли выводы по запросу или предсказывать множество событий одновременно. В SageMaker существует четыре способа развертывания и размещения вашей модели.
- Вывод в реальном времени: стратегия делать прогнозы с помощью вашей модели всякий раз, когда это требуется. Примером может служить Нетфликс. Когда вы открываете приложение, оно спрашивает у модели, какие фильмы будут появляться на вашем экране и в каком порядке.
- Асинхронный вывод: вывод почти в реальном времени, который ставит входящие запросы в очередь для их асинхронной обработки. Существует множество приложений, позволяющих генерировать изображения по подсказке. Некоторые из них добавляют вас в очередь до тех пор, пока не освободят ресурсы.
- Пакетный вывод: используется для одновременного создания прогнозов для всего набора данных и сохранения их в хранилище. Пример Netflix также может соответствовать этому. Они могут заранее рассчитать фильмы для вас и сохранить прогнозы, чтобы использовать их только при открытии приложения.
- Бессерверный вывод: используется для автоматического запуска вашей модели в зависимости от вашего трафика, исключая процесс выбора и управления инфраструктурой. У меня нет хорошего примера, чтобы проиллюстрировать это.
Если вы используете какую-либо стратегию, кроме бессерверного вывода, вам нужно будет выбрать тип экземпляра, на котором будет выполняться вывод.
2. Типы экземпляров
Каждый тип экземпляра в SageMaker предназначен для конкретных случаев использования, таких как сопоставление шаблонов данных или выполнение вычислений с числами с плавающей запятой. Прежде чем выбрать один, вы должны понять, для чего они были разработаны.
2.1 Общее назначение
- Разработан для баланса вычислений и памяти.
- Как понятно из названия, это единственный неспециализированный тип. Он хорошо сбалансирован для задач общего назначения.
2.2 Оптимизировано для вычислений
- Они предназначены для использования преимуществ высокопроизводительных процессоров.
- Инстансы с меньшим объемом памяти на виртуальный ЦП.
- Хороший выбор для приложений, требующих больших вычислительных мощностей, таких как большинство моделей машинного обучения.
2.3 Оптимизация памяти
- Они предназначены для обеспечения производительности моделей с большим потреблением памяти.
- Инстансы с большим объемом памяти на виртуальный ЦП.
- Это хороший выбор для приложений, требующих большого объема памяти, таких как предварительно рассчитанные модели и эвристики.
2.4 Ускоренные вычисления
- Они предназначены для обеспечения большего параллелизма для более высокой пропускной способности при работе с интенсивными вычислениями.
- Инстансы с большим объемом памяти на виртуальный ЦП и ГП.
- Это хороший выбор для приложений, требующих больших вычислительных мощностей и памяти, таких как модели глубокого обучения.
2.5 Ускорение логического вывода
- Они предназначены для решения проблемы высоких эксплуатационных расходов приложений глубокого обучения во время логического вывода.
- Вы можете выбрать любой экземпляр ЦП, наиболее подходящий для общих потребностей вашего приложения, а затем отдельно настроить нужное количество графического процессора.
3. Имена типов экземпляров
Существует соглашение об именах для всех типов экземпляров, которое следует порядку:
- Семейство экземпляров, например «r».
- Генерация экземпляра, например «5».
- Остальные буквы перед точкой (.) указывают на дополнительные возможности. Не во всех экземплярах они есть.
- После точки (.) указывается размер экземпляра, например «2xlarge».
Например: «r5.9xlarge» — это экземпляр с оптимизированным объемом памяти, 5-го поколения и размера 2xlarge.
4. Как выбрать тип инстанса
Прежде чем перейти к списку, прочитайте информацию выше и/или официальную документацию, если вы этого не сделали. Они охватывают основные понятия, которые могут помочь вам лучше понять, что вы делаете.
- Определите требования к рабочей нагрузке: может быть сложно заранее определить, сколько ЦП вам понадобится, но легко проверить, сколько памяти нужно вашей модели. Загрузите обученную модель в память, смоделируйте свой вывод и рассчитайте его.
- Определите, интенсивно ли используется ваша модель ЦП. Использует ли ваша модель многопоточность или каким-либо образом распараллеливает вывод? Вы можете ограничить количество ядер, доступных при выполнении вывода, чтобы увидеть, повлияет ли это на время вывода.
- Выберите экземпляр, соответствующий вашим требованиям. Теперь, когда вы оценили требования своей модели, выберите экземпляр, который лучше всего им соответствует. Примите во внимание компромиссы между стоимостью и производительностью каждого типа экземпляра. Цены на каждый экземпляр для вашего региона вы можете уточнить в официальной документации.
- Контролируйте свой экземпляр с помощью CloudWatch. После выбора экземпляра используйте доступные ресурсы, чтобы перепроверить свои оценки. Amazon CloudWatch интегрирован в SageMaker, и вы можете видеть показатели почти в реальном времени, такие как использование памяти, использование ЦП и использование диска.
- При необходимости попробуйте другой уровень экземпляра. Если вы обнаружите, что выбранный вами экземпляр не соответствует вашим ожиданиям по производительности, попробуйте другой уровень. Кроме того, если ваша модель использует менее 50 % емкости вашего экземпляра, вы, вероятно, можете уменьшить ее до более низкого уровня.
- Не забывайте использовать автоматическое масштабирование для получения логических выводов в реальном времени. Большинство реальных приложений испытывают пики и спады нагрузки, что может повлиять на задержку. Автоматическое масштабирование может снизить стоимость вашей модели, поскольку оно удаляет ненужные экземпляры во время минимумов и увеличивает только при необходимости.
4.1 Напоминание об асинхронном выводе в реальном времени
Остерегайтесь задержки и размера очереди. Как я уже говорил, в реальных приложениях бывают пики и спады. Ваша модель может снизить производительность во время высокого спроса, что приведет к увеличению задержки и очереди, что может привести к тому, что пользователям не понравится ваше приложение из-за времени ожидания.
Рекомендуется отслеживать метрики, предоставляемые в CloudWatch, и активировать некоторые оповещения о проверке работоспособности, чтобы уведомить вашу команду.
4.2 Напоминание о пакетном выводе
Заданиям пакетного преобразования не нужно беспокоиться о задержке, поскольку они сохраняют ваши прогнозы для последующего использования. Однако, если ваша работа выполняется часами и выполняется ежедневно, вам может потребоваться повысить уровень вашего экземпляра, оптимизировать код или изменить конфигурацию вашей работы.
Хотя понятно, если вы изначально неправильно оценили требования к своей модели, очень важно не пренебрегать ими, поскольку это может значительно увеличить стоимость запуска вашей модели.
Если у вас есть дополнительные вопросы или отзывы, пожалуйста, не стесняйтесь делиться ими в комментариях. Я надеюсь, что это руководство было полезным!
Если вам интересно прочитать другие статьи, написанные мной. Посмотрите мой репозиторий со всеми написанными мной статьями, разделенными по категориям.
Спасибо, что прочитали