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

Запускайте рабочие нагрузки логического вывода машинного обучения на инстансах на базе AWS Graviton с помощью Amazon SageMaker.

Сегодня мы запускаем Создатель мудреца Амазонки вывод о АМС Гравитон чтобы вы могли воспользоваться ценой, производительностью и эффективностью чипов Graviton.

Экземпляры на основе Graviton доступны для вывода модели в SageMaker. Этот пост поможет вам перенести и развернуть рабочую нагрузку логического вывода машинного обучения (ML) с x86 на инстансы на основе Graviton в SageMaker. Мы предоставляем пошаговое руководство по развертыванию модели, обученной SageMaker, в инстансах на базе Graviton, рассказываем о передовых методах работы с Graviton, обсуждаем преимущества цены и производительности и демонстрируем, как развернуть модель TensorFlow на инстансе SageMaker Graviton.

Краткий обзор Гравитона

AWS Graviton — это семейство процессоров, разработанных AWS, которые обеспечивают лучшее соотношение цены и качества и более энергоэффективны, чем их аналоги x86. Процессоры AWS Graviton 3 являются последними в семействе процессоров Graviton и оптимизированы для рабочих нагрузок машинного обучения, включая поддержку bfloat16 и удвоенную пропускную способность для одной инструкции и нескольких данных (SIMD). Когда эти две функции объединены, Graviton 3 может обеспечить до трех раз более высокую производительность по сравнению с инстансами Graviton 2. Graviton 3 также потребляет до 60% меньше энергии при той же производительности, что и сопоставимые Эластичное вычислительное облако Amazon (Amazon EC2). Это отличная функция, если вы хотите уменьшить свой углеродный след и достичь своих целей в области устойчивого развития.

Обзор решения

Чтобы развернуть свои модели в экземплярах Graviton, вы либо используете Контейнеры глубокого обучения AWS or привозите свои контейнеры совместим с архитектурой Arm v8.2.

Миграция (или новое развертывание) ваших моделей с инстансов на платформе x86 на инстансы Graviton выполняется просто, поскольку AWS предоставляет контейнеры для размещения моделей с помощью PyTorch, TensorFlow, Scikit-learn и XGBoost, а модели не зависят от архитектуры. Тем не менее, если вы хотите принести свои собственные библиотеки, вы также можете это сделать, просто убедитесь, что ваш контейнер создан в среде, поддерживающей архитектуру Arm64. Для получения дополнительной информации см. Создание собственного контейнера алгоритмов.

Для развертывания модели необходимо выполнить три шага:

  1. Создайте модель SageMaker: она будет содержать, среди прочих параметров, информацию о расположении файла модели, контейнере, который будет использоваться для развертывания, и расположении сценария логического вывода. (Если у вас есть существующая модель, уже развернутая в экземпляре логического вывода на основе x86, вы можете пропустить этот шаг.)
  2. Создайте конфигурацию конечной точки: она будет содержать информацию о типе экземпляра, который вы хотите использовать для конечной точки (например, ml.c7g.xlarge для Graviton3), имени модели, которую вы создали на шаге 1, и количестве экземпляров на конечная точка.
  3. Запустите конечную точку с конфигурацией конечной точки, созданной на шаге 2.

Предпосылки

Прежде чем начать, учтите следующие предпосылки:

  1. Выполните предварительные требования, перечисленные в Предпосылки.
  2. Ваша модель должна быть моделью на основе PyTorch, TensorFlow, XGBoost или Scikit-learn. В следующей таблице приведены версии, поддерживаемые в настоящее время на момент написания этой статьи. Последние обновления см. Контейнеры SageMaker Framework (только поддержка SM).
    . Питон TensorFlow PyTorch Scikit учиться XGBoost
    Поддерживаемые версии 3.8 2.9.1 1.12.1 1.0-1 1.3-1 - 1.5-1
  3. Скрипт вывода хранится в Простой сервис хранения Amazon (Amazon S3).

В следующих разделах мы проведем вас через этапы развертывания.

