Сократите затраты на развертывание модели в среднем на 50% с использованием последних функций Amazon SageMaker.

Сократите расходы на внедрение модели в среднем на 50% с помощью новых функций Amazon SageMaker.

При развертывании моделей в продакшн организации постоянно ищут способы оптимизировать производительность своих базовых моделей (FMs), работающих на последних accelerators, таких как AWS Inferentia и GPU, чтобы снизить затраты и уменьшить время отклика, обеспечивая лучший опыт для конечного пользователя. Однако некоторые FM не полностью используют доступные ускорители на экземплярах, на которых они развернуты, что приводит к неэффективному использованию аппаратных ресурсов. Некоторые организации развертывают несколько FM в одном экземпляре, чтобы лучше использовать все доступные ускорители, но это требует сложной оркестрации инфраструктуры, что является трудоемким и сложным для управления. Когда несколько FM разделяют один экземпляр, каждому FM требуется свое собственное масштабирование и сценарии использования, что затрудняет предсказание, когда необходимо добавить или удалить экземпляры. Например, одна модель может использоваться для поддержки приложения пользователя, где использование может возрасти в определенные часы, в то время как другая модель может иметь более стабильный сценарий использования. Помимо оптимизации затрат, клиенты желают обеспечить лучший опыт конечного пользователя, снижая задержку. Для достижения этой цели они часто разворачивают несколько копий FM для обработки запросов от пользователей параллельно. Поскольку выходы FM могут быть от одного предложения до нескольких абзацев, время завершения запроса на вывод существенно варьируется, что приводит к непредсказуемым всплескам задержки, если запросы маршрутизируются случайным образом между экземплярами. Amazon SageMaker теперь поддерживает новые возможности вывода, которые помогают сократить затраты на развертывание и задержку.

Теперь вы можете создавать компоненты вывода на основе элементов и развертывать модели машинного обучения (ML) на конечной точке SageMaker. Инференс-компонент (IC) абстрагирует вашу ML-модель и позволяет назначать CPU, GPU или ускорители AWS Neuron и политику масштабирования для каждой модели. Компоненты вывода предлагают следующие преимущества:

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

С помощью этих возможностей вы можете сократить затраты на развертывание моделей в среднем на 50%. Экономия затрат будет варьироваться в зависимости от вашей рабочей нагрузки и паттернов трафика. Рассмотрим простой пример, чтобы проиллюстрировать, как упаковка нескольких моделей на одной конечной точке может максимизировать использование и сэкономить затраты. Допустим, у вас есть приложение чата, которое помогает туристам понять местные обычаи и лучшие практики, созданное с использованием двух вариантов Llama 2: одного настроенного для европейских посетителей и другого настроенного для американских посетителей. Мы ожидаем трафик для европейской модели с 00:01 до 11:59 UTC и для американской модели с 12:00 до 23:59 UTC. Вместо того чтобы развертывать эти модели на собственных выделенных экземплярах, где они будут простаивать половину времени, теперь вы можете развернуть их на одной конечной точке, чтобы сэкономить затраты. Вы можете масштабировать модель для американского рынка до нуля, когда она не нужна, чтобы освободить мощность для европейской модели и наоборот. Это позволяет эффективно использовать вашу аппаратуру и избежать потерь. Это простой пример использования двух моделей, но вы можете легко расширить эту идею для упаковки сотен моделей на одной конечной точке, которая автоматически масштабируется в соответствии с вашей рабочей нагрузкой.

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

Строительные блоки

