Совместное использование моделей в рабочих областях

Внимание

Databricks рекомендует использовать модели в каталоге Unity для совместного использования моделей в рабочих областях. Подход, приведенный в этой статье, не рекомендуется.

Azure Databricks поддерживает совместное использование моделей в нескольких рабочих областях. Например, вы можете разрабатывать и записывать модель в рабочую область разработки, а затем обращаться к ней и сравнивать ее с моделями в отдельной рабочей области. Это полезная возможность, когда несколько групп совместно используют модели, или когда в организации есть несколько рабочих областей для различных этапов разработки. Для разработки и развертывания модели между рабочими областями Databricks рекомендует подход к развертыванию кода , в котором код обучения модели развертывается в нескольких средах.

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

Несколько рабочих областей

Доступ к удаленному реестру управляется маркерами. Каждый пользователь или скрипт, которым требуется доступ , создает личный маркер доступа в удаленном реестре и копирует этот маркер в диспетчер секретов своей локальной рабочей области. Каждый запрос API, отправленный в рабочую область удаленного реестра, должен включать маркер доступа; MLflow предоставляет простой механизм для указания секретов, используемых при выполнении операций реестра моделей.

Примечание.

В качестве рекомендации по обеспечению безопасности при проверке подлинности с помощью автоматизированных средств, систем, сценариев и приложений Databricks рекомендуется использовать личные маркеры доступа, принадлежащие субъектам-службам, а не пользователям рабочей области. Сведения о создании маркеров для субъектов-служб см. в разделе "Управление маркерами" для субъекта-службы.

Все методы клиентского и текучего API для реестра моделей поддерживаются в удаленных рабочих областях.

Требования

Чтобы использовать реестр моделей в разных рабочих областях, требуется клиент MLflow Python версии 1.11.0 или более поздней.

Примечание.

Этот рабочий процесс реализуется из логики в клиенте MLflow. Убедитесь, что среда, на которой запущен клиент, имеет доступ к сетевым запросам к рабочей области Azure Databricks, содержащей удаленный реестр моделей. Общим ограничением для рабочей области реестра выступает список разрешенных IP-адресов, в котором могут быть запрещены подключения от клиентов MLflow, работающих в кластере другой рабочей области.

Настройте маркер API для удаленного реестра

  1. В рабочей области реестра моделей создайте маркер доступа.
  2. В локальной рабочей области создайте секреты для хранения маркера доступа и сведений о удаленной рабочей области:
    1. Создайте область секрета: databricks secrets create-scope <scope>.
    2. Выберите уникальное имя для целевой рабочей области (здесь — <prefix>). Затем создайте три секрета:
      • databricks secrets put-secret <scope> <prefix>-host: введите имя узла для рабочей области реестра моделей. Например, https://westus.azuredatabricks.net/ или https://adb-5555555555555555.19.azuredatabricks.net/.
      • databricks secrets put-secret <scope> <prefix>-token: введите маркер доступа для рабочей области реестра моделей.
      • databricks secrets put-secret <scope> <prefix>-workspace-id: введите идентификатор рабочей области реестра моделей, который можно найти в URL-адресе любой страницы.

Укажите удаленный реестр

На основе области секрета и префикса имени, созданного для рабочей области удаленного реестра, можно создать универсальный код ресурса (URI) для реестра в следующем виде:

registry_uri = f'databricks://<scope>:<prefix>'

С помощью универсального кода ресурса (URI) можно указать удаленный реестр для методов текучего API, вызвав следующую функцию:

mlflow.set_registry_uri(registry_uri)

Или можно указать его явно при создании экземпляра MlflowClient:

client = MlflowClient(registry_uri=registry_uri)

В следующих рабочих процессах показаны примеры обоих подходов.

Зарегистрируйте модель в удаленном реестре

Для регистрации модели можно использовать API mlflow.register_model:

mlflow.set_registry_uri(registry_uri)
mlflow.register_model(model_uri=f'runs:/<run-id>/<artifact-path>', name=model_name)

Примеры для других методов регистрации моделей можно найти в записной книжке в конце этой страницы.

Примечание.

При регистрации модели в удаленной рабочей области там же в DBFS создается временная копию артефактов модели. Вы можете удалить эту копию после смены состояния версии модели на READY. Временные файлы можно найти в папке /dbfs/databricks/mlflow/tmp-external-source/<run-id>.

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

Использование модели из удаленного реестра

Вы можете загрузить и использовать версию модели в удаленном реестре с помощью методов mlflow.<flavor>.load_model. Но сначала нужно задать URI реестра:

mlflow.set_registry_uri(registry_uri)
model = mlflow.pyfunc.load_model(f'models:/<model-name>/Staging')
model.predict(...)

Кроме того, можно явно указать удаленный реестр в URI models:/:

model = mlflow.pyfunc.load_model(f'models://<scope>:<prefix>@databricks/<model-name>/Staging')
model.predict(...)

Также поддерживаются и другие вспомогательные методы доступа к файлам модели, например:

client.get_latest_versions(model_name)
client.get_model_version_download_uri(model_name, version)

Управление моделью в удаленном реестре

Вы можете выполнять любые действия с моделями в удаленном реестре, если у вас есть необходимые разрешения. Например, если у вас есть разрешения CAN MANAGE для модели, можно перенести этап версии модели или удалить модель с помощью MlflowClient методов:

client = MlflowClient(tracking_uri=None, registry_uri=registry_uri)
client.transition_model_version_stage(model_name, version, 'Archived')
client.delete_registered_model(model_name)

Пример записной книжки: реестр удаленных моделей

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

Пример записной книжки для реестра удаленных моделей

Получить записную книжку