Пошаговое руководство по развертыванию модели scikit-learn на AWS с локального устройства.

Amazon Web Services (AWS) в настоящее время является самой востребованной облачной платформой для профессионалов в области науки о данных и машинного обучения. Исходя из этого, в первом сборнике сообщений в блогах этой серии статей о развертывании машинного обучения будет рассказано, как развертывать различные модели различными способами на AWS.

Другие публикации из этой серии:

Первое развертывание AWS, которое мы рассмотрим, будет развертыванием простой модели обучения Scikit, полностью выполненной с локального компьютера с использованием предварительно созданных оценщиков Scikit-learn AWS.

Прежде чем мы углубимся в пошаговые инструкции, важно понять базовую концепцию обучения и развертывания моделей в AWS Sagemaker. Если вы не знакомы с Docker, рекомендую прочитать их обзорную документацию здесь. Не вдаваясь в подробности, AWS, по сути, использует контейнеры Docker для хранения конфигурации модели, обучения модели и, в конечном итоге, ее развертывания. Инкапсулируя модели машинного обучения в контейнерах Docker, AWS может одновременно предоставлять набор предварительно сконфигурированных образов Docker для распространенных фреймворков машинного обучения, а также обеспечивать полную настройку.

К счастью для нас, в 2018 году AWS добавила Scikit-learn в свой список поддерживаемых фреймворков. Таким образом, мы можем быстро развернуть нашу модель, используя предварительно настроенный контейнер Docker. Как вы увидите ниже, мы создадим обучающий сценарий и выполним его внутри контейнера с помощью оценщиков AWS Scikit-learn. Итак, без лишних слов, перейдем к делу.

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

Шаг 1. Настройка учетной записи

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

Шаг 2. AWS CLI и пакеты Pip

После того, как вы зарегистрировались в AWS, нам также необходимо загрузить интерфейс командной строки AWS (CLI), чтобы мы могли работать с нашей учетной записью AWS с нашего локального устройства. AWS хорошо объясняет, как устанавливать, настраивать и использовать их интерфейс командной строки.

Нам также потребуется установить несколько пакетов SDK для Python, чтобы получить доступ к AWS в наших скриптах Python. В частности, нам понадобится Boto3 для обработки загрузки данных и Sagemaker для создания наших оценщиков Scikit-learn. Выполните приведенные ниже команды pip, чтобы установить их.

pip install boto3
pip install sagemaker

Шаг 3. Настройка данных

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

Мы будем использовать приведенный ниже блок кода, чтобы вырезать несколько образцов из набора данных для тестирования вызовов API после развертывания модели и сохранить данные в двух новых файлах с именами train.csv и deploy_test.csv.

Примечание. Мы не соблюдаем рекомендации по набору обучающих / тестовых программ машинного обучения. На практике вы всегда должны разбивать свои данные на набор поездов / тестов. Однако в этом руководстве мы просто сосредоточимся на развертывании модели и проверим, как модель предсказывает несколько точек, которые мы сохранили в deploy_test.csv, выполнив в конце вызов API.

Чтобы AWS Sagemaker мог получить доступ к этим данным, когда придет время обучать модель, мы должны загрузить данные в нашу учетную запись AWS, создав новую корзину Simple Storage Service (S3) и добавив в нее наши обучающие данные. Для этого мы будем использовать установленный выше пакет Boto3 SDK, чтобы создать корзину S3 в указанном регионе, а затем сохранить наш файл train.csv в папке train /. в этом ведре. Щелкните здесь, чтобы получить дополнительную информацию о S3.

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

Чтобы дважды проверить правильность работы приведенных выше сценариев, вы можете перейти в Консоль AWS S3, войти в систему и посмотреть, есть ли там созданная нами корзина. Если он есть, мы готовы перейти к сути работы и создать нашу модель!

Шаг 4. Модельный сценарий

Чтобы развернуть модель в AWS с помощью Scikit-learn Sagemaker SDK, мы сначала должны создать сценарий, который сообщает Sagemaker, как обучать и развертывать нашу модель. Хотя для развертывания нашей модели требуется гораздо меньше работы, чем создание собственного контейнера Docker, SDK требует от нас соблюдения довольно строгих правил.

Во-первых, мы импортируем все пакеты, которые нам понадобятся, и создадим пару словарей для преобразования целевых меток из текста в числа и наоборот.

После этого импорта нам нужно обернуть шаги обучения в функцию __main__. Мы также добавим строку для сохранения модели в конце. SDK SKLearn Sagemaker запустит эту функцию __main__ для обучения модели на данных, которые мы отправили в корзину S3 выше, а затем сохранит модель, чтобы ее можно было использовать позже, когда мы захотим ее развернуть.

Функция __main__ - единственная необходимая функция. Однако у нас есть возможность изменить ряд дополнительных функций, которые определяют, как модель будет обрабатывать вызовы API после ее развертывания. Эти дополнительные функции:

