В настоящее время обучение модели глубокого обучения (DL) для академических целей стало проще благодаря улучшениям сред DL. Однако для производственной среды есть некоторые проблемы, о которых компании должны заботиться до и после обучения своих моделей. Такие вопросы, как масштабируемость при предварительной обработке данных и моделях обучения, борьба с отклонением концепций в данных (больших данных), мониторинг их моделей и т. д., следует рассмотреть до разработки архитектуры DL.

Эта статья призвана помочь новичкам в настройке кластера Spark виртуальных машин для запуска конвейера TFX. Я пытался запустить простой конвейер в Spark; в моей будущей статье я расширим его, запустив компонент Trainer конвейера TFX на кластере Horovod-Spark. Я стараюсь собрать все требования максимально информативно и просто. Я надеюсь, что вы найдете это полезным.

Эта статья разделена на 3 основные части:

  • Предпосылки
  • Настройка рабочей среды
  • Запуск сервисов Essential Beam
  • Настройка параметра конвейера
  • Работающий конвейер

Предпосылки

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

Требования и наши совместимые версии следующие:

1- Питон = 3,7

2- Искра = spark-3.1.2-bin-hadoop2.7

3- ТФХ = 1.3.1

4- Tensorflow = 2.3.1 (эта версия совместима с Horovod)

В отличие от других подобных статей, я настроил этот кластер на локальных виртуальных машинах (3 узла), вы можете найти другие работы, основанные на контейнерах. Так что думаю вам будет проще настроить такую ​​среду на своем ноутбуке.

Настройка рабочей среды

Еще один важный момент, о котором вы должны позаботиться, это то, что ваш pipe_root должен быть сохранен в общем хранилище между всеми узлами. Так что для определения общего хранилища эта ссылка может быть полезна. Я также предлагаю вам отключить брандмауэры ваших компьютеров перед запуском конвейера.

Для установки Python и его пакетов я рекомендую также использовать Anaconda для управления вашей средой. После установки Anaconda лучше создать новую среду в вашем кластере (для всех 3 узлов).

Анаконда

conda create --name py37 python=3.7

Запуск сервисов Essential Beam

Согласно документации TFX, некоторые компоненты TFX зависят от Apache Beam для распределенной обработки данных, также TFX использует BeamRunners для организации и запуска своего конвейера. SparkRunner, который является одним из BeamRunner, может использоваться для выполнения конвейеров через Apache Spark. В этом подходе я использую SparkRunner для выполнения конвейера TFX. В документации Beam есть некоторые проблемы, поэтому я надеюсь их решить.

Прочитав Документ по архитектуре Beam, я понял, что перед отправкой пайплайна TFX у меня должно быть несколько сервисов. Следующая картинка иллюстрирует их лучше. Эти услуги следующие:

  • Служба API заданий (от клиента к исполнителю)
  • API Fn (от бегуна к рабочим)

Конвейер и его артефакты передаются исполнителю через Job API. Таким образом, вы должны запустить JobService перед отправкой вашего пайплайна. Чтобы запустить конечную точку JobService, у вас также есть другой вариант, который объявлен в документации; Во-первых, вы можете скачать beam-runners-spark-job-server из центрального репозитория maven. Я предлагаю отправить файл jar сервера заданий в мастер (Spark). При запуске JobServerDrive он будет прослушивать порт 8099 (порт по умолчанию).

spark-submit  --master spark://YOUR_Master_IP:7077  beam-runners-spark-3-job-server-2.34.0.jar  --job-host YOUR_Master_IP --spark-master-url spark://YOUR_Master_IP:7077

Бегун управляет рабочими с помощью Fn API. Поскольку я хочу запустить конвейер в кластере Spark, SDK_Harness должен быть установлен как ВНЕШНИЙ (ПРОЦЕСС). Для этого я сначала собрал исходный код луча Apache и извлек загрузочный файл из этого пути (SDKs/python/container/build/target/launcher/linux_amd64). В каждом рабочем я запускал службу SDK с помощью следующей команды, но было действительно забавно, что мне пришлось поместить свой загрузочный файл в /opt/apache/beam/! Я поделился этим файлом, созданным для python3.7, на моем Github.

/opt/apache/beam/boot -worker_pool

На каждом рабочем я выполнил указанный выше сервис. Когда служба SDK запускается, она будет прослушивать порт 50000 (порт по умолчанию).

Настройка параметра конвейера

При выполнении вашего конвейера с помощью Spark Runner вы должны учитывать следующие параметры конвейера (ОЧЕНЬ ТРУДНО НАЙТИ ТАКИЕ ВАРИАНТЫ В ДРУГОМ МЕСТЕ)

Работающий конвейер

Теперь ваша среда полностью готова для запуска конвейера. В следующем репозитории я поделился всеми необходимыми файлами для настройки и запуска подхода, описанного в статье.



В приведенном выше коде вам нужно только установить YOUR_SHARED_STORAGE_PATH и YOUR_MASTER_IP на основе вашей конфигурации. Затем вам следует запустить только файл starter.py для отправки конвейера на spark-cluster.

python starter.py

Вот и все! Теперь вы запустили конвейер TFX в кластере Spark с несколькими узлами.

Это была моя первая статья, так что оставляйте свои предложения по улучшению. Не стесняйтесь, напишите мне.

В конце концов, я благодарен моему большому другу и руководителю проекта Ходжат Гохаргази, который действительно поддерживал меня в поиске проблем и давал мне свои важные советы, чтобы продвигать эту работу сегодня и всегда.

С наилучшими пожеланиями✌️