Проект с SageMaker Studio Lab и Docker
Цель этого поста — запустить рабочий процесс обработки данных на AWS, а затем отправить его с помощью Docker, тем самым создав сквозную задачу машинного обучения.
Кроме того, я буду уделять больше внимания тому, как докеризировать проект по науке о данных, а не тому, почему этот проект крут. При этом существует множество преимуществ использования Docker:
- Портативность
- Производительность
- Ловкость
- Изоляция
- Масштабируемость
С другой стороны, AWS SageMaker Studio Lab предоставляет возможности SageMaker без необходимости явно определять каждый подпроцесс.
Выбор набора данных
Для этого проекта мы будем использовать 34 686 770 отзывов Amazon от 6 643 669 пользователей о 2 441 053 продуктах из Стэнфордского проекта сетевого анализа (SNAP). Данные распространяются по лицензии BSD и бесплатны как для академического, так и для коммерческого использования.
Используемые данные являются подмножеством этих данных, найденных на Kaggle. Он содержит 1 800 000 обучающих выборок, 200 000 тестовых выборок, так что каждый отзыв может быть либо «положительным», либо «отрицательным».
Поскольку это большой набор данных, и мы работаем с AWS, данные хранятся в корзине S3. Кроме того, убедитесь, что корзина и сервисы AWS, которые вы используете, находятся в одном регионе. Для этого проекта выбран регион us-east-2 (Восточный Огайо, США).
IAM: знай свою роль
При работе с AWS одной из распространенных ошибок является отсутствие необходимых разрешений или незнание объема ваших разрешений. Перейдите в Управление идентификацией и доступом (IAM), создайте роль и прикрепите к ней следующие политики:
- AmazonS3FullAccess
- AmazonSageMakerПолный доступ
- AWSGlueConsoleSageMakerNotebookFullAccess
- AWSImageBuilderFullAccess
- AmazonSageMakerPipelinesИнтеграция
- AmazonSageMakerGroundTruthExecution
Почему SageMaker Studio Lab?
SageMaker Studio Lab предоставляет облегченную среду для выполнения задач быстрее, чем в SageMaker. У него есть некоторые недостатки, такие как отсутствие доступа к AWS Data Wrangler и масштабное распределенное обучение.
Чтобы начать работу с SageMaker Studio Lab, все, что вам нужно, — это учетная запись AWS и подождать около 24 часов, чтобы ваша учетная запись была одобрена. Оказавшись внутри лаборатории, среда выглядит как ноутбук Jupyter.
Вы можете запросить бесплатную учетную запись здесь: https://studiolab.sagemaker.aws/
Начало сеанса
Приведенный ниже фрагмент кода представляет собой стандартный способ подключения к вашим ресурсам AWS и определяет основные ресурсы. Думайте об этом как о Шебанге для начала работы с AWS.
Этапы предварительной обработки
В SageMaker Studio первым шагом является написание сценария предварительной обработки, подобного показанному ниже. Этот сценарий и все последующие сценарии должны содержать все необходимые библиотеки и иметь возможность запускаться независимо.
Более того, в рабочем процессе машинного обучения нужно принять такое мышление: «он будет работать на чьем-то другом компьютере». Следовательно, крайне важно, чтобы то, что написано в среде Jupyter Notebook, могло содержаться в кратком сценарии Python.
Тем, кто только начинает работать с SageMaker, не забудьте придерживаться предписанного формата каталога: /opt/ml/…. На самом деле /opt/ml и все его подкаталоги зарезервированы SageMaker в соответствии с документацией. Например, /opt/ml/model/ — это каталог, в который вы записываете модель, которую генерирует ваш алгоритм.
Сценарий обучения
После предварительной обработки следует обучение, которое, как и в предыдущем разделе, содержится в сценарии. Конкретная модель не так важна, как правильно настроенный рабочий процесс. Как только модель заработает, как задумано, не стесняйтесь подключать выбранный вами алгоритм.
Оценка модели
Данные идеально сбалансированы: 50% положительных и 50% отрицательных. Поэтому точность является достаточным показателем. Точность и полнота также включены, чтобы выявить любые проблемы в прогнозировании.
До любой оптимизации параметров точность колеблется на уровне 80%, как и точность/отзыв.
Обработка заданий с помощью FrameworkProcessor
Модуль обработки SageMaker позволяет нам добавлять зависимости с помощью процессора FrameWork, который позволяет запускать набор сценариев Python как часть задания обработки. Кроме того, он дает процессору доступ к нескольким сценариям в каталоге вместо указания только одного сценария.
Доставка в Докер
Теперь, когда наш рабочий процесс идет гладко, пришло время отправлять! Сначала создайте каталог с именем docker внутри лаборатории и напишите Dockerfile для создания контейнера обработки:
Следующий шаг — создание контейнера с помощью команды docker, которая создает Elastic Registry Container (ECR) и отправляет образ docker:
P.S. Если вы используете компьютер Apple M1 или новее, не забудьте явно указать свою платформу при создании образа Docker.
Запуск Docker-контейнера
Сначала мы вызываем класс ScriptProcessor, который позволяет запускать команду внутри контейнера, а теперь мы можем запускать те же сценарии, что и раньше, за исключением того, что они находятся внутри контейнера докеров.
Вот и все, мы успешно выполнили задачу обработки в контейнере докеров. Контейнеры для обучения и оценки не показаны для краткости, так как они выполняют аналогичные действия.
Заключение
С помощью сервисов AWS и Docker мы можем поместить код Python в контейнер и превратить рабочий процесс обработки данных в продукт.
Если вам интересно увидеть весь код вместе с выводами для проверки вашей собственной работы, ознакомьтесь с репозиторием Github ниже: