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

Экономичный вывод машинного обучения с использованием мультиплатформенных моделей в Amazon SageMaker 

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

Создатель мудреца Амазонки Конечные точки с несколькими контейнерами (MCE) позволяют нам группировать модели в разных платформах и развертывать их на одном хосте, создавая единую конечную точку. Вы можете предоставить контейнеры для различных платформ, которые вы используете для построения моделей, а SageMaker берет все эти контейнеры и помещает их за одну конечную точку. Например, вы можете загрузить модели PyTorch и TensorFlow на две выделенные конечные точки, обслуживающие одни и те же или совершенно разные сценарии использования, и обе эти модели имеют прерывистый входящий трафик, не используя ресурсы до предела. В таком сценарии вы можете объединить их с помощью контейнеров в одну конечную точку с помощью MCE, улучшив использование ресурсов и одновременно снизив затраты, связанные с обслуживанием обеих моделей с разных конечных точек.

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

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

Шаблоны вызовов MCE

Прямой вызов SageMaker MCE полезен в тех случаях, когда вы объединили несвязанные модели в конечную точку MCE или проводите A/B-тест между моделями за конечной точкой MCE, чтобы оценить их производительность. Вы можете вызвать конкретный контейнер непосредственно в вызове API и получить прогноз на основе этой модели.

При последовательном вызове вы можете объединить 2–15 контейнеров, и выходные данные одного из них станут входными данными следующего последовательного контейнера. Это идеальный вариант использования, если, например, у вас есть многоэтапный конвейер прогнозирования, в котором модель Scikit-learn используется для промежуточного прогноза, а результат передается в модель TensorFlow для окончательного вывода. Вместо того, чтобы развертывать их как разные конечные точки, а другое приложение или задание организует их и выполняет несколько вызовов API, вы можете развернуть их как SageMaker MCE, абстрагируя логику и настраивая их для последовательного вызова, где SageMaker управляет передачей данных между одним контейнером. в другой автоматически и передает выходные данные конечного контейнера клиенту, делающему запрос API.

Последовательный вызов SageMaker MCE фундаментально отличается от конвейера последовательного вывода SageMaker (подробнее см. в разделах ниже). Конвейер последовательного вывода больше предназначен для организации сложных рабочих процессов машинного обучения, таких как предварительная обработка данных, построение ансамбля моделей, реализация условных проверок для определения того, какую модель вызывать, или постобработка прогноза с использованием бизнес-логики перед отправкой прогноза последующим приложениям. . Напротив, последовательный вызов MCE предназначен для объединения 2–14 моделей в конвейер для вывода, причем каждая модель принимает в качестве входных данных прогноз предыдущей модели.

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

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

Варианты использования SageMaker MCE

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

englishModel = {
   'Image': container1,
   'ContainerHostname': englishModel }; ...
 
germanModel = {
   'Image': container2,
   'ContainerHostname': germanModel }; ...
 
sm.create_model(
   InferenceExecutionConfig = {'Mode': 'Direct'},
   Containers = [englishModel, germanModel], ...)
sm.create_endpoint_config(EndpointConfigName = ‘my-mce-epc’,
    ProductionVariants=[{
        'InstanceType':        ‘ml.m4.xlarge’,
        'InitialInstanceCount': 2,
        'InitialVariantWeight': 1,
        'ModelName':            ‘my-multi-model-name’,
        'VariantName':          'AllTraffic'}])
sm.create_endpoint(EndpointName = ‘my-mce-endpoint’, 
                  EndpointConfigName = ‘my-mce-epc’)

В этом примере у нас есть две модели (englishModel и germanModel), и мы определяем контейнеры в SageMaker create_model построить и определить InferenceExecutionConfig как «Прямой». Теперь мы можем вызвать конечную точку для вывода и определить TargetContainerHostname как либо englishModel or germanModel в зависимости от клиента, выполняющего вызов API:

sm.invoke_endpoint(        
   EndpointName = endpoint_name,
   TargetContainerHostname = englishModel,
   Body = body, ...)