Создайте модель SageMaker

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

  1. Найдите модель, которую вы сохранили в корзине S3. Скопируйте URI.
    Вы используете URI модели позже в MODEL_S3_LOCATION.
  2. Определите версию платформы и версию Python, которые использовались во время обучения модели.
    Вам нужно выбрать контейнер из списка доступных контейнеров AWS Deep Learning для вашей платформы и версии Python. Для получения дополнительной информации см. Представляем образы контейнеров с несколькими архитектурами для Amazon ECR.
  3. Найдите URI сценария Python для вывода в корзине S3 (обычное имя файла — inference.py).
    URI сценария вывода требуется в INFERENCE_SCRIPT_S3_LOCATION.
  4. С помощью этих переменных вы можете вызвать SageMaker API с помощью следующей команды:
    client = boto3.client("sagemaker")
    
    client.create_model(
        ModelName="Your model name",
        PrimaryContainer={
            "Image": ,
            "ModelDataUrl": ,
            "Environment": {
            "SAGEMAKER_PROGRAM": "inference.py",
            "SAGEMAKER_SUBMIT_DIRECTORY": ,
            "SAGEMAKER_CONTAINER_LOG_LEVEL": "20",
            "SAGEMAKER_REGION": 
            }
        },
        ExecutionRoleArn= 
    )

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

Создайте конфигурацию конечной точки

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

client.create_endpoint_config(
    EndpointConfigName= ,
    ProductionVariants=[
        {
         "VariantName": "v0",
         "ModelName": "Your model name",
         "InitialInstanceCount": 1,
         "InstanceType": "ml.c7g.xlarge",
        },
    ]
)

На следующем снимке экрана показаны сведения о конфигурации конечной точки в консоли SageMaker.

Запустить конечную точку

С конфигурацией конечной точки, созданной на предыдущем шаге, вы можете развернуть конечную точку:

client.create_endpoint(
    EndpointName = "",
    EndpointConfigName = ""
    )

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

На следующем снимке экрана показана ваша конечная точка на консоли SageMaker.

Конечная точка SageMaker из конфигурации

Что поддерживается

SageMaker предоставляет оптимизированные по производительности глубокие контейнеры Graviton для фреймворков TensorFlow и PyTorch. Эти контейнеры поддерживают компьютерное зрение, обработку естественного языка, рекомендации и общие варианты использования на основе глубоких и широких моделей. В дополнение к контейнерам глубокого обучения SageMaker также предоставляет контейнеры для классических платформ машинного обучения, таких как XGBoost и Scikit-learn. Контейнеры бинарно совместимы между экземплярами c6g/m6g и c7g, поэтому миграция приложения логического вывода из одного поколения в другое выполняется без проблем.

C6g/m6g поддерживает fp16 (с плавающей запятой половинной точности) и для совместимых моделей обеспечивает эквивалентную или лучшую производительность по сравнению с инстансами c5. C7g существенно повышает производительность машинного обучения за счет удвоения ширины SIMD и поддержки bfloat-16 (bf16), которая является наиболее экономичной платформой для запуска ваших моделей.

И c6g/m6g, и c7g обеспечивают хорошую производительность для классического машинного обучения (например, XGBoost) по сравнению с другими экземплярами ЦП в SageMaker. Поддержка Bfloat-16 на c7g позволяет эффективно развертывать модели, обученные bf16 или AMP (Automatic Mixed Precision). Бэкэнд Arm Compute Library (ACL) на Graviton предоставляет ядра bfloat-16, которые могут ускорить даже операторы fp32 с помощью быстрого математического режима без квантования модели.

Рекомендуемые передовые методы

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

TensorFlow по умолчанию поставляется с ядрами Eigen, и рекомендуется переключиться на OneDNN с ACL, чтобы получить наиболее оптимизированный сервер логического вывода. Бэкенд OneDNN и режим быстрой математики bfloat-16 можно включить при запуске службы контейнера:

docker run -p 8501:8501 --name tfserving_resnet 
--mount type=bind,source=/tmp/resnet,target=/models/resnet 
-e MODEL_NAME=resnet -e TF_ENABLE_ONEDNN_OPTS=1 
-e DNNL_DEFAULT_FPMATH_MODE=BF16 -e -t tfs:mkl_aarch64

