Создавайте модели Amazon SageMaker с помощью PyTorch Model Zoo PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.

Создавайте модели Amazon SageMaker с помощью зоопарка моделей PyTorch.

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

В этом сообщении блога показано, как выполнять логические выводы машинного обучения с использованием модели обнаружения объектов из PyTorch Model Zoo в SageMaker. Предварительно обученные модели машинного обучения из зоопарка моделей PyTorch готовы и могут легко использоваться как часть приложений машинного обучения. Настройка этих моделей машинного обучения в качестве конечной точки SageMaker или Пакетное преобразование SageMaker выполнить онлайн или офлайн вывод легко, следуя шагам, описанным в этом сообщении в блоге. Мы будем использовать Быстрее R-CNN модель обнаружения объектов для прогнозирования ограничивающих рамок для предварительно определенных классов объектов.

Мы рассмотрим сквозной пример, от загрузки весов модели обнаружения объектов Faster R-CNN до их сохранения в Сервис Amazon Simple Storage (Amazon S3) ведро, а также к написанию файла точки входа и пониманию ключевых параметров в API PyTorchModel. Наконец, мы развернем модель машинного обучения, выполним логические выводы с помощью SageMaker Batch Transform, проверим выходные данные модели машинного обучения и узнаем, как интерпретировать результаты. Это решение можно применить к любой другой предварительно обученной модели в зоопарке моделей PyTorch. Список доступных моделей см. Документация PyTorch Model Zoo.

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

В этом сообщении блога будут рассмотрены следующие шаги. Полную рабочую версию всех шагов см. create_pytorch_model_sagemaker.ipynb

  • Шаг 1. Настройка
  • Шаг 2. Загрузка модели машинного обучения из PyTorch Model Zoo
  • Шаг 3. Сохраните и загрузите артефакты модели машинного обучения в Amazon S3.
  • Шаг 4. Создание сценариев вывода модели ML
  • Шаг 5. Запуск задания пакетного преобразования SageMaker
  • Шаг 6: Визуализация результатов

Схема архитектуры

структура каталогов

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

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

sagemaker_pytorch_model_zoo --> root directory
    |- inference.py --> entry point file
    |- create_pytorch_model_sagemaker.ipynb --> walks through all steps in this blog post
    |- cars.jpg --> input image

Ассоциация sagemaker_torch_model_zoo папка должна содержать inference.py в качестве файла точки входа и create_pytorch_model_sagemaker.ipynb для загрузки и сохранения весов модели, создания объекта модели SageMaker и, наконец, передачи его в задание пакетного преобразования SageMaker. Чтобы добавить свои собственные модели машинного обучения, измените пути в разделе «Шаг 1: настройка» записной книжки и загрузите новую модель в разделе «Шаг 2: Загрузка модели машинного обучения из зоопарка моделей PyTorch». Остальные шаги ниже останутся прежними.

Шаг 1. Настройка

Роли IAM

SageMaker выполняет операции с инфраструктурой, которой управляет SageMaker. SageMaker может выполнять только действия, разрешенные в соответствии с ролью выполнения IAM, сопровождающей блокнот для SageMaker. Более подробную документацию по созданию ролей IAM и управлению разрешениями IAM см. Документация по ролям AWS SageMaker. Мы можем создать новую роль или получить Блокнот SageMaker (студия)роли выполнения по умолчанию, запустив следующие строки кода:

import sagemaker

session = sagemaker.Session()

# Set a default S3 bucket
default_bucket = session.default_bucket()

# Get the region
region = boto3.Session().region_name

# Get the SageMaker Execution Role
role_arn = sagemaker.get_execution_role()

Приведенный выше код получает роль выполнения SageMaker для экземпляра записной книжки. Это роль IAM, которую мы создали для нашего экземпляра записной книжки SageMaker или SageMaker Studio.

Настраиваемые пользователем параметры

Вот все настраиваемые параметры, необходимые для создания и запуска нашего задания пакетного преобразования SageMaker:

INSTANCE_TYPE= "ml.m5.xlarge"
INSTANCE_COUNT= 1
BUCKET = os.path.join("s3://", default_bucket)