Давайте подробнее рассмотрим и поймем, как работают эти новые возможности. Вот некоторые новые термины для размещения на SageMaker:

  • Компонент вывода – объект размещения SageMaker, который можно использовать для развертывания модели на конечной точке. Вы можете создать компонент вывода, предоставив следующее:
    • Модель SageMaker или спецификацию SageMaker-совместимого образа и артефакты модели.
    • Требования к вычислительным ресурсам, которые определяют потребности каждой копии вашей модели, включая ядра ЦП, оперативную память хоста и количество ускорителей.
  • Копия модели – рабочая копия инференс-компонента, способная обслуживать запросы.
  • Управление автомасштабированием экземпляров – возможность размещения SageMaker для автоматического масштабирования количества вычислительных экземпляров, используемых для конечной точки. Масштабирование экземпляров реагирует на масштабирование инференс-компонентов.

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

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

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

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

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

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

Обзор API

SageMaker представил новую сущность под названием InferenceComponent. Это отделяет детали хостинга модели машинного обучения от самой конечной точки. InferenceComponent позволяет указать ключевые свойства для хостинга модели, такие как модель SageMaker, которую вы хотите использовать, или детали контейнера и модельного артефакта. Вы также устанавливаете количество копий самого компонента, а также количество ускорителей (GPU, Inf или Trn) или процессоров CPU (vCPUs) для работы. Это обеспечивает большую гибкость при использовании одной конечной точки для любого количества моделей, которые вы планируете развернуть в будущем.

Рассмотрим API-вызовы Boto3 для создания конечной точки с компонентом вывода. Обратите внимание, что некоторые параметры будут рассмотрены позже в этом сообщении.

Вот пример кода для CreateEndpointConfig:

sagemaker_client.create_endpoint_config(    EndpointConfigName=endpoint_config_name,    ExecutionRoleArn=role,    ProductionVariants=[{        "VariantName": variant_name,        "InstanceType": instance_type,        "InitialInstanceCount": initial_instance_count,        "ModelDataDownloadTimeoutInSeconds": model_data_download_timeout_in_seconds,        "ContainerStartupHealthCheckTimeoutInSeconds": container_startup_health_check_timeout_in_seconds,        {"ManagedInstanceScaling": {            "Status": "ENABLED",            "MinInstanceCount": initial_instance_count,            "MaxInstanceCount": max_instance_count,            }        },    }],)

Ниже приведен пример кода для CreateEndpoint:

sagemaker_client.create_endpoint(    EndpointName=endpoint_name,    EndpointConfigName=endpoint_config_name,)

Ниже приведен пример кода для CreateInferenceComponent:

sm_client.create_inference_component(    InferenceComponentName=inference_component_name,    EndpointName=endpoint_name,    VariantName=variant_name,    Specification={        "Container": {            "Image": inference_image_uri,            "ArtifactUrl": s3_code_artifact,        },        "StartupParameters": {            "ModelDataDownloadTimeoutInSeconds": 300,            "ContainerStartupHealthCheckTimeoutInSeconds": 600,        },        "ComputeResourceRequirements": {"NumberOfAcceleratorDevicesRequired": 1, "MinMemoryRequiredInMb": 1024}    },    RuntimeConfig={"CopyCount": 1},)

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

В следующей таблице мы покажем сравнение подходов к созданию и вызову эндпоинта с использованием InferenceComponent и без него. Обратите внимание, что теперь создание модели (CreateModel()) является необязательным для эндпоинтов, основанных на IC.

Шаг Эндпоинты, основанные на модели Аналогичные эндпоинты на базе InferenceComponent
1 CreateModel(…) CreateEndpointConfig(…)
2 CreateEndpointConfig(…) CreateEndpoint(…)
3 CreateEndpoint(…) CreateInferenceComponent(…)
4 InvokeEndpoint(…) InvokeEndpoint(InferneceComponentName=‘value’…)

Внедрение InferenceComponent позволяет масштабировать модели на уровне модели. Дополнительные сведения о работе InferenceComponent в связке с автомасштабированием см. в статье Delve into instance and IC auto scaling.

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

smr_client = boto3.client("sagemaker-runtime") response_model = smr_client.invoke_endpoint(     InferenceComponentName=inference_component_name,    EndpointName=endpoint_name,     Body=payload,     ContentType="application/json", )

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