Предыдущая команда обслуживания размещает стандартную модель resnet50 с двумя важными конфигурациями:

-e TF_ENABLE_ONEDNN_OPTS=1
-e DNNL_DEFAULT_FPMATH_MODE=BF16

Их можно передать в контейнер вывода следующим образом:

client.create_model(
    ModelName="Your model name",
    PrimaryContainer={
    "Image": ,
    "ModelDataUrl": ,
    "Environment": {
        "SAGEMAKER_PROGRAM": "inference.py",
        "SAGEMAKER_SUBMIT_DIRECTORY": "",
        "SAGEMAKER_CONTAINER_LOG_LEVEL": "20",
        "SAGEMAKER_REGION": ,
        "TF_ENABLE_ONEDNN_OPTS": "1",
        "DNNL_DEFAULT_FPMATH_MODE": "BF16"
         }
     },
     ExecutionRoleArn='ARN for AmazonSageMaker-ExecutionRole'
)

Пример развертывания

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

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

В следующем примере рассматривается набор данных CIFAR-10. Вы можете следовать примеру блокнота из примеров SageMaker. Репо GitHub воспроизвести модель, которая используется в этом посте. Мы используем обученную модель и cifar10_keras_main.py Скрипт Python для вывода.

Модель хранится в корзине S3: s3://aws-ml-blog/artifacts/run-ml-inference-on-graviton-based-instances-with-amazon-sagemaker/model.tar.gz

Ассоциация cifar10_keras_main.py сценарий, который можно использовать для вывода, хранится по адресу:s3://aws-ml-blog/artifacts/run-ml-inference-on-graviton-based-instances-with-amazon-sagemaker/script/cifar10_keras_main.py

