Выполняйте и оптимизируйте вывод нескольких моделей с помощью мультимодельных конечных точек Amazon SageMaker PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.

Выполнение и оптимизация мультимодельного логического вывода с помощью мультимодельных конечных точек Amazon SageMaker

Создатель мудреца Амазонки Конечная точка с несколькими моделями (MME) позволяет экономически эффективно развертывать и размещать несколько моделей в одной конечной точке, а затем горизонтально масштабировать конечную точку для достижения масштаба. Как показано на следующем рисунке, это эффективный метод реализации моделей с несколькими арендаторами в вашей инфраструктуре машинного обучения (ML). Мы видели, как предприятия, использующие программное обеспечение как услугу (SaaS), используют эту функцию для применения гиперперсонализации в своих моделях машинного обучения при одновременном снижении затрат.

Общий обзор того, как работает MME, см. в видеоролике AWS Summit. Масштабирование машинного обучения на новый уровень: размещение тысяч моделей в SageMaker. Чтобы узнать больше о гиперперсонализированных вариантах использования с несколькими арендаторами, которые обеспечивает MME, см. Как масштабировать вывод машинного обучения для многопользовательских сценариев использования SaaS.

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

Сценарии использования, наиболее подходящие для MME

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

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

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

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

Модель сервировочной тары

Когда вы используете набор инструментов SageMaker Inference Toolkit или предварительно созданную модель SageMaker, обслуживающую контейнер, совместимый с MME, ваш контейнер имеет Сервер с несколькими моделями (процесс JVM) запущен. Самый простой способ включить Multi Model Server (MMS) в контейнер обслуживания вашей модели — это использовать Модель SageMaker, обслуживающая контейнеры совместим с MME (ищите те, у которых Job Type=inference и CPU/GPU=CPU). MMS — это простой в использовании инструмент с открытым исходным кодом для обслуживания моделей глубокого обучения. Он предоставляет REST API с веб-сервером для обслуживания и управления несколькими моделями на одном хосте. Однако использование MMS не обязательно; вы можете реализовать свой собственный модельный сервер, если он реализует API, требуемые MME.

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

Расширенная настройка MMS

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

Увеличьте параллелизм вывода для каждой модели

MMS создает один или несколько рабочих процессов Python для каждой модели на основе значения default_workers_per_model параметр конфигурации. Эти рабочие процессы Python обрабатывают каждый отдельный запрос на вывод, запуская любые функции предварительной обработки, прогнозирования и постобработки, которые вы предоставляете. Для получения дополнительной информации см. обработчик пользовательских служб GitHub репо.

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

Дизайн для всплесков трафика

Каждый процесс MMS в экземпляре конечной точки имеет очередь запросов, которую можно настроить с помощью job_queue_size параметр (по умолчанию 100). Это определяет количество запросов, которые MMS будет ставить в очередь, когда все рабочие процессы заняты. Используйте этот параметр для точной настройки скорости отклика экземпляров конечных точек после того, как вы выбрали оптимальное количество рабочих процессов для каждой модели.

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

Максимальное использование ресурсов памяти на экземпляр

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

Установите значения для расширенных конфигураций MMS

MMS использует файл config.properties для хранения конфигураций. MMS использует следующий порядок для поиска этого файла config.properties:

  1. Если же линия индикатора MMS_CONFIG_FILE установлена ​​переменная среды, MMS загружает конфигурацию из переменной среды.
  2. Если же линия индикатора --mms-config параметр передается в MMS, он загружает конфигурацию из параметра.
  3. Если есть config.properties в текущей папке, где пользователь запускает MMS, он загружает config.properties файл из текущего рабочего каталога.

Если ничего из вышеперечисленного не указано, MMS загружает встроенную конфигурацию со значениями по умолчанию.

Ниже приведен пример командной строки для запуска MMS с явным файлом конфигурации:

multi-model-server --start --mms-config /home/mms/config.properties

Ключевые показатели для мониторинга производительности вашей конечной точки

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

Метрики на уровне экземпляра конечной точки (метрики MMS)

Из издания список показателей MMS, CPUUtilization и MemoryUtilization могут помочь вам оценить, соответствует ли ваш экземпляр или кластер MME правильному размеру. Если обе метрики имеют процентное соотношение от 50 до 80%, то ваш MME является правильным.

Как правило, низкое значение CPUUtilization и высокое значение MemoryUtilization указывает на избыточно выделенный кластер MME, поскольку это указывает на то, что редко вызываемые модели не выгружаются. Это может быть связано с большим, чем оптимальное, числом экземпляров конечных точек, выделенным для MME, и, следовательно, для редко используемых моделей доступна совокупная память, превышающая оптимальную. И наоборот, близкое к 100% использование этих показателей означает, что ваш кластер недостаточно подготовлен, поэтому вам необходимо настроить политику автоматического масштабирования кластера.

Метрики на уровне платформы (метрики MME)

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

Уроки из практики и стратегии оптимизации MME

Мы видели следующие рекомендации от некоторых широкомасштабных применений MME рядом клиентов.

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

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

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

Предотвращение побоев — общая ответственность

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

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

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

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

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

Выполняйте и оптимизируйте вывод нескольких моделей с помощью мультимодельных конечных точек Amazon SageMaker PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.

задержка модели конечной точки с одним экземпляром

Выполняйте и оптимизируйте вывод нескольких моделей с помощью мультимодельных конечных точек Amazon SageMaker PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.

использование ЦП и памяти конечной точки одного экземпляра

Выполняйте и оптимизируйте вывод нескольких моделей с помощью мультимодельных конечных точек Amazon SageMaker PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.

задержка модели конечной точки с четырьмя экземплярами

Выполняйте и оптимизируйте вывод нескольких моделей с помощью мультимодельных конечных точек Amazon SageMaker PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.

Использование ЦП и памяти для четырех экземпляров конечной точки

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

Ментальная модель для оптимизации MME

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

  • Количество и размер моделей
  • Количество уникальных моделей, вызываемых в данный момент времени
  • Тип и размер экземпляра
  • Количество экземпляров за конечной точкой

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

Точно так же, если количество вызовов для уникальных моделей больше, чем совокупная память всех экземпляров за конечной точкой, вы увидите меньше попаданий в кэш. Это также может произойти, если размер экземпляров (особенно объем памяти) слишком мал.

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

Обзор

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

Чтобы начать работу с MME, просмотрите Мультимодельные конечные точки Amazon SageMaker с использованием XGBoost и Размещайте несколько моделей в одном контейнере за одной конечной точкой.


Об авторе

Выполняйте и оптимизируйте вывод нескольких моделей с помощью мультимодельных конечных точек Amazon SageMaker PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.Сайед Джаффри является главным архитектором решений в AWS. Он работает с рядом компаний среднего размера, крупных предприятий, финансовых служб и независимых поставщиков программного обеспечения, помогая им создавать и эксплуатировать экономичные и масштабируемые приложения AI/ML в облаке.

Выполняйте и оптимизируйте вывод нескольких моделей с помощью мультимодельных конечных точек Amazon SageMaker PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.Саураб Триканде является старшим менеджером по продуктам Amazon SageMaker Inference. Он увлечен работой с клиентами и мотивирован целью демократизации машинного обучения. Он фокусируется на основных проблемах, связанных с развертыванием сложных приложений машинного обучения, мультитенантных моделей машинного обучения, оптимизацией затрат и обеспечением более доступного развертывания моделей глубокого обучения. В свободное время Саураб любит ходить в походы, узнавать об инновационных технологиях, следить за TechCrunch и проводить время со своей семьей.

Отметка времени:

Больше от Машинное обучение AWS