В настоящее время обучение модели глубокого обучения (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 с несколькими узлами.
Это была моя первая статья, так что оставляйте свои предложения по улучшению. Не стесняйтесь, напишите мне.
В конце концов, я благодарен моему большому другу и руководителю проекта Ходжат Гохаргази, который действительно поддерживал меня в поиске проблем и давал мне свои важные советы, чтобы продвигать эту работу сегодня и всегда.
С наилучшими пожеланиями✌️