DATA_PATH= os.path.join(BUCKET, "images")
IMAGE_NAME = "cars.jpg"
RANDOM_STRING_LENGTH= 16
MODEL_NAME= "FasterRCNNResnet50"

# Needs to be set to version 1.2 or higher to enable automatic PyTorch model repackaging
FRAMEWORK_VERSION= "1.2"
ENTRY_POINT_FILE_NAME= "inference.py"

SAGEMAKER_EXECUTION_ROLE_ARN= role_arn
MODEL_ARTIFACTS_FILE_NAME= os.path.join(BUCKET, "modelzoo/fasterrcnn_resnet50_fpn/model.tar.gz")
IMAGE_URI= sagemaker.image_uris.retrieve(framework="pytorch",
region=region,
version="1.9.1",
py_version="py38",
image_scope='inference',
instance_type=INSTANCE_TYPE)

Шаг 2. Загрузка модели машинного обучения из зоопарка моделей PyTorch

Затем мы указываем модель обнаружения объектов из PyTorch Model Zoo и сохраняем веса ее модели ML. Обычно мы сохраняем модель PyTorch, используя расширения файлов .pt или .pth. Фрагмент кода ниже загружает предварительно обученную модель Faster R-CNN ResNet50 ML из зоопарка моделей PyTorch:

модель = torchvision.models.detection.fasterrcnn_resnet50_fpn (предварительно обученный = True)

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

H = 1080
W = 1920
scripted_fn = torch.jit.script(model, torch.randn(1, 3, H, W))
scripted_fn.save("model.pt")

Шаг 3. Сохраните и загрузите артефакты моделей машинного обучения в Amazon S3.

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

Внимание: Для запуска следующих команд вам необходимо иметь Интерфейс командной строки AWS (AWS CLI) установлен.

tar -czvf model.tar.gz model.pt
aws s3 cp model.tar.gz $MODEL_ARTIFACTS_FILE_NAME

Затем мы копируем наше входное изображение на S3. Ниже приведен полный путь S3 для образа.

car_image_path = os.path.join(DATA_PATH, IMAGE_NAME)

Мы можем скопировать этот образ на S3 с помощью другой команды aws s3 cp.

aws s3 cp cars.jpg $car_image_path

Шаг 4. Создание сценариев вывода модели ML

Теперь мы пройдемся по нашему файлу точки входа, inference.py модуль. Мы можем развернуть модель PyTorch, обученную вне SageMaker, с помощью класса PyTorchModel. Сначала мы создаем экземпляр объекта PyTorchModelZoo. Затем мы создадим файл точки входа inference.py для выполнения вывода машинного обучения с использованием пакетного преобразования SageMaker для выборочных данных, размещенных в Amazon S3.

Понимание объекта PyTorchModel

Ассоциация PyTorchМодель Класс в SageMaker Python API позволяет нам выполнять вывод ML, используя наш загруженный артефакт модели.

Чтобы инициировать класс PyTorchModel, нам нужно понять следующие входные параметры:

  • name: Наименование модели; мы рекомендуем использовать либо название модели + дату и время, либо случайную строку + дату и время для уникальности.
  • model_data: URI S3 упакованного артефакта модели машинного обучения.
  • entry_point: определяемый пользователем файл Python, который будет использоваться образом Docker для вывода для определения обработчиков входящих запросов. Код определяет загрузку модели, предварительную обработку входных данных, логику прогнозирования и постобработку выходных данных.
  • framework_version: необходимо установить версию 1.2 или выше, чтобы включить автоматическую переупаковку модели PyTorch.
  • source_dir: каталог файла entry_point.
  • role: Роль IAM для отправки сервисных запросов AWS.
  • image_uri: используйте этот образ контейнера Amazon ECR Docker в качестве основы для вычислительной среды модели машинного обучения.
  • sagemaker_session: сеанс SageMaker.
  • py_version: используемая версия Python.

Следующий фрагмент кода создает экземпляр класса PyTorchModel для выполнения логического вывода с использованием предварительно обученной модели PyTorch:

model = PyTorchModel(
               name=RANDOM_STRING,
               model_data=MODEL_ARTIFACTS_FILE_NAME,
               entry_point=ENTRY_POINT_FILE_NAME,
               framework_version=FRAMEWORK_VERSION,
               role=SAGEMAKER_EXECUTION_ROLE_ARN,
               sagemaker_session=sagemaker_session,
               image_uri=IMAGE_URI,
        )

Понимание файла точки входа (inference.py)

Параметр entry_point указывает на файл Python с именем inference.py. Эта точка входа определяет загрузку модели, предварительную обработку входных данных, логику прогнозирования и постобработку выходных данных. Он дополняет код обслуживания модели ML в готовом PyTorch. Контейнер глубокого обучения SageMaker изображения.

Inference.py будут содержать следующие функции. В нашем примере мы реализуем model_fn, input_fn, predict_fn и output_fn функции для переопределения обработчик вывода PyTorch по умолчанию.

  1. model_fn: принимает каталог, содержащий контрольные точки статической модели в образе вывода. Открывает и загружает модель по указанному пути и возвращает модель PyTorch.
  2. input_fn: принимает полезную нагрузку входящего запроса (request_body) и тип содержимого входящего запроса (request_content_type) в качестве входных данных. Управляет декодированием данных. Эту функцию необходимо настроить для того, какой ввод ожидает модель.
  3. predict_fn: вызывает модель данных, десериализованных в input_fn. Выполняет прогнозирование десериализованного объекта с загруженной моделью машинного обучения.
  4. output_fn: сериализует результат прогнозирования в желаемый тип содержимого ответа. Преобразует прогнозы, полученные из функции predict_fn, в форматы JSON, CSV или NPY.

Шаг 5. Запуск задания пакетного преобразования SageMaker

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

transformer = model.transformer(instance_type=INSTANCE_TYPE, 
                                instance_count=INSTANCE_COUNT
                                )
transformer.transform(data=DATA_PATH,
                      data_type="S3Prefix",
                      content_type="application/x-image",
                      wait=True
                      )

См. документацию по созданию задания пакетного преобразования по адресу CreateTransformJob.

Шаг 6: Визуализация результатов

После завершения задания пакетного преобразования SageMaker мы можем загрузить выходные данные ML из Amazon S3. Для этого перейдите в Консоль управления AWS и найдите Amazon SageMaker. На левой панели под выводСм. Задания пакетного преобразования.

Создавайте модели Amazon SageMaker с помощью PyTorch Model Zoo PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.

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

Создавайте модели Amazon SageMaker с помощью PyTorch Model Zoo PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.

Во-первых, задание будет иметь статус «Выполняется». Как только это будет сделано, посмотрите, как статус изменится на «Завершено».

Создавайте модели Amazon SageMaker с помощью PyTorch Model Zoo PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.

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

Создавайте модели Amazon SageMaker с помощью PyTorch Model Zoo PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.

Под Конфигурация выходных данных, мы увидим выходной путь S3. Здесь мы найдем наш вывод ML.

Создавайте модели Amazon SageMaker с помощью PyTorch Model Zoo PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.

Выберите выходной путь S3 и увидите файл [image_name].[file_type].out с нашими выходными данными. Наш выходной файл будет содержать список отображений. Пример вывода:

[
  {
    "boxes": [
      [
        214.32322692871094,
        192.18418884277344,
        830.3932495117188,
        521.6996459960938
      ],
      [
        235.6244354248047,
        301.3315734863281,
        253.6448516845703,
        312.3525695800781
      ],
      [
        183.92031860351562,
        291.7759704589844,
        207.28196716308594,
        312.1448669433594
      ],
    ],
    "labels": [
      3,
      3,
      9,
    ],
    "scores": [
      0.8823906183242798,
      0.7710548639297485,
      0.4969744384288788,
    ]
  }
]

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

def get_output_from_s3(s3uri, file_name):
    parsed_url = urlparse(s3uri)
    bucket_name = parsed_url.netloc
    prefix = parsed_url.path[1:]
    s3 = boto3.resource('s3')
    obj = s3.Object(bucket_name, '{}/{}'.format(prefix, file_name))
    return obj.get()["Body"].read().decode('utf-8')
    
# Output path from Batch Transform job
output_path = transformer.output_path

# Get the output file from S3
predictions = get_output_from_s3(output_path, "car.jpg.out")

