В этой серии блогов мы рассмотрим операционализацию модели машинного обучения с использованием бессерверной инфраструктуры AWS. Цель состоит в том, чтобы построить конвейер машинного обучения, который обучает и настраивает модель перед созданием конечной точки модели, которую можно использовать для получения прогнозов.
В рамках этой серии основное внимание уделяется максимально возможной автоматизации, чтобы уменьшить количество человеческих ошибок и предоставить эффективный способ операционализации модели машинного обучения с использованием AWS. Хотя мы рассмотрим конвейер в AWS, аналогичный конвейер можно построить на любой облачной платформе (включая платформу Google Cloud, Azure и т. д.), поскольку они имеют очень похожие сервисы.
Для демонстрационных целей мы будем использовать следующие сервисы в A.W.S:
- S3
- Соцсети
- SQS
- Лямбда-функции
- Обучение мудрецов
- Оптимизация гиперпараметров Sagemaker
- Конечная точка Sagemaker
- Шлюз API Amazon
- ИАМ
Кроме того, мы будем использовать Terraform для создания инфраструктуры в виде кода. Это помогает снизить вероятность ошибок при перемещении модели, скажем, от разработки к производству.
Мы рассмотрим назначение каждой услуги по мере продвижения в блоге, чтобы не чувствовать себя перегруженными обилием сухой информации.
Схема архитектуры
Мы будем работать над следующей архитектурой:
Без дальнейших церемоний, давайте начнем.
Инфраструктура
Личное примечание. Как специалист по данным, одной из областей, о которых я никогда не беспокоился, была инфраструктура. Мой опыт был в основном связан с ноутбуками Jupyter, что было хорошо, однако у меня был недостаток, заключающийся в том, что я не мог ввести в действие созданную мной модель. Вскоре я начал понимать важность наличия эффективной инфраструктуры, которая не только помогла мне понять мир ML Ops (операций машинного обучения), но и сделала меня лучшим специалистом по данным, помогая мне избегать нереалистичных моделей, которые казались справедливыми в ноутбуках Jupyter. .
Итак, давайте начнем с создания инфраструктуры, необходимой для конвейера. Мы будем использовать Terraform — программный инструмент инфраструктура как код (IaaC) с открытым исходным кодом.
Почему инфраструктура — это код?
Справедливо задаться вопросом, зачем использовать инфраструктуру как код, когда мы могли бы использовать сервисы AWS с помощью консоли? Причина проста,
- Во-первых, допустим, мы разрабатываем конвейер в среде разработки. Когда конвейер нас устраивает, мы перемещаем конвейер в тестовую, а затем в производственную среду. Представьте, что мы используем сотни сервисов, тогда нам придется заново создавать все эти сервисы вручную сначала в тестовой среде, а затем в среде разработки. Это утомительная и трудоемкая задача.
- Во-вторых, с сотнями сервисов, которые необходимо создавать несколько раз, существует большая вероятность ошибок, которые могут возникнуть, и их будет очень сложно отладить, если делать это вручную.
- Наконец, если мы создаем сервисы вручную, мы не можем использовать методы контроля версий, например, с помощью Git. Инфраструктура как код (Iaac) весьма полезна в этом аспекте.
Чтобы узнать о том, почему Iaac, нажмите здесь.
Примечание. Мы используем terraform для реализации инфраструктуры, однако это не единственный инструмент на рынке. Поскольку мы используем AWS, мы могли бы использовать AWS Cloudformation — еще один сервис IaaC от AWS. Мне лично нравится использовать terraform из-за его возможностей интеграции с несколькими облаками.
Начнем строить инфраструктуру.
Основываясь на приведенной выше архитектуре, нам нужно создать следующее
- Корзина S3, куда могут попасть данные
- Раздел SNS, в котором корзина s3 отправляет уведомление о событии каждый раз, когда файл попадает в s3
- Очередь SQS, которая получает сообщение от SNS и отправляет событие в функцию Lambda.
Для простоты блога мы просто рассмотрим первую комбинацию S3, SNS, SQS и лямбда-функции, которая отвечает за преобразование данных, когда данные попадают в корзину S3. Другие комбинации для вызова модели и создания конечной точки модели могут применяться аналогичным образом.
Во-первых, мы загружаем поставщика terraform, который используется для взаимодействия с облачным сервисом. Поскольку мы взаимодействуем с AWS, мы можем загрузить его, используя следующий код.
Далее нам нужно создать файл, содержащий все переменные, которые мы могли бы использовать в файле terraform для легкого доступа. Переменные имеют 3 поля
- type : тип данных переменной.
- default : значение переменной по умолчанию, которое будет использоваться в конфигурации terraform.
- описание : описание переменной.
Затем мы добавляем еще один файл с именем terraform.tfvars, который тесно связан с упомянутым выше файлом переменных. Цель файла — заменить значения всех переменных в одном месте, которые можно использовать во всем файле конфигурации.
Теперь мы, наконец, начинаем создавать инфраструктуру.
Шаг 1. Создайте сегмент S3.
Приведенный выше код создает 2 вещи. Во-первых, ведро S3, куда будут попадать наши данные для обучения модели, а во-вторых, уведомление s3, которое позволяет нашему ведру s3 отправлять уведомление о событии в тему SNS.
Шаг 2. Создайте тему SNS
В приведенном выше коде мы делаем следующее:
- Создайте тему SNS для нашего модельного пайплайна
- Создайте политику раздела, которая позволяет S3 публиковать уведомление о событии в SNS.
- Создайте подписку SNS, которая отправляет сообщение из SNS в SQS.
Шаг 3. Создайте очередь SQS
Приведенный выше код делает следующее:
- Создайте очередь SQS для получения сообщения от SNS.
- Создайте очередь недоставленных сообщений, чтобы переместить в нее сообщения, которые не могут быть обработаны, для последующего изучения.
- Прикрепите политику к SQS, чтобы он мог получать сообщения из темы SNS.
Шаг 4. Создайте лямбда-функцию
Приведенный выше код выполняет следующие задачи
- Создайте лямбда-функцию для выполнения преобразований данных
- Создайте сопоставление между SQS и функцией для получения сообщения.
Шаг 5. Создайте роль и политику IAM
Блок кода выше делает следующее
- Создайте роль IAM для лямбда-функции
- Прикрепите политику SQS к роли, чтобы управлять сообщениями от SQS.
- Прикрепите политику SQS к роли для управления журналами.