Автоматически извлекайте данные из S3 для обучения или прогнозирования с помощью кода SKLearn.

Одна из самых простых, но полезных задач, которые может потребоваться выполнить команде Data Science, — это автоматические частые преобразования (или прогнозы) входящих данных. AWS предлагает большой набор инструментов для выполнения этой работы, но примеры, найденные в Интернете, часто слишком просты или слишком опережают то, что вам нужно.

В этом уроке мы будем использовать старый добрый набор данных Titanic (чтобы упростить задачу) и настроим лямбда-функцию, запускаемую EventBridge CRON, для обучения или создания прогноза.

Метод

SageMaker — это сервис AWS, созданный для выполнения любых задач машинного обучения. Он является частью группы инструментов искусственного интеллекта и предлагает замечательную библиотеку Python (SDK), на которой мы сейчас сосредоточимся.

Есть несколько способов, которыми вы можете работать:

  • Кодируйте все с нуля, используя собственные образы докеров (жесткий, более настраиваемый способ);
  • Используйте только встроенные модели (простой, негибкий способ);
  • Режим сценария (способ создания собственного кода), на котором мы сосредоточимся здесь.

Режим сценария

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

Секрет в том, что вы определите несколько системных путей и функций, которые будут действовать как мосты или порты между вашими файлами python и SageMaker, который, в свою очередь, будет создавать и завершать необходимые экземпляры для вас.

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

Давайте перейдем к этому

Несколько вещей, о которых вы должны хотя бы немного прочитать, прежде чем продолжить: boto3, S3, EC2 и Lambda. Вам также необходимо узнать, как создать роль IAM для своей учетной записи и настроить ее так, чтобы она доверяла (предполагалась) SageMaker и EC2. Более того, дайте полный доступ к SageMaker, Lambda и S3.

Код

Этот репозиторий содержит все файлы, используемые в этом примере, а также Jupyter Notebook, содержащий весь процесс за один запуск. Конечно, предпочтительнее развертывать файлы python вместо блокнотов, но вы можете использовать SageMaker Studio для планирования запусков блокнотов.

Основные файлы — «training.py» и «inference.py». Оба являются исполняемыми файлами, которые позже запустит наша лямбда-функция.

Внутри папки modules вы можете найти файлы кода, которые будут импортированы упомянутыми выше: «upload_to_s3.py», «preprocessing.py» и «model.py». Первый предназначен для отправки CSV-файла в корзину S3, но вы можете игнорировать его, если файл уже загружен туда. Второй и третий не требуют пояснений — помимо того факта, что они также содержат несколько переменных среды, отвечающих за хранение файлов обучения/тестирования/маринования внутри Экземпляры SageMaker. Функция model_fn() является специальной и будет использоваться SageMaker для обучения и логического вывода, поскольку она «наследует» такие методы, как «подгонка» и «прогнозирование» из среды SKLearn.

Обучение

Предварительная обработка

Когда вы открываете training.py — после выполнения аутентификации, запуска сеансов и загрузки файлов — вы обнаружите, что объект sklearn_processor создается из класса SKLearnProcessor. Когда для этого объекта SageMaker вызывается метод run, будет создан экземпляр, и данные будут загружены из S3 в переменные среды виртуальной машины, чтобы она могла запустить задание. Эти переменные представляют собой предопределенные пути, такие как /opt/ml/processing/input (проверьте preprocessing.py). Этот самый код получит CSV-файл в input_data_path, а дальше — только панды!

В конце этапа предварительной обработки SageMaker автоматически отправит файлы из папок экземпляра /opt/ml в корзину S3 с именем задания.

Обучение

Точно так же будет создан экземпляр объекта, но на этот раз с классом SKLearn. Когда для него вызывается метод fit(), вызывается файл model.py, и модель Random Forest обучается с предварительно обработанными данными. В конце модель сбрасывается внутрь машины для использования в прогнозировании, а также сохраняется в папке задания обучения (sm-training ‹datetime›) в расположении S3.

Убедитесь, что метод model_fn() задан правильно. Он распознается и импортируется SageMaker для логического вывода (ищите «entry_point» в inference.py).

Предсказание

Предсказание (или вывод, или пакетное преобразование) имеет другой этап предварительной обработки, но работает интуитивно: модель извлекается из S3 в экземпляре, созданном инстанцированным классом SKLearnModel, для нее вызывается метод transform(), и все. Затем экземпляр автоматически завершается.

лямбда

Теперь мы хотим, чтобы он запускался автоматически.

Шаг 1: Создайте среду Python со всеми вашими зависимостями и ваш код (должен быть Linux).

Если позже это не сработает или если вы не используете Linux, вам потребуется скомпилировать пакет в экземпляре Amazon Linux 2 EC2 и отправить совместимый файл layerzip ( зависимости) к вашей лямбда-функции.

Шаг 2: Создайте лямбда-функцию (Python 3.9, x86_64 и роль выполнения, которую вы создали для всего этого задания);

Шаг 3: Добавьте триггер к вашей лямбда-функции, выберите EventBridge и настройте выражение CRON для выполнения вашего кода.

Вот оно!

Я надеюсь, что это работает хорошо для вас. Пожалуйста, наслаждайтесь и сообщайте об ошибках.