Затем мы обрабатываем этот выходной файл и визуализируем наши прогнозы. Ниже мы указываем наш доверительный порог. Получаем список классов из Сопоставление объектов набора данных COCO. Во время вывода модели требуются только входные тензоры, и она возвращает постобработанные прогнозы в виде List[Dict[Tensor]], по одному для каждого входного изображения. Поля Dict следующие, где N — количество обнаружений:

  1. коробки (FloatTensor[N, 4]): предсказанные коробки в [x1, y1, x2, y2] формат, с 0 <= x1 < x2 <= W and 0 <= y1 < y2 <= H, Где W ширина изображения и H высота изображения
  2. этикетки (Int64Tensor[N]): предсказанные метки для каждого обнаружения
  3. баллы (Tensor[N]): баллы прогноза для каждого обнаружения

Для получения более подробной информации о выводе см. PyTorch Faster R-CNN Документация FPN.

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

def procress_batch_transform_output(predictions):
    predictions = eval(predictions)
    for pred in predictions[1:]:
        pred = pred[0]
        boxes = np.array(pred["boxes"])
        labels = np.array(pred["labels"])
        scores = np.array(pred["scores"])

        scores_idx = scores >= CONF_THRESH
        boxes_meet = boxes[scores_idx, :]
        labels_meet = labels[scores_idx]
        scores_meet = scores[scores_idx]

        labels_str = [CLASSES[i] for i in labels_meet]
        
        # Return a tuple containing labels, label index, score, and bounding box
        processed_predictions =  list(zip(labels_str, labels_meet, scores_meet, boxes_meet))
        return processed_predictions
    
    
def visualize_batch_transform_output(input_image, processed_predictions):
    # read input image from computer
    img = read_image(input_image)
    for label, label_index, score, box in processed_predictions:
        label = label + ", score: " + str(round(score, 2))
        # draw bounding box and fill color
        box = torch.tensor(box)
        box = box.unsqueeze(0)
        img = draw_bounding_boxes(img, box, width=5,labels=[label], font_size=16)

    # transform this image to PIL image
    img = torchvision.transforms.ToPILImage()(img)

    # display output
    img.show()

# Process the predictions in the output file
processed_predictions = procress_batch_transform_output(predictions)
visualize_batch_transform_output("car.jpg", processed_predictions)

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

Создавайте модели Amazon SageMaker с помощью PyTorch Model Zoo PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.

Внимание: если изображение не отображается в вашем блокноте, найдите его в дереве каталогов в левой части JupyterLab и откройте оттуда.

Запуск примера кода

Для полного рабочего примера клонируйте код в amazon-sagemaker-примеры GitHub и запустить ячейки в create_pytorch_model_sagemaker.ipynb Блокнот.

Заключение

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


Об авторах

Создавайте модели Amazon SageMaker с помощью PyTorch Model Zoo PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.Дипика Хуллар является инженером по машинному обучению в Лаборатория решений Amazon ML. Она помогает клиентам интегрировать решения машинного обучения для решения своих бизнес-задач. Совсем недавно она построила конвейеры обучения и логического вывода для клиентов СМИ, а также модели прогнозирования для маркетинга.

Создавайте модели Amazon SageMaker с помощью PyTorch Model Zoo PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.Марсело Аберле является инженером по машинному обучению в организации AWS AI. Он возглавляет усилия MLOps в Лаборатория решений Amazon ML, помогая клиентам разрабатывать и внедрять масштабируемые системы машинного обучения. Его миссия состоит в том, чтобы направлять клиентов на пути к корпоративному машинному обучению и ускорить переход от машинного обучения к производству.

Создавайте модели Amazon SageMaker с помощью PyTorch Model Zoo PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.Нинад Кулкарни является ученым-прикладником в Лаборатория решений Amazon ML. Он помогает клиентам внедрять машинное обучение и искусственный интеллект, создавая решения для решения их бизнес-задач. Совсем недавно он создал прогностические модели для спортивных, автомобильных и медиа-клиентов.

Создавайте модели Amazon SageMaker с помощью PyTorch Model Zoo PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.Яш-Шах является научным менеджером в Лаборатория решений Amazon ML. Он и его команда ученых-прикладников и инженеров машинного обучения работают над рядом вариантов использования машинного обучения в здравоохранении, спорте, автомобилестроении и производстве.

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

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