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

В рамках этой серии основное внимание уделяется максимально возможной автоматизации, чтобы уменьшить количество человеческих ошибок и предоставить эффективный способ операционализации модели машинного обучения с использованием AWS. Хотя мы рассмотрим конвейер в AWS, аналогичный конвейер можно построить на любой облачной платформе (включая платформу Google Cloud, Azure и т. д.), поскольку они имеют очень похожие сервисы.

Для демонстрационных целей мы будем использовать следующие сервисы в A.W.S:

  1. S3
  2. Соцсети
  3. SQS
  4. Лямбда-функции
  5. Обучение мудрецов
  6. Оптимизация гиперпараметров Sagemaker
  7. Конечная точка Sagemaker
  8. Шлюз API Amazon
  9. ИАМ

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

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

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

Мы будем работать над следующей архитектурой:

Без дальнейших церемоний, давайте начнем.

Инфраструктура

Личное примечание. Как специалист по данным, одной из областей, о которых я никогда не беспокоился, была инфраструктура. Мой опыт был в основном связан с ноутбуками Jupyter, что было хорошо, однако у меня был недостаток, заключающийся в том, что я не мог ввести в действие созданную мной модель. Вскоре я начал понимать важность наличия эффективной инфраструктуры, которая не только помогла мне понять мир ML Ops (операций машинного обучения), но и сделала меня лучшим специалистом по данным, помогая мне избегать нереалистичных моделей, которые казались справедливыми в ноутбуках Jupyter. .

Итак, давайте начнем с создания инфраструктуры, необходимой для конвейера. Мы будем использовать Terraform — программный инструмент инфраструктура как код (IaaC) с открытым исходным кодом.

Почему инфраструктура — это код?

Справедливо задаться вопросом, зачем использовать инфраструктуру как код, когда мы могли бы использовать сервисы AWS с помощью консоли? Причина проста,

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

Чтобы узнать о том, почему Iaac, нажмите здесь.

Примечание. Мы используем terraform для реализации инфраструктуры, однако это не единственный инструмент на рынке. Поскольку мы используем AWS, мы могли бы использовать AWS Cloudformation — еще один сервис IaaC от AWS. Мне лично нравится использовать terraform из-за его возможностей интеграции с несколькими облаками.

Начнем строить инфраструктуру.

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

  1. Корзина S3, куда могут попасть данные
  2. Раздел SNS, в котором корзина s3 отправляет уведомление о событии каждый раз, когда файл попадает в s3
  3. Очередь SQS, которая получает сообщение от SNS и отправляет событие в функцию Lambda.

Для простоты блога мы просто рассмотрим первую комбинацию S3, SNS, SQS и лямбда-функции, которая отвечает за преобразование данных, когда данные попадают в корзину S3. Другие комбинации для вызова модели и создания конечной точки модели могут применяться аналогичным образом.

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

Далее нам нужно создать файл, содержащий все переменные, которые мы могли бы использовать в файле terraform для легкого доступа. Переменные имеют 3 поля

  1. type : тип данных переменной.
  2. default : значение переменной по умолчанию, которое будет использоваться в конфигурации terraform.
  3. описание : описание переменной.

Затем мы добавляем еще один файл с именем terraform.tfvars, который тесно связан с упомянутым выше файлом переменных. Цель файла — заменить значения всех переменных в одном месте, которые можно использовать во всем файле конфигурации.

Теперь мы, наконец, начинаем создавать инфраструктуру.

Шаг 1. Создайте сегмент S3.

Приведенный выше код создает 2 вещи. Во-первых, ведро S3, куда будут попадать наши данные для обучения модели, а во-вторых, уведомление s3, которое позволяет нашему ведру s3 отправлять уведомление о событии в тему SNS.

Шаг 2. Создайте тему SNS

В приведенном выше коде мы делаем следующее:

  1. Создайте тему SNS для нашего модельного пайплайна
  2. Создайте политику раздела, которая позволяет S3 публиковать уведомление о событии в SNS.
  3. Создайте подписку SNS, которая отправляет сообщение из SNS в SQS.

Шаг 3. Создайте очередь SQS

Приведенный выше код делает следующее:

  1. Создайте очередь SQS для получения сообщения от SNS.
  2. Создайте очередь недоставленных сообщений, чтобы переместить в нее сообщения, которые не могут быть обработаны, для последующего изучения.
  3. Прикрепите политику к SQS, чтобы он мог получать сообщения из темы SNS.

Шаг 4. Создайте лямбда-функцию

Приведенный выше код выполняет следующие задачи

  1. Создайте лямбда-функцию для выполнения преобразований данных
  2. Создайте сопоставление между SQS и функцией для получения сообщения.

Шаг 5. Создайте роль и политику IAM

Блок кода выше делает следующее

  1. Создайте роль IAM для лямбда-функции
  2. Прикрепите политику SQS к роли, чтобы управлять сообщениями от SQS.
  3. Прикрепите политику SQS к роли для управления журналами.

Репозиторий кода:



Использованная литература: