Облачная инфраструктура для обработки данных
Развертывание платформы обработки и анализа данных на AWS: выполнение экспериментов в контейнерах (часть II)
Пошаговое руководство по развертыванию платформы Data Science на AWS с программным обеспечением с открытым исходным кодом
В нашем предыдущем посте мы увидели, как настроить AWS Batch, и протестировали нашу инфраструктуру, выполнив задачу, которая запускала контейнер, ждала 3 секунды и закрывалась.
В этом посте мы будем использовать существующую инфраструктуру, но на этот раз мы выполним более интересный пример.
Мы отправим наш код в AWS, создав контейнер и сохранив его в Amazon ECR, сервисе, который позволяет нам хранить образы Docker.
Если вы хотите быть в курсе моих материалов по науке о данных. Следуйте за мной на Medium или Twitter. Спасибо за прочтение!
Аутентификация с помощью aws
CLI
Мы снова будем использовать aws
CLI для настройки инфраструктуры, поэтому убедитесь, что вы прошли аутентификацию и имеете достаточные разрешения:
Проверка Docker
Мы будем использовать Docker для этой части, поэтому убедитесь, что он запущен и работает:
Вывод:
Создание репозитория Amazon ECR
Сначала мы создаем репозиторий, в котором будут размещаться наши образы Docker:
Создайте репозиторий ECR:
Вывод:
Приведенная выше команда напечатает URI репозитория и назначит его следующей переменной, так как он понадобится нам позже:
Получение примера кода
Теперь мы будем использовать два инструмента с открытым исходным кодом (Ploomber и Soopervisor), чтобы написать нашу вычислительную задачу, создать образ Docker, отправить его в ECR и запланировать задание в AWS Batch.
Ставим пакеты:
Примечание. Мы рекомендуем устанавливать их в виртуальной среде.
Возьмем пример. В этом примере обучается и оценивается модель машинного обучения:
Вывод:
Смотрим файлы:
Вывод:
Конструкция представляет собой типичный проект Ploomber. Ploomber позволяет легко организовывать вычислительные рабочие процессы в виде функций, скриптов или блокнотов и выполнять их локально. Чтобы узнать больше, ознакомьтесь с документацией Ploomber.
С другой стороны, Soopervisor позволяет экспортировать проект Ploomber и выполнять его в облаке.
Следующая команда укажет Soopervisor создать необходимые файлы, чтобы мы могли экспортировать их в AWS Batch:
Вывод:
===================Loading DAG=================== No pipeline.aws-env.yaml found, looking for pipeline.yaml instead Found /Users/Edu/dev/ploomber.io/raw/ds-platform-part-ii/example/pipeline.yaml. Loading... Adding /Users/Edu/dev/ploomber.io/raw/ds-platform-part-ii/example/aws-env/Dockerfile... ===================Done=================== Fill in the configuration in the 'aws-env' section in soopervisor.yaml then submit to AWS Batch with: soopervisor export aws-env Environment added, to export it: $ soopervisor export aws-env To force execution of all tasks: $ soopervisor export aws-env --mode force
soopervisor add
создаст файл soopervisor.yaml
и папку aws-batch
.
Папка aws-batch
содержит Dockerfile
(который нам нужен для создания образа Docker):
Вывод:
Файл soopervisor.yaml
содержит параметры конфигурации:
Вывод:
Здесь нужно настроить несколько параметров, мы создали небольшой скрипт для создания файла конфигурации:
job_queue
: имя вашей очереди заданийaws_region
: регион, в котором находится ваша инфраструктура AWS Batch.repository
: URI репозитория ECR
Вот значения для моей инфраструктуры (замените на свои):
Примечание. Если у вас нет имени очереди заданий, его можно получить в консоли AWS (убедитесь, что вы находитесь в нужном регионе).
Давайте загрузим служебный скрипт для облегчения создания файлов конфигурации:
Вывод:
Создайте файл конфигурации soopervisor.yaml
:
Вывод:
Вот как выглядит файл:
Вывод:
Теперь давайте воспользуемся soopervisor export
для выполнения команды в AWS Batch. Такая команда сделает для нас несколько вещей:
- Создайте контейнер Docker
- Отправьте его в репозиторий Amazon ECR.
- Отправка заданий в AWS Batch
Нам нужно установить boto3
, так как это зависит от отправки заданий в AWS Batch:
Аутентифицируйтесь с помощью Amazon ECR, чтобы мы могли отправлять изображения:
Вывод:
Давайте теперь экспортируем проект. Имейте в виду, что эта команда займет несколько минут:
Если все пойдет хорошо, вы увидите что-то вроде этого:
Если у вас возникли проблемы с командой soopervisor export
или вы не можете нажать на ECR, присоединяйтесь к нашему сообществу, и мы вам поможем!
После завершения выполнения команды задание будет отправлено в AWS Batch. Давайте воспользуемся интерфейсом командной строки aws
для вывода списка заданий, отправленных в очередь:
Вывод:
Через минуту вы увидите, что задача отображается как SUCCEEDED
(она будет отображаться как RUNNABLE
, STARTING
или RUNNING
, если она не завершена).
Однако есть одна загвоздка: AWS Batch запустил наш код, но вскоре после этого закрыл инстанс EC2, поэтому у нас больше нет доступа к выходным данным.
Чтобы исправить это, мы добавим в наш проект клиент S3, чтобы все выходные данные сохранялись.
Создание корзины S3 для хранения выходных данных
Давайте сначала создадим корзину в S3. Имена корзин S3 должны быть уникальными, вы можете запустить следующий фрагмент в своем терминале или выбрать уникальное имя и назначить его переменной BUCKET_NAME
:
Вывод:
Создать ведро:
Вывод:
Добавление клиента в нашу воронку
Ploomber позволяет нам указать корзину S3, и он позаботится о загрузке всех выходных данных для нас. Нам нужно только создать короткий файл. Скрипт generate.py
может создать его для нас:
Вывод:
Нам нужно настроить наш файл pipeline.yaml
, чтобы он загружал артефакты в S3. Давайте воспользуемся файлом generate.py
, чтобы он сделал это за нас:
Кроме того, давайте добавим boto3
к нашим зависимостям, так как мы будем вызывать его для загрузки артефактов в S3:
Предоставление пакетной службе AWS разрешений на доступ к корзине
Давайте добавим разрешения S3 к нашим пакетным задачам AWS. Создайте политику:
Вывод:
Примените это:
Выполнение рабочей нагрузки
Теперь мы готовы выполнить нашу задачу на AWS Batch!
Давайте удостоверимся, что мы можем нажать на ECR:
Вывод:
Отправить задание еще раз:
Обратите внимание, что на этот раз команда soopervisor export
работает намного быстрее, так как она кэширует наш образ Docker!
Проверяем статус задачи:
Вывод:
Через минуту вы должны увидеть его как SUCCEEDED
.
Проверяем содержимое нашей корзины, мы увидим вывод задачи (файл .parquet
):
Вывод:
Подведение итогов
В этом посте мы узнали, как загрузить наш код и выполнить его в AWS Batch через образ Docker. Мы также настроили AWS Batch для чтения и записи корзины S3. С этой конфигурацией мы можем начать проводить масштабируемые эксперименты по науке о данных, не беспокоясь о поддержке инфраструктуры!
В следующем (и последнем) посте этой серии мы увидим, как легко генерировать сотни экспериментов и получать результаты.
Если вы хотите первыми узнать, когда выйдет финальная часть; Следите за нами в Twitter, LinkedIn или подпишитесь на нашу рассылку!
Эпилог: очистка инфраструктуры
Если вы хотите удалить инфраструктуру, которую мы создали в этом посте, вот команды.
Удалить репозиторий ECR:
Вывод:
Удалить корзину S3:
Вывод:
Первоначально опубликовано на ploomber.io