Автоматически извлекайте данные из 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 для выполнения вашего кода.
Вот оно!
Я надеюсь, что это работает хорошо для вас. Пожалуйста, наслаждайтесь и сообщайте об ошибках.