Служба контейнеров Databricks для выделенных вычислительных ресурсов

Примечание.

Также доступна бета-версия служб контейнеров Databricks для вычислений в стандартном режиме доступа. См. Databricks Container Services для стандартных вычислительных ресурсов.

Службы контейнеров Databricks позволяют указать образ Docker при создании вычислительных ресурсов. Вот некоторые из вариантов использования:

  • Настройка библиотеки: Вы полностью контролируете системные библиотеки, которые хотите установить.
  • Эталонная контейнерная среда: ваш образ Docker — это жестко зафиксированная среда, которая никогда не изменится.
  • Интеграция Docker с CI/CD: вы можете интегрировать Azure Databricks с вашими конвейерами Docker CI/CD.

Вы также можете использовать образы Docker для создания пользовательских сред глубокого обучения на вычислительных ресурсах с устройствами GPU. Дополнительные сведения об использовании вычислительных ресурсов GPU в Databricks Container Services см. в разделе Databricks Container Services на вычислительных ресурсах GPU.

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

Требования

  • В рабочей области Azure Databricks должны быть включены службы контейнеров Databricks.
  • На вашем компьютере должен быть запущен актуальный демон Docker (протестированный и работающий с версией клиента/сервера 18.03.0-ce), а команда docker должна быть доступна в PATH.

Ограничения

  • Databricks Runtime для машинного обучения не поддерживает Databricks Container Services.
  • Чтобы получить доступ к томам в службах контейнеров Databricks, добавьте следующую конфигурацию в поле конфигурации Spark вычислителя: .
  • Чтобы получить доступ к федеративным хранилищам метаданных Hive в службах контейнеров Databricks, добавьте следующую конфигурацию в поле конфигурации Spark для вычислений: spark.databricks.unityCatalog.hms.federation.enabled true
  • 172.17.0.0/16 — это диапазон IP-адресов по умолчанию, используемый Docker. Чтобы предотвратить проблемы с подключением из-за конфликта IP-адресов, избегайте настройки ресурсов в этой подсети.
  • Службы контейнеров Databricks не поддерживают аутентификацию в блокноте.

Шаг 1. Создание базы

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

Вариант 1. Используйте базу, созданную Databricks.

В этом примере используется тег 16.4-LTS для образа, который нацелен на вычислительный ресурс с Databricks Runtime 16.4 LTS.

FROM databricksruntime/standard:16.4-LTS
...

Чтобы указать дополнительные библиотеки Python, такие как последняя версия Pandas и urllib, используйте версию pip для конкретного контейнера. Для контейнера databricksruntime/standard:16.4-LTS включите следующее:

RUN /databricks/python3/bin/pip install pandas
RUN /databricks/python3/bin/pip install urllib3

Базовые образы размещены на Docker Hub по адресу https://hub.docker.com/u/databricksruntime. Файлы Dockerfile, используемые для создания этих базовых образов, доступны по адресу https://github.com/databricks/containers.

Примечание.

Образы, размещённые на Docker Hub, с тегами, оканчивающимися на «-LTS», будут получать исправления. Все остальные изображения являются примерами и не исправляются регулярно.

Примечание.

Базовые образы databricksruntime/standard и databricksruntime/minimal не следует путать с не связанными с ними средами databricks-standard и databricks-minimal, входившими в состав больше не доступной среды выполнения Databricks Runtime с Conda (бета-версия).

Вариант 2. Создайте собственный базовый образ Docker

Вы также можете создать базовый образ Docker с нуля. Образ Docker должен соответствовать следующим требованиям:

  • JDK как Java в системеPATH. Требуемая версия зависит от целевой версии Databricks Runtime.
  • бить
  • iproute2 (ubuntu iproute)
  • coreutils (ubuntu coreutils)
  • procps (ubuntu procps)
  • Sudo (Ubuntu Sudo)
  • ACL (Ubuntu ACL), требуемый для последних версий Databricks Runtime, которые устанавливают библиотеки под выделенным libraries пользователем
  • Ubuntu Linux

Примечание.

Сопоставьте JDK с версией Java, используемой по умолчанию в целевой версии Databricks Runtime. Точную версию JDK, включенную в определенную среду выполнения, см. в заметках о выпуске для этой версии среды выполнения.

Для создания собственного образа с нуля необходимо создать виртуальную среду. Кроме того, необходимо включить пакеты, встроенные в вычислительные ресурсы Databricks, такие как Python и R. Чтобы приступить к работе, можно использовать соответствующий базовый образ:

  • Для R: databricksruntime/rbase
  • Для Python: databricksruntime/python
  • Для минимального образа, созданного Databricks: databricksruntime/minimal

Вы также можете обратиться к примерам файлов Dockerfile в GitHub.

Примечание.

Databricks рекомендует Ubuntu Linux. Однако вместо этой версии можно использовать Alpine Linux. Для использования Alpine Linux необходимо включить следующие файлы:

Кроме того, необходимо настроить Python, как показано в этом примере Dockerfile.

Предупреждение

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

Шаг 2: Отправьте базовый образ

Отправьте свой пользовательский базовый образ в реестр Docker. Этот процесс поддерживается с помощью следующих реестров:

Также должны работать другие реестры Docker, поддерживающие отсутствие проверки подлинности или обычную проверку подлинности.