Мы используем us-east-1 Регионируйте и разверните модель на экземпляре ml.c7g.xlarge на базе Graviton. Исходя из этого, URI нашего контейнера глубокого обучения AWS выглядит следующим образом: 763104351884.dkr.ecr.us-east-1.amazonaws.com/tensorflow-inference-graviton:2.9.1-cpu-py38-ubuntu20.04-sagemaker

  1. Настройте с помощью следующего кода:
    import sagemaker
    import boto3
    import datetime
    import json
    import gzip
    import os
    
    sagemaker_session = sagemaker.Session()
    bucket = sagemaker_session.default_bucket()
    role = sagemaker.get_execution_role()
    region = sagemaker_session.boto_region_name

  2. Загрузите набор данных для тестирования конечной точки:
    from keras.datasets import cifar10
    (x_train, y_train), (x_test, y_test) = cifar10.load_data()

  3. Создайте конфигурацию модели и конечной точки и разверните конечную точку:
    timestamp = "{:%Y-%m-%d-%H-%M-%S}".format(datetime.datetime.now())
    
    client = boto3.client("sagemaker")
    
    MODEL_NAME = f"graviton-model-{timestamp}"
    ENDPOINT_NAME = f"graviton-endpoint-{timestamp}"
    ENDPOINT_CONFIG_NAME = f"graviton-endpoint-config-{timestamp}"
    
    # create sagemaker model
    create_model_response = client.create_model(
        ModelName=MODEL_NAME,
        PrimaryContainer={
        "Image":  "763104351884.dkr.ecr.us-east-1.amazonaws.com/tensorflow-inference-graviton:2.9.1-cpu-py38-ubuntu20.04-sagemaker ",
        "ModelDataUrl":  "s3://aws-ml-blog/artifacts/run-ml-inference-on-graviton-based-instances-with-amazon-sagemaker/model.tar.gz",
        "Environment": {
            "SAGEMAKER_CONTAINER_LOG_LEVEL": "20",
            "SAGEMAKER_REGION": region
            }
        },
        ExecutionRoleArn=role
    )
    print ("create_model API response", create_model_response)

  4. При желании вы можете добавить свой сценарий вывода в Environment in create_model если вы изначально не добавили его как артефакт в свою модель SageMaker во время обучения:
    "SAGEMAKER_PROGRAM": "inference.py",
    "SAGEMAKER_SUBMIT_DIRECTORY": ,
    		
    # create sagemaker endpoint config
    create_endpoint_config_response = client.create_endpoint_config(
        EndpointConfigName=ENDPOINT_CONFIG_NAME,
        ProductionVariants=[
            {
             "VariantName": "v0",
             "ModelName": MODEL_NAME,
             "InitialInstanceCount": 1,
             "InstanceType": "ml.c7g.xlarge" 
            },
        ]
    )
    print ("ncreate_endpoint_config API response", create_endpoint_config_response)
    
    # create sagemaker endpoint
    create_endpoint_response = client.create_endpoint(
        EndpointName = ENDPOINT_NAME,
        EndpointConfigName = ENDPOINT_CONFIG_NAME,
    )
    print ("ncreate_endpoint API response", create_endpoint_response)   
    

    Вам нужно подождать пару минут, пока произойдет развертывание.

  5. Проверьте статус конечной точки с помощью следующего кода:
    describe_response = client.describe_endpoint(EndpointName=ENDPOINT_NAME)
    print(describe_response["EndpointStatus"]

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

  6. Настройте среду выполнения для вызова конечных точек:
    runtime = boto3.Session().client(service_name="runtime.sagemaker")

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

  7. Приведите полезную нагрузку к тензорам и задайте правильный формат, ожидаемый моделью. Для этого примера мы запрашиваем только один прогноз.
    input_image = x_test[0].reshape(1,32,32,3)

    Мы получаем вывод модели в виде массива.

  8. Мы можем превратить этот вывод в вероятности, если применим к нему softmax:
    CONTENT_TYPE = 'application/json'
    ACCEPT = 'application/json'
    PAYLOAD = json.dumps(input_image.tolist())
    
    response = runtime.invoke_endpoint(
        EndpointName=ENDPOINT_NAME, 
        ContentType=CONTENT_TYPE,
        Accept=ACCEPT,
        Body=PAYLOAD
    )
        
    print(response['Body'].read().decode())

Очистить ресурсы

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

client.delete_endpoint(EndpointName=ENDPOINT_NAME)
client.delete_endpoint_config(EndpointConfigName=ENDPOINT_CONFIG_NAME)
client.delete_model(ModelName=MODEL_NAME)

Сравнение цены и качества

Инстансы на базе Graviton предлагают самую низкую цену и лучшее соотношение цены и качества по сравнению с инстансами на базе x86. Как и в случае с инстансами EC2, конечные точки вывода SageMaker с инстансами ml.c6g (Graviton 2) предлагают на 20 % более низкую цену по сравнению с инстансами ml.c5, а инстансы Graviton 3 ml.c7g на 15 % дешевле, чем инстансы ml.c6. Для получения дополнительной информации см. Цены на Amazon SageMaker.

Заключение

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

Чтобы узнать больше о Graviton, см. Процессор AWS Graviton. Вы можете начать работу с инстансами EC2 на базе AWS Graviton в консоли Amazon EC2, обратившись к Техническое руководство по AWS Graviton. Вы можете развернуть конечную точку модели Sagemaker для логического вывода на Graviton с помощью примера кода в этом сообщении блога.


Об авторах

Виктор ХарамильоВиктор Харамильо, доктор философии, — старший инженер по машинному обучению в AWS Professional Services. До прихода в AWS он был профессором университета и научным сотрудником в области диагностического обслуживания. В свободное время он любит кататься на мотоцикле и мастерить мотоциклы своими руками.

Змнако АврахманЗмнако Аврахман, доктор философии, является менеджером практики, ML SME и членом сообщества технических специалистов по машинному обучению (TFC) в Amazon Web Services. Он помогает клиентам использовать возможности облака для извлечения ценности из своих данных с помощью анализа данных и машинного обучения.

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

Джона ЛюДжона Лю — инженер-разработчик программного обеспечения в команде Amazon SageMaker. Ее текущая работа сосредоточена на том, чтобы помочь разработчикам эффективно размещать модели машинного обучения и повышать производительность логических выводов. Она увлечена анализом пространственных данных и использованием ИИ для решения социальных проблем.

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

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

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