Совместное использование моделей в рабочих областях
Внимание
Databricks рекомендует использовать модели в каталоге Unity для совместного использования моделей в рабочих областях. Подход, приведенный в этой статье, не рекомендуется.
Azure Databricks поддерживает совместное использование моделей в нескольких рабочих областях. Например, вы можете разрабатывать и записывать модель в рабочую область разработки, а затем обращаться к ней и сравнивать ее с моделями в отдельной рабочей области. Это полезная возможность, когда несколько групп совместно используют модели, или когда в организации есть несколько рабочих областей для различных этапов разработки. Для разработки и развертывания модели между рабочими областями Databricks рекомендует подход развертывания кода, где код обучения модели развертывается в нескольких средах.
В нескольких рабочих областях можно получить доступ к моделям в рабочих областях Azure Databricks с помощью удаленного реестра моделей. Например, специалисты по обработке и анализу данных могут получить доступ к реестру производственных моделей с доступом только для чтения для сравнения моделей разработки с текущими производственными моделями. Ниже показан пример настройки нескольких рабочих областей.
Доступ к удаленному реестру управляется маркерами. Каждый пользователь или скрипт, которым требуется доступ , создает личный маркер доступа в удаленном реестре и копирует этот маркер в диспетчер секретов своей локальной рабочей области. Каждый запрос API, отправленный в рабочую область удаленного реестра, должен включать маркер доступа; MLflow предоставляет простой механизм для указания секретов, используемых при выполнении операций реестра моделей.
Примечание.
В качестве рекомендации по обеспечению безопасности при проверке подлинности с помощью автоматизированных средств, систем, сценариев и приложений Databricks рекомендуется использовать личные маркеры доступа, принадлежащие субъектам-службам, а не пользователям рабочей области. Сведения о создании маркеров для субъектов-служб см. в разделе "Управление маркерами" для субъекта-службы.
Все методы клиентского и текучего API для реестра моделей поддерживаются в удаленных рабочих областях.
Требования
Чтобы использовать реестр моделей в разных рабочих областях, требуется клиент MLflow Python версии 1.11.0 или более поздней.
Примечание.
Этот рабочий процесс реализуется из логики в клиенте MLflow. Убедитесь, что среда, на которой запущен клиент, имеет доступ к сетевым запросам к рабочей области Azure Databricks, содержащей удаленный реестр моделей. Типичное ограничение, применяемое к рабочей области реестра, — это список разрешённых IP-адресов, который может запретить подключения от клиентов MLflow, работающих в кластере в другой рабочей области.
Настройка маркера API для удаленного реестра
- В рабочей области реестра моделей создайте маркер доступа.
- В локальной рабочей области создайте секреты для хранения маркера доступа и сведений о удаленной рабочей области:
- Создайте область секрета:
databricks secrets create-scope <scope>
. - Выберите уникальное имя для целевой рабочей области (здесь —
<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 для совместного использования моделей в рабочих областях.