model_fn: указывает, откуда и как загружать развертываемую модель.

input_fn: форматирует тело запроса, отправляемое в развернутую модель, в формат, который можно передать в модель.

pred_fn: использует развернутую модель, загруженную model_fn и данные, отформатированные с помощью input_fn, чтобы делать прогнозы.

output_fn: преобразовывает прогнозы, сделанные с помощью pred_fn, в окончательный формат, который возвращается в качестве ответа на вызов API.

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

Шаг 5. Создайте роль IAM Sagemaker

К сожалению, я соврал немного раньше, когда сказал, что мы собираемся делать ВСЕ это с нашего локального компьютера. Если у вас еще нет роли Sagemaker IAM, нам нужно будет перейти в консоль AWS IAM и создать новую роль. Для начала нажмите здесь и войдите в систему. Вы должны увидеть экран, подобный показанному ниже:

Отсюда выберите Sagemaker в качестве службы и нажмите Далее.

Пропустите следующие две страницы, нажав Далее, пока не увидите следующий экран:

На этой странице просто создайте собственное имя роли * и (необязательно) описание роли, прежде чем нажимать Создать роль. Обязательно запомните, как вы назвали свою роль, так как она нам понадобится на следующем этапе!

Шаг 6. Разверните модель

Избавившись от тяжелой работы, давайте развернем вашу модель. К счастью, с классом AWS SKLearn для этого требуется всего несколько строк кода. Просто убедитесь, что путь entry_point указывает на сценарий, который мы сохранили на шаге 4, а переменная role - это Имя роли *, созданное вами на шаге 5. В этом фрагменте мы также указываем instance_types для модели и развернутой конечной точки. Instance_type указывает, сколько вычислительной мощности мы хотим выделить AWS для наших сервисов. Очевидно, что чем больше мощность, тем больше стоимость, поэтому для этого примера мы используем небольшие экземпляры. Отметьте здесь для получения списка всех доступных типов экземпляров Sagemaker.

Примечание: конструктор SKLearn () имеет ряд необязательных аргументов, которые вы можете добавить для настройки Scikit-learn framework_version, гиперпараметров и т. д. Нажмите здесь для получения дополнительной информации.

Шаг 7. Проверьте конечную точку

Чтобы проверить конечную точку, мы отправим запрос с образцами данных, которые мы сохранили в deploy_test.csv еще на шаге 3. Чтобы отправить запрос на развернутую конечную точку, нам сначала нужно получить наши тестовые образцы в формат, который модель может анализировать (т. е. формат, который может быть интерпретирован функцией input_fn, которую мы определили в aws_sklearn_main.py). Поскольку мы сконфигурировали нашу модель для понимания запросов с несколькими образцами, в которых функции каждого образца разделены знаком «», а каждый отдельный образец разделен знаком «|» мы форматируем наш request_body в формат, как показано ниже:

'147,6.5,3.0,5.2,2.0|148,6.2,3.4,5.4,2.3|149,5.9,3.0,5.1,1.8'

Отсюда мы используем boto3 для создания сеанса Sagemaker, который позволит нам взаимодействовать с нашей развернутой моделью. Чтобы вызвать нашу конечную точку Sagemaker, мы используем функцию invoke_endpoint. Для этой функции мы должны указать конечную точку, conent_type и тело. Есть также ряд необязательных аргументов, о которых вы можете прочитать здесь. В нашем случае мы передадим конечную точку, которую мы распечатали на предыдущем шаге, content_type ‘text / csv’ и строку, отформатированную так, как указано выше. Наконец, как только мы запустили этот метод и получили ответ, мы добавляем индекс в тело нашего ответа и читаем то, что возвращается.

Если ожидаемый ответ соответствует тому, что фактически было возвращено моделью, вы успешно обучили и развернули рабочую модель Scikit-learn на AWS!

Шаг 8. Очистите ресурсы

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

aws_sklearn_predictor.delete_endpoint()

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

  1. Откройте Консоль Sagemaker.
  2. В боковом меню в разделе Выводы удалите ресурсы, созданные в конфигурациях Модели, Конечная точка и Конечная точка. вкладки.
  3. Откройте S3 Console и удалите созданное ведро.
  4. Откройте IAM Console и удалите созданную нами роль.
  5. Откройте Cloudwatch Console и удалите все логи / aws / sagemaker.

Обзор

В целом, хотя кривая обучения немного высока, как только вы научитесь ориентироваться в сервисах AWS и понять принципы Sagemaker, оценщики AWS SKLearn станут отличным инструментом для быстрого развертывания моделей Scikit-learn.

Преимущества:

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

Недостатки

  • Большая начальная кривая обучения
  • Несколько сервисов AWS для понимания и работы
  • Документацию бывает сложно найти

Другие сообщения в блогах этой серии: