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

Виконуйте робочі навантаження логічного висновку машинного навчання на примірниках на основі AWS Graviton за допомогою Amazon SageMaker

Сьогодні ми запускаємо Amazon SageMaker висновок на AWS Гравітон щоб ви могли скористатися перевагами ціни, продуктивності та ефективності чіпів Graviton.

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

Короткий огляд Гравітону

AWS Graviton — це сімейство процесорів, розроблених AWS, які забезпечують найкраще співвідношення ціна-продуктивність і є більш енергоефективними, ніж аналоги x86. Процесори AWS Graviton 3 є останніми в сімействі процесорів Graviton і оптимізовані для робочих навантажень ML, включаючи підтримку bfloat16 і подвійну пропускну здатність Single Instruction Multiple Data (SIMD). У поєднанні цих двох функцій Graviton 3 може забезпечити до трьох разів кращу продуктивність порівняно з примірниками Graviton 2. Graviton 3 також споживає до 60% менше енергії за такої ж продуктивності, як і порівняння Обчислювальна хмара Amazon Elastic (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).
    . Python TensorFlow PyTorch Scikit-Learn 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 Containers для вашого фреймворку та версії Python. Для отримання додаткової інформації див Представляємо зображення мультиархітектурних контейнерів для Amazon ECR.
  3. Знайдіть URI сценарію висновку Python у сегменті S3 (загальна назва файлу: inference.py).
    URI сценарію висновку потрібен у INFERENCE_SCRIPT_S3_LOCATION.
  4. За допомогою цих змінних ви можете викликати API SageMaker за допомогою такої команди:
    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 також надає контейнери для класичних фреймворків ML, таких як XGBoost і Scikit-learn. Контейнери двійково сумісні між екземплярами c6g/m6g і c7g, тому перенесення програми логічного висновку з одного покоління в інше відбувається без проблем.

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

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

Рекомендовані найкращі практики

На екземплярах Graviton кожен vCPU є фізичним ядром. Немає конкуренції за загальні ресурси ЦП (на відміну від SMT), а масштабування продуктивності робочого навантаження є лінійним із кожним додаванням vCPU. Тому рекомендується використовувати пакетний висновок, коли це дозволяє сценарій використання. Це дозволить ефективно використовувати vCPU шляхом паралельної обробки пакета на кожному фізичному ядрі. Якщо пакетний висновок неможливий, потрібен оптимальний розмір екземпляра для даного корисного навантаження, щоб гарантувати, що накладні витрати на планування потоків ОС не переважують обчислювальну потужність, яка постачається з додатковими vCPU.

TensorFlow поставляється з власними ядрами за замовчуванням, тому рекомендується перейти на 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 Регіонуйте та розгорніть модель на мл.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 за допомогою зразка коду в цій публікації блогу.


Про авторів

Віктор ХарамільоВіктор Харамілло, PhD, є старшим інженером з машинного навчання в AWS Professional Services. До роботи в AWS він був професором університету та дослідником у сфері прогнозного технічного обслуговування. У вільний час він із задоволенням їздить на мотоциклі та майструє мотоцикли своїми руками.

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

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

Джона ЛюДжона Лю є інженером з розробки програмного забезпечення в команді Amazon SageMaker. Її поточна робота зосереджена на допомозі розробникам ефективно розміщувати моделі машинного навчання та покращувати ефективність висновків. Вона захоплена аналізом просторових даних і використанням ШІ для вирішення суспільних проблем.

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

Часова мітка:

Більше від AWS Машинне навчання