Запускайте производственные задания Spark и обучайте модели машинного обучения в кластерах заданий Databricks.

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

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

Я начал использовать Databricks по двум причинам:

  1. Я хотел, чтобы за меня Spark управлял кто-то другой. Я не хотел тратить так много времени на эхо-систему Spark (установка, настройка, оптимизация и настройка и т. Д.).
  2. Мы использовали JupyterHub в Kubernetes в качестве игровой площадки. Управлять им было довольно сложно, особенно когда мы хотели, чтобы он был масштабируемым и запускал тяжелые задания Spark.

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

Выполнение производственных заданий на кластерах Databricks

Мы разработали специальный оператор воздушного потока Databricks для наших нужд, который мы используем для выполнения производственных заданий. Этот оператор воздушного потока создает один из двух типов кластеров для каждого задания по его типу и рабочей нагрузке:

  1. Стандартный кластер - кластеры Spark, содержащие от 3 до 512 узлов (автоматическое масштабирование и уменьшение), мы используем этот тип кластера для заданий Spark.
  2. Кластер с одним узлом - мы также запускаем нераспределенные алгоритмы обучения, в этом случае обычный многоузловой кластер не подходит.

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

Оператор знает, как выполнять каждое из заданий с правильными параметрами, в правильном типе кластера, управлять сбоями, повторными попытками и т. Д.
Создать кластер с помощью Databricks REST API просто, это пример запроса к создать кластер с одним узлом:

{
    "run_name": "my_run",
    "new_cluster": {
        "spark_version": "7.4.x-gpu-ml-scala2.12",
        "aws_attributes": {
            "instance_profile_arn": "my_instance_profile",
            "availability": "SPOT_WITH_FALLBACK",
            "zone_id": "my_zone",
            "ebs_volume_count": 1,
            "ebs_volume_size": 100},
    "num_workers": 0,
    "spark_conf": {
        "spark.master": "local[*]",
        "spark.databricks.cluster.profile": "singleNode"},
    "node_type_id": "p3.2xlarge",
    "spark_python_task": {
        "python_file": "s3://my-bucket/my-file.py",
        "parameters": []},
    "libraries": [{"pypi": {"package": "dill==0.3.1.1"}}],
    "max_retries": 1,
    "timeout_seconds": 36000
}

Вы можете найти дополнительную информацию о различных параметрах в конце сообщения [1].

Интегральные преимущества

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

Databricks Runtime
Databricks предлагает несколько доступных конфигураций среды выполнения, например «Databricks Runtime ML», которая автоматизирует создание кластера, оптимизированного для машинного обучения.
Эта конфигурация включает в себя большинство популярные библиотеки машинного обучения, такие как TensorFlow, PyTorch, Keras, XGBOOST, Scikit-Learn, Pandas и многие другие.
Это ускоряет время создания кластера, и я могу «штамповать» свои задания определенной конфигурацией среды выполнения. так что я могу снова использовать его в конвейерах вывода. Он обещает одинаковые версии библиотек между конвейером поезда и конвейером прогнозирования, что делает их совместимыми друг с другом.

Отладка проста
Можно отлаживать задания с помощью «Databricks-Connect» [2]. Его просто нужно установить в локальной виртуальной среде и настроить с помощью данных учетной записи Databricks.
Он позволяет выполнять отладку заданий удаленно в кластере и становится очень полезным, особенно когда мы хотим отлаживать задания на большом количестве данных, которые не соответствуют не умещается в памяти нашей локальной машины.

Простота использования ваших собственных пакетов Python
Можно установить пакеты Python в кластеры и получить к ним доступ из наших рабочих мест. Это упрощает использование внутреннего пакета, общих объектов и кода.
Можно установить пакеты из нескольких источников и с помощью пользовательского интерфейса или API.

Встроенная интеграция AWS и Azure
Существует интеграция между Databricks и AWS, а также Databricks и Azure. Мы можем использовать единый API для выполнения заданий в обоих облаках вместо того, чтобы строить эти интеграции на нашей стороне.

Блокноты и каталог данных
Доступны блокноты Jupyter с предварительно настроенным сеансом искры и готовыми возможностями визуализации.
Также можно легко и быстро выполнять тяжелые рабочие нагрузки. можно сохранить обработанные DataFrames в каталог данных и предоставить другим командам и коллегам доступ к ним с помощью своих записных книжек.

Заключение

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

Ссылки:
1.
Databricks Jobs API:
https://docs.databricks.com/dev-tools/api/latest/jobs.html

2. Databricks Connect:
https://docs.databricks.com/dev-tools/databricks-connect.html