Примечание.

Если вы используете Docker Hub для реестра Docker, убедитесь, что ограничения скорости соответствуют количеству вычислений, которые вы ожидаете запустить в течение шестичасового периода. Эти ограничения скорости отличаются для анонимных пользователей, а также пользователей, прошедших проверку подлинности без платной подписки и с платными подписками. Подробные сведения см. в документации по Docker. Если это ограничение будет превышено, вы получите ответ 429 Too Many Requests (Слишком много запросов).

Шаг 3. Запуск вычислений

Вы можете запустить вычислительные ресурсы с помощью пользовательского интерфейса или API.

Запуск вычислений с помощью пользовательского интерфейса

  1. На странице "Создание вычислений" укажите версию среды выполнения Databricks, которая поддерживает службы контейнеров Databricks.

  2. В разделе Advancedвыберите вкладку Docker.

  3. Выберите вариант Использовать собственный контейнер Docker.

  4. В поле URL-адрес образа Docker укажите свой пользовательский образ Docker.

    Примеры URL-адресов образов Docker:

    Реестр Формат тега
    Центр Docker <organization>/<repository>:<tag> (например, databricksruntime/standard:latest)
    Реестр контейнеров Azure <your-registry-name>.azurecr.io/<repository-name>:<tag>
  5. Выберите тип проверки подлинности. Секреты можно использовать для хранения значений имени пользователя и проверки подлинности паролей. См. проверки подлинности образа Docker.

Запуск вычислений с помощью API

  1. Сгенерируйте токен API.

  2. Используйте интерфейс командной строки Databricks для запуска вычислений с помощью пользовательской базы Docker.

    databricks clusters create \
    --cluster-name <cluster-name> \
    --node-type-id Standard_DS3_v2 \
    --json '{
      "num_workers": 0,
      "docker_image": {
        "url": "databricksruntime/standard:latest",
        "basic_auth": {
          "username": "<docker-registry-username>",
          "password": "<docker-registry-password>"
        }
      },
      "spark_version": "16.4.x-scala2.12"
    }'
    

проверка подлинности образа Docker

Требования к проверке подлинности зависят от типа образа Docker. Вы также можете использовать секреты для хранения имен пользователей и паролей проверки подлинности. См. раздел "Использование секретов для проверки подлинности".

  • Для общедоступных образов Docker не требуется включать сведения о проверке подлинности. В пользовательском интерфейсе установите проверку подлинности в значение по умолчанию. Для вызова API не включать поля basic_auth.
  • Для частных образов Docker для аутентификации используйте идентификатор субъекта-службы и пароль (или применимые секреты) в качестве имени пользователя и пароля.
  • Для реестра контейнеров Azure выполните проверку подлинности, используя идентификатор учетной записи службы и пароль (или применимые секреты) в качестве имени пользователя и пароля. Сведения о создании субъекта-службы см. в документации по аутентификации субъекта-службы в Реестр контейнеров Azure.

Использование секретов для проверки подлинности

Служба контейнеров Databricks поддерживает использование секретов для проверки подлинности. При создании вычислительного ресурса в пользовательском интерфейсе используйте поле проверки подлинности для выбора имени пользователя и пароля. Вместо того чтобы вводить имя пользователя или пароль в обычном тексте, введите секреты в формате {{secrets/<scope-name>/<dcs-secret>}}. Если вы используете API, введите секреты в полях basic_auth.

Для получения информации о создании секретов см. Управление секретами.

Использование скрипта инициализации

Службы контейнеров Databricks позволяют клиентам включать скрипты инициализации в контейнер Docker. В большинстве случаев следует избегать скриптов инициализации и вместо этого вносить изменения непосредственно через Docker (с помощью Dockerfile). Однако некоторые задачи должны выполняться при запуске контейнера, а не при его построении. Для их выполнения используйте скрипт инициализации.

Например, допустим, что вы хотите запустить демон безопасности в пользовательском контейнере. Установите и создайте управляющую программу в образе Docker с помощью конвейера создания образа. Затем добавьте скрипт инициализации, который запускает управляющую программу. В этом примере скрипт инициализации будет содержать строку наподобие systemctl start my-daemon.

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

"init_scripts": [
    {
        "file": {
            "destination": "file:/my/local/file.sh"
        }
    }
]

Для образов служб контейнеров Databricks можно также хранить скрипты инициализации в облачном хранилище.

При запуске вычислений, использующих службы контейнеров Databricks, выполните следующие действия.

  1. Поставщик облачных служб выдает виртуальные машины.
  2. Пользовательский образ Docker скачивается из вашего репозитория.
  3. Azure Databricks создает контейнер Docker на основе образа.
  4. Код Databricks Runtime копируется в контейнер Docker.
  5. Выполняются скрипты инициализации. См. статью "Что такое скрипты инициализации?".

Azure Databricks игнорирует примитивы CMD и ENTRYPOINT Docker.

Включить службы контейнеров

Администратор рабочей области может контролировать, включена ли служба контейнеров Databricks для рабочей области.

Администраторы рабочей области могут переключать включение службы контейнеров Databricks с помощью интерфейса командной строки Databricks. В теле запроса JSON укажите значение от enableDcs до true, как показано в следующем примере:

databricks workspace-conf set-status \
--json '{"enableDcs": "true"}'