Вы также можете использовать прямой вызов в MCE для запуска A/B-тестов и сравнения производительности моделей.

Следующая диаграмма иллюстрирует нашу архитектуру.

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

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

Для этого варианта использования мы используем следующий код:

sm_model = PipelineModel(name=model_name, role=aws_role, models=[Processing-1, Processing-2, Inference-1, Inference-2]) 

predictor = sm_model.deploy(initial_instance_count=1, instance_type="ml.c4.xlarge")                  
response = runtime.invoke_endpoint( 
EndpointName=predictor.endpoint,                                
    Body=body,...)

В этом примере у нас есть два контейнера обработки (Processing-1 и Processing-2) для обработки объектов и преобразования данных, а также два контейнера вывода (Inference-1 и Inference-2), чтобы выполнить прогнозы модели ML на предварительно обработанных данных. PipelineModel экземпляр позволяет определить конвейер вывода, состоящий из линейной последовательности четырех контейнеров, которые обрабатывают запросы на вывод данных. Контейнеры расположены в одном экземпляре, что позволяет выполнять логический вывод с низкой задержкой.

Масштабируйте конечные точки нескольких моделей для большого количества моделей.

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

Масштабирование конечных точек MCE также упрощается с помощью SageMakerVariantInvocationsPerInstance предопределенная метрика, которая дает среднее количество раз в минуту, когда каждый экземпляр конечной точки модели вызывается для определения TargetScaling политика. SageMaker динамически корректирует количество экземпляров, предоставляемых для модели, в ответ на изменения вашей рабочей нагрузки. Когда рабочая нагрузка увеличивается, автомасштабирование подключает к сети больше экземпляров и загружает целевые модели и контейнеры, чтобы продолжать обслуживать запросы. Когда рабочая нагрузка снижается, автомасштабирование удаляет ненужные экземпляры и разгружает контейнеры модели, чтобы контейнеры не съедали ресурсы, а вы не платили за экземпляры, которые не используете. Во время выполнения первого запроса к данной модели возникает дополнительная задержка (так называемая «холодный старт») для загрузки модели из Простой сервис хранения Amazon (Amazon S3) и загрузите его в память. Последующие вызовы завершаются без дополнительных затрат, поскольку модель уже загружена. См. следующий код:

# AutoScaling client
asg = boto3.client('application-autoscaling')

# Resource type is variant and the unique identifier is the resource ID.
resource_id=f"endpoint/{endpoint_name}/variant/AllTraffic"

# scaling configuration
response = asg.register_scalable_target(
    ServiceNamespace='sagemaker', #
    ResourceId=resource_id,
    ScalableDimension='sagemaker:variant:DesiredInstanceCount', 
    MinCapacity=1,
    MaxCapacity=4
)
#Target Scaling
response = asg.put_scaling_policy(
    PolicyName=f'Request-ScalingPolicy-{endpoint_name}',
    ServiceNamespace='sagemaker',
    ResourceId=resource_id,
    ScalableDimension='sagemaker:variant:DesiredInstanceCount',
    PolicyType='TargetTrackingScaling',
    TargetTrackingScalingPolicyConfiguration={
        'TargetValue': 70.0, # Threshold
        'PredefinedMetricSpecification': {
            'PredefinedMetricType': 'SageMakerVariantInvocationsPerInstance',
        },
        'ScaleInCooldown': 300, # duration until scale in
        'ScaleOutCooldown': 60 # duration between scale out
    }
)

Следуя предыдущему примеру конфигурации политики, мы используем SageMakerVariantInvocationsPerInstance предопределенная метрика для настройки количества экземпляров вариантов, чтобы каждый экземпляр имел InvocationsPerInstance показатель 70.

Мы также можем масштабировать MCE SageMaker на основе наших собственных показателей, например CPUUtilization, MemoryUtilization, GPUUtilization, GPUMemoryUtilizationили DiskUtilization, чтобы увеличить или уменьшить количество экземпляров в зависимости от использования определенного ресурса. Для получения дополнительной информации см. Автоматическое масштабирование моделей Amazon SageMaker.

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

