Облачная инфраструктура для обработки данных

Развертывание платформы обработки и анализа данных на 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