sm_client.create_endpoint_config(    EndpointConfigName=endpoint_config_name,    ExecutionRoleArn=role,    ProductionVariants=[{        "VariantName": variant_name,        "InstanceType": instance_type,        "InitialInstanceCount": initial_instance_count,        ...        'RoutingConfig': {                'RoutingStrategy': 'LEAST_OUTSTANDING_REQUESTS'            }    }],)

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

Кроме CreateInferenceComponent теперь доступны следующие API:

  • DescribeInferenceComponent
  • DeleteInferenceComponent
  • UpdateInferenceComponent
  • ListInferenceComponents

Логи и метрики компонентов вывода

Логи InferenceComponent находятся в /aws/sagemaker/InferenceComponents/<InferenceComponentName>. Все логи, отправленные на stderr и stdout в контейнере, отправляются в эти логи в Amazon CloudWatch.

С появлением эндпоинтов на основе IC теперь у вас есть возможность просматривать дополнительные метрики экземпляров, метрики компонентов вывода и метрики вызовов.

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

SageMaker также предоставляет метрики на уровне компонента вывода, которые могут показать более детальное представление использования ресурсов для развернутых компонентов вывода. Это позволяет увидеть, сколько агрегированных ресурсов используют, например, GPUUtilizationNormalized и GPUMemoryUtilizationNormalized для каждого компонента вывода, который может иметь ноль или много копий.

Наконец, SageMaker предоставляет метрики вызовов, которые теперь отслеживают вызовы для компонентов вывода агрегированно (Invocations) или для каждой созданной копии (InvocationsPerCopy)

Для полного списка метрик смотрите Метрики вызовов эндпоинта SageMaker.

Автоматическое масштабирование на уровне модели

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

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

aas_client.put_scaling_policy(    PolicyName=endpoint_name,    PolicyType='TargetTrackingScaling',    ServiceNamespace=service_namespace,    ResourceId=resource_id,    ScalableDimension=scalable_dimension,    TargetTrackingScalingPolicyConfiguration={        "PredefinedMetricSpecification": {            "PredefinedMetricType": "SageMakerInferenceComponentInvocationsPerCopy",        },        "TargetValue": autoscaling_target_value,        "ScaleInCooldown": 300,  # default        "ScaleOutCooldown": 300,  # default    },)

После установки политики масштабирования SageMaker создает два аварийных сигнала CloudWatch для каждой цели автомасштабирования: один для масштабирования в случае тревоги в течение 3 минут (трех 1-минутных точек данных), и один для масштабирования в случае тревоги в течение 15 минут (15 1-минутных точек данных), как показано на следующем скриншоте. Время для запуска действия по масштабированию обычно составляет 1–2 минуты больше, чем эти минуты, потому что требуется время для публикации метрик эндпоинта в CloudWatch, а также требуется время для реакции AutoScaling. Период охлаждения – это количество времени в секундах после завершения операции масштабирования масштабирования в меньшую или большую сторону перед началом следующей операции масштабирования в большую сторону. Если период охлаждения масштабирования в большую сторону короче, чем время обновления эндпоинта, то это не оказывает эффекта, поскольку невозможно обновить эндпоинт SageMaker, когда он находится в статусе Обновление.

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

sagemaker_client.create_endpoint_config(    EndpointConfigName=endpoint_config_name,    ExecutionRoleArn=role,    ProductionVariants=[{        "VariantName": variant_name,        "InstanceType": instance_type,        "InitialInstanceCount": initial_instance_count,        "ModelDataDownloadTimeoutInSeconds": model_data_download_timeout_in_seconds,        "ContainerStartupHealthCheckTimeoutInSeconds": container_startup_health_check_timeout_in_seconds,        {"ManagedInstanceScaling": {            "Status": "ENABLED",            "MinInstanceCount": initial_instance_count,            "MaxInstanceCount": max_instance_count,            }        },    }],)

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

Заключение

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

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