Безопасные MCE

Для MCE с прямым вызовом несколько контейнеров размещаются в одном экземпляре путем совместного использования памяти и тома хранения. Важно защитить контейнеры, поддерживать правильное сопоставление запросов с целевыми контейнерами и предоставлять пользователям правильный доступ к целевым контейнерам. Вы можете ограничить invoke_endpoint доступ к ограниченному набору контейнеров внутри MCE с помощью sagemaker:TargetContainerHostname Управление идентификацией и доступом AWS (IAM) ключ состояния. SageMaker использует Роли IAM для предоставления политик на основе удостоверений IAM, которые вы используете для указания разрешенных или запрещенных действий и ресурсов, а также условий, при которых действия разрешены или запрещены. Следующие политики показывают, как ограничить вызовы определенным контейнерам в конечной точке:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "sagemaker:InvokeEndpoint"
            ],
            "Effect": "Allow",
            "Resource": "arn:aws:sagemaker:region:account-id:endpoint/endpoint_name",
            "Condition": {
                "StringLike": {
                    "sagemaker:TargetContainerHostname": ["customIps*", "common*"]
                }
            }
        }
    ]
}

Мониторинг многомодельных конечных точек с помощью метрик Amazon CloudWatch

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

  • МодельЗагрузкаВаиттиме – Интервал времени, в течение которого запрос вызова ожидает загрузки или загрузки целевой модели для выполнения вывода.
  • МодельРазгрузкаВремя – Интервал времени, необходимый для выгрузки модели через контейнер UnloadModel Вызов API.
  • МодельDownloadingTime – Интервал времени, необходимый для загрузки модели с Amazon S3.
  • Время загрузки модели – Интервал времени, необходимый для загрузки модели через контейнер LoadModel Вызов API.
  • МодельCacheHit - Количество InvokeEndpoint запросы отправляются в конечную точку, где модель уже загружена. Принимая Average статистика показывает долю запросов, в которых модель уже была загружена.
  • ЛожедМоделкаунт – Количество моделей, загруженных в контейнеры в конечной точке. Эта метрика генерируется для каждого экземпляра. Average статистика с периодом в 1 минуту показывает среднее количество моделей, загруженных на один экземпляр, а Sum Статистика показывает общее количество моделей, загруженных во все экземпляры в конечной точке. Модели, отслеживаемые этой метрикой, не обязательно уникальны, поскольку вы можете загрузить модель в несколько контейнеров в конечной точке.

Существует также несколько других метрик, которые используются каждым контейнером, работающим в экземпляре, например: Invocations с указанием количества InvokeEndpoint запросы, отправленные в контейнер внутри конечной точки, ContainerLatency предоставление времени, которое потребовалось конечной точке для ответа целевого контейнера или всех контейнеров в последовательном вызове, как видно из SageMaker, и CPUUtilization и MemoryUtilizaton с указанием модулей ЦП и процента памяти.

Заключение

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

  • Размещение моделей в разных средах (таких как TensorFlow, PyTorch и Scikit-learn), у которых недостаточно трафика для насыщения полной емкости экземпляра.
  • Размещение моделей из одной платформы с разными алгоритмами машинного обучения (такими как рекомендации, прогнозирование или классификация) и функциями обработчика.
  • Сравнение похожих архитектур, работающих на разных версиях фреймворка (например, TensorFlow 1.x и TensorFlow 2.x) для таких сценариев, как A/B-тестирование.

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


Об авторах

Экономичный вывод машинного обучения с использованием мультиплатформенных моделей в Amazon SageMaker PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.Дхавал Патель является главным архитектором машинного обучения в AWS. Он работал с организациями, начиная от крупных предприятий и заканчивая стартапами среднего размера, над проблемами, связанными с распределенными вычислениями и искусственным интеллектом. Он фокусируется на глубоком обучении, включая НЛП и области компьютерного зрения. Он помогает клиентам добиться высокопроизводительного логического вывода моделей в Amazon SageMaker.

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

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

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

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