Управление жизненным циклом модели в каталоге Unity

Внимание

  • В этой статье описаны модели в каталоге Unity, которые Databricks рекомендует управлять и развертывать модели. Если рабочая область не включена для каталога Unity, функциональные возможности на этой странице недоступны. Вместо этого см. раздел "Управление жизненным циклом модели" с помощью реестра моделей рабочей области. Инструкции по обновлению из реестра моделей рабочей области в каталог Unity см. в разделе "Миграция рабочих процессов и моделей в каталог Unity".
  • Модели в каталоге Unity недоступны в Azure для государственных организаций регионах.

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

К ключевым функциям моделей в каталоге Unity относятся:

  • Имена и управление моделями, поэтому вы можете группировать и управлять моделями на уровне среды, проекта или группы (предоставление специалистам по обработке и анализу данных доступ только для чтения к рабочим моделям).
  • Отслеживание хронологии происхождения модели (эксперимент MLflow и запуск модели в заданное время).
  • Обслуживание моделей.
  • Управление версиями модели.
  • Развертывание модели с помощью псевдонимов. Например, помечайте версию модели "Чемпион" в каталоге prod .

Если каталог рабочей области по умолчанию настроен для каталога в каталоге Unity, модели, зарегистрированные с помощью API MLflow, например mlflow.<model-type>.log_model(..., registered_model_name) или mlflow.register_model(model_uri, name) зарегистрированы в каталоге Unity по умолчанию.

В этой статье содержатся инструкции для моделей в пользовательском интерфейсе каталога Unity и API.

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

Требования

  1. Каталог Unity должен быть включен в рабочей области. См. статью "Начало работы с каталогом Unity" для создания хранилища метаданных каталога Unity, включения его в рабочей области и создания каталога. Если каталог Unity не включен, можно по-прежнему использовать классический реестр моделей рабочей области.

  2. Рабочая область должна быть присоединена к хранилищу метаданных каталога Unity, поддерживающим наследование привилегий. Это верно для всех хранилищ метаданных, созданных после 25 августа 2022 года. Если выполняется в более старом хранилище метаданных, следуйте инструкциям по обновлению.

  3. Для выполнения команд в кластере необходимо иметь доступ к каталогу Unity.

  4. Для создания новых зарегистрированных моделей требуется CREATE_MODEL привилегия в схеме, а также USE SCHEMAUSE CATALOG привилегии схемы и его заключенного каталога. CREATE_MODEL— это новая привилегия уровня схемы, которую можно предоставить с помощью пользовательского интерфейса каталога Обозреватель или команды SQL GRANT, как показано ниже.

    GRANT CREATE_MODEL ON SCHEMA <schema-name> TO <principal>
    

Обновление рабочих нагрузок обучения до каталога Unity

В этом разделе содержатся инструкции по обновлению существующих рабочих нагрузок обучения до каталога Unity.

Установка клиента Python MLflow

Вы также можете использовать модели в каталоге Unity в Databricks Runtime 11.3 LTS и выше, установив последнюю версию клиента Python MLflow в записной книжке, используя приведенный ниже код.

%pip install --upgrade "mlflow-skinny[databricks]"
dbutils.library.restartPython()

Настройка клиента MLflow для доступа к моделям в каталоге Unity

По умолчанию клиент Python MLflow создает модели в реестре моделей рабочих областей Databricks. Чтобы обновить модели в каталоге Unity, настройте клиент MLflow:

import mlflow
mlflow.set_registry_uri("databricks-uc")

Примечание.

Если каталог рабочей области по умолчанию находится в каталоге Unity (а неhive_metastore) и выполняется кластер с помощью Databricks Runtime 13.3 LTS или более поздней версии (Databricks Runtime 15.0 или более поздней версии в регионах Azure), модели автоматически создаются и загружаются из каталога по умолчанию без необходимости настройки. Изменение поведения для других версий среды выполнения Databricks не изменяется. Небольшое количество рабочих областей, в которых каталог по умолчанию был настроен для каталога в каталоге Unity до января 2024 г., а реестр моделей рабочей области использовался до января 2024 г. исключен из этого поведения.

Обучение и регистрация моделей, совместимых с каталогом Unity

Необходимые разрешения. Чтобы создать новую зарегистрированную модель, вам потребуются CREATE_MODELUSE SCHEMA права и привилегии для заключающей схемы и USE CATALOG привилегии в заключенном каталоге. Чтобы создать новые версии модели в зарегистрированной модели, необходимо быть владельцем зарегистрированной модели и иметь USE SCHEMAUSE CATALOG права на схему и каталог, содержащий модель.

Версии модели машинного обучения в UC должны иметь сигнатуру модели. Если вы еще не регистрируете модели MLflow с сигнатурами в рабочих нагрузках обучения моделей, можно либо:

  • Используйте автологирование Databricks, которое автоматически регистрирует модели с сигнатурами для многих популярных платформ машинного обучения. См. поддерживаемые платформы в документации по MLflow.
  • С помощью MLflow 2.5.0 и более поздних версий можно указать входной пример в mlflow.<flavor>.log_model вызове, а подпись модели автоматически выводится. Дополнительные сведения см. в документации по MLflow.

Затем передайте трехуровневые имена модели в API MLflow в форме <catalog>.<schema>.<model>.

Примеры, приведенные в этом разделе, создают и получают доступ к моделям в схеме ml_team в каталоге prod .

Примеры обучения модели в этом разделе создают новую версию модели и регистрируют ее в каталоге prod . prod Использование каталога не обязательно означает, что версия модели обслуживает рабочий трафик. Включающей каталог, схему и зарегистрированную модель модели модель отражает ее среду () и связанные правила управления (prodнапример, привилегии можно настроить таким образом, чтобы только администраторы могли удалять из prod каталога), но не его состояние развертывания. Для управления состоянием развертывания используйте псевдонимы модели.

Регистрация модели в каталоге Unity с помощью автолога

from sklearn import datasets
from sklearn.ensemble import RandomForestClassifier

# Train a sklearn model on the iris dataset
X, y = datasets.load_iris(return_X_y=True, as_frame=True)
clf = RandomForestClassifier(max_depth=7)
clf.fit(X, y)

# Note that the UC model name follows the pattern
# <catalog_name>.<schema_name>.<model_name>, corresponding to
# the catalog, schema, and registered model name
# in Unity Catalog under which to create the version
# The registered model will be created if it doesn't already exist
autolog_run = mlflow.last_active_run()
model_uri = "runs:/{}/model".format(autolog_run.info.run_id)
mlflow.register_model(model_uri, "prod.ml_team.iris_model")

Регистрация модели в каталоге Unity с автоматическим выводом сигнатуры

Поддержка автоматически выводимых подписей доступна в MLflow версии 2.5.0 и выше и поддерживается в Databricks Runtime 11.3 LTS ML и выше. Чтобы использовать автоматически выведенные подписи, используйте следующий код, чтобы установить последний клиент Python MLflow в записной книжке:

%pip install --upgrade "mlflow-skinny[databricks]"
dbutils.library.restartPython()

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

from sklearn import datasets
from sklearn.ensemble import RandomForestClassifier

with mlflow.start_run():
    # Train a sklearn model on the iris dataset
    X, y = datasets.load_iris(return_X_y=True, as_frame=True)
    clf = RandomForestClassifier(max_depth=7)
    clf.fit(X, y)
    # Take the first row of the training dataset as the model input example.
    input_example = X.iloc[[0]]
    # Log the model and register it as a new version in UC.
    mlflow.sklearn.log_model(
        sk_model=clf,
        artifact_path="model",
        # The signature is automatically inferred from the input example and its predicted output.
        input_example=input_example,
        registered_model_name="prod.ml_team.iris_model",
    )

Отслеживание происхождения данных модели в каталоге Unity

Примечание.

Поддержка происхождения таблицы в каталоге Unity доступна в MLflow 2.11.0 и выше.

При обучении модели в таблице в каталоге Unity можно отслеживать происхождение модели до вышестоящий наборов данных, на которые она была обучена и оценена. Для этого используйте mlflow.log_input. При этом данные входной таблицы сохраняются с помощью запуска MLflow, создающего модель. Данные происхождения данных также автоматически фиксируются для моделей, зарегистрированных с помощью API хранилища компонентов. Просмотр происхождения хранилища функций.

При регистрации модели в каталоге Unity данные о происхождении автоматически сохраняются и отображаются на вкладке "Происхождение" пользовательского интерфейса версии модели в каталоге Обозреватель.

Следующий код показывает пример.

import mlflow
import pandas as pd
import pyspark.pandas as ps
from sklearn.datasets import load_iris
from sklearn.ensemble import RandomForestRegressor

# Write a table to Unity Catalog
iris = load_iris()
iris_df = pd.DataFrame(iris.data, columns=iris.feature_names)
iris_df.rename(
  columns = {
    'sepal length (cm)':'sepal_length',
    'sepal width (cm)':'sepal_width',
    'petal length (cm)':'petal_length',
    'petal width (cm)':'petal_width'},
  inplace = True
)
iris_df['species'] = iris.target
ps.from_pandas(iris_df).to_table("prod.ml_team.iris", mode="overwrite")

# Load a Unity Catalog table, train a model, and log the input table
dataset = mlflow.data.load_delta(table_name="prod.ml_team.iris", version="0")
pd_df = dataset.df.toPandas()
X = pd_df.drop("species", axis=1)
y = pd_df["species"]
with mlflow.start_run():
    clf = RandomForestRegressor(n_estimators=100)
    clf.fit(X, y)
    mlflow.log_input(dataset, "training")

Просмотр моделей в пользовательском интерфейсе

Необходимые разрешения. Для просмотра зарегистрированной модели и ее версий модели в пользовательском интерфейсе требуется EXECUTE привилегия для зарегистрированной модели, а также USE SCHEMAUSE CATALOG привилегии для схемы и каталога, содержащего модель.

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

Управление доступом к моделям

Сведения об управлении доступом к моделям, зарегистрированным в каталоге Unity, см. в разделе "Привилегии каталога Unity" и защищаемые объекты. Рекомендации по организации моделей в каталогах и схемах см. в разделе "Упорядочение данных".

Вы можете настроить разрешения модели программным образом с помощью REST API грантов. При настройке разрешений модели задайте securable_type значение "FUNCTION" в запросах REST API. Например, используйте PATCH /api/2.1/unity-catalog/permissions/function/{full_name} для обновления зарегистрированных разрешений модели.

Развертывание и упорядочение моделей с помощью псевдонимов и тегов

Псевдонимы и теги моделей помогают упорядочивать модели и управлять ими в каталоге Unity.

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

Теги — это пары "ключ-значение", которые связываются с зарегистрированными моделями и версиями модели, что позволяет помечать и классифицировать их по функциям или состоянию. Например, можно применить тег с ключом "task" и значением "question-answering" (отображаемым в пользовательском интерфейсе как task:question-answering) к зарегистрированным моделям, предназначенным для задач ответа на вопросы. На уровне версии модели можно пометить версии, прошедшие предварительную проверку validation_status:pending развертывания, и очистить их для развертывания.validation_status:approved

Сведения об использовании псевдонимов и тегов см. в следующих разделах.

Установка и удаление псевдонимов в моделях

Необходимые разрешения: владелец зарегистрированной модели, а также USE SCHEMAUSE CATALOG привилегии для схемы и каталога, содержащего модель.

Вы можете задать, обновить и удалить псевдонимы для моделей в каталоге Unity с помощью Обозреватель каталога. Псевдонимы можно управлять в зарегистрированной модели на странице сведений о модели и настраивать псевдонимы для конкретной версии модели на странице сведений о версии модели.

Сведения о настройке, обновлении и удалении псевдонимов с помощью API клиента MLflow см. в следующих примерах:

from mlflow import MlflowClient
client = MlflowClient()

# create "Champion" alias for version 1 of model "prod.ml_team.iris_model"
client.set_registered_model_alias("prod.ml_team.iris_model", "Champion", 1)

# reassign the "Champion" alias to version 2
client.set_registered_model_alias("prod.ml_team.iris_model", "Champion", 2)

# get a model version by alias
client.get_model_version_by_alias("prod.ml_team.iris_model", "Champion")

# delete the alias
client.delete_registered_model_alias("prod.ml_team.iris_model", "Champion")

Установка и удаление тегов в моделях

Необходимые разрешения: владелец или APPLY_TAG привилегии для зарегистрированной модели, а также USE SCHEMAUSE CATALOG привилегии схемы и каталога, содержащего модель.

Сведения о настройке и удалении тегов с помощью пользовательского интерфейса см. в статье "Управление тегами в каталоге" Обозреватель.

Сведения о настройке и удалении тегов с помощью API клиента MLflow см. в следующих примерах:

from mlflow import MlflowClient
client = MlflowClient()

# Set registered model tag
client.set_registered_model_tag("prod.ml_team.iris_model", "task", "classification")

# Delete registered model tag
client.delete_registered_model_tag("prod.ml_team.iris_model", "task")

# Set model version tag
client.set_model_version_tag("prod.ml_team.iris_model", "1", "validation_status", "approved")

# Delete model version tag
client.delete_model_version_tag("prod.ml_team.iris_model", "1", "validation_status")

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

Дополнительные сведения об API-интерфейсах клиента псевдонимов и тегов см. в документации по API MLflow.

Загрузка моделей для вывода

Использование версий модели по псевдонимам в рабочих нагрузках вывода

Необходимые разрешения: EXECUTE привилегии для зарегистрированной модели, а также USE SCHEMAUSE CATALOG привилегии схемы и каталога, содержащего модель.

Можно написать рабочие нагрузки пакетного вывода, ссылающиеся на версию модели по псевдониму. Например, фрагмент кода ниже загружается и применяет версию модели "Чемпион" для пакетного вывода. Если версия "Чемпион" обновляется для ссылки на новую версию модели, рабочая нагрузка вывода пакетной службы автоматически выбирает ее при следующем выполнении. Это позволяет отделить развертывания моделей от рабочих нагрузок пакетного вывода.

import mlflow.pyfunc
model_version_uri = "models:/prod.ml_team.iris_model@Champion"
champion_version = mlflow.pyfunc.load_model(model_version_uri)
champion_version.predict(test_x)

Вы также можете написать рабочие процессы развертывания, чтобы получить версию модели по псевдониму и обновить конечную точку обслуживания модели для обслуживания этой версии с помощью REST API модели:

import mlflow
import requests
client = mlflow.tracking.MlflowClient()
champion_version = client.get_model_version_by_alias("prod.ml_team.iris_model", "Champion")
# Invoke the model serving REST API to update endpoint to serve the current "Champion" version
model_name = champion_version.name
model_version = champion_version.version
requests.request(...)

Использование версий модели по номеру версии в рабочих нагрузках вывода

Вы также можете загрузить версии модели по номеру версии:

import mlflow.pyfunc
# Load version 1 of the model "prod.ml_team.iris_model"
model_version_uri = "models:/prod.ml_team.iris_model/1"
first_version = mlflow.pyfunc.load_model(model_version_uri)
first_version.predict(test_x)

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

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

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

Чтобы совместно работать с другими пользователями (предоставить доступ к привилегиям на запись) в зарегистрированной модели, необходимо предоставить права владения моделью группе, содержащей себя и пользователей, с которыми вы хотите сотрудничать. Участники совместной работы также должны иметь USE CATALOG права и USE SCHEMA привилегии в каталоге и схеме, содержащей модель. Дополнительные сведения см. в разделе "Права каталога Unity" и защищаемые объекты .

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

Чтобы совместно использовать модели с пользователями в других регионах или учетных записях, используйте поток общего доступа Delta Share Databricks в Databricks. См. статью "Добавление моделей в общую папку " (для поставщиков) и получение доступа в модели Databricks to Databricks (для получателей). Как получатель, после создания каталога из общей папки вы обращаетесь к моделям в этом общем каталоге так же, как и любая другая модель в каталоге Unity.

Добавление заметки к модели или версии модели

Необходимые разрешения: владелец зарегистрированной модели, а также USE SCHEMAUSE CATALOG привилегии для схемы и каталога, содержащего модель.

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

Добавление заметки к модели или версии модели с помощью пользовательского интерфейса

См. данные документа в каталоге Обозреватель с помощью комментариев markdown.

Добавление заметок в модель или версию модели с помощью API

Чтобы обновить описание зарегистрированной модели, используйте метод API update_registered_model() клиента MLflow:

client = MlflowClient()
client.update_registered_model(
  name="<model-name>",
  description="<description>"
)

Чтобы изменить описание для версии модели, используйте метод update_model_version() из API клиента MLflow:

client = MlflowClient()
client.update_model_version(
  name="<model-name>",
  version=<model-version>,
  description="<description>"
)

Переименование модели (только через API)

Необходимые разрешения: владелец зарегистрированной модели, привилегии в схеме, CREATE_MODEL содержащей зарегистрированную модель, и USE SCHEMAUSE CATALOG привилегии схемы и каталога, содержащего модель.

Чтобы переименовать зарегистрированную модель, используйте метод rename_registered_model() из API клиента MLflow:

client=MlflowClient()
client.rename_registered_model("<model-name>", "<new-model-name>")

Удаление модели или версии модели

Необходимые разрешения: владелец зарегистрированной модели, а также USE SCHEMAUSE CATALOG привилегии для схемы и каталога, содержащего модель.

Можно удалить зарегистрированную модель или версию модели в зарегистрированной модели с помощью пользовательского интерфейса каталога Обозреватель пользовательского интерфейса или API.

Удаление модели или версии модели с помощью API

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

Это действие нельзя отменить. При удалении модели удаляются все артефакты модели, хранящиеся в каталоге Unity, и все метаданные, связанные с зарегистрированной моделью.

Удаление версии модели

Чтобы удалить версию модели, используйте метод delete_model_version() из API клиента MLflow:

# Delete versions 1,2, and 3 of the model
client = MlflowClient()
versions=[1, 2, 3]
for version in versions:
  client.delete_model_version(name="<model-name>", version=version)

Удаление модели

Чтобы удалить модель, используйте метод delete_registered_model() из API клиента MLflow:

client = MlflowClient()
client.delete_registered_model(name="<model-name>")

Модели списка и поиска

Вы можете перечислить зарегистрированные модели в каталоге Unity с помощью API Python search_registered_models() MLflow:

client=MlflowClient()
client.search_registered_models()

Вы также можете найти имя конкретной модели и указать сведения о его версии с помощью search_model_versions() метода:

from pprint import pprint

client=MlflowClient()
[pprint(mv) for mv in client.search_model_versions("name='<model-name>'")]

Пример

В этом примере показано, как использовать модели в каталоге Unity для создания приложения машинного обучения.

Пример моделей в каталоге Unity

Перенос рабочих процессов и моделей в каталог Unity

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

Возможность Реестр моделей рабочей области (устаревшая версия) Модели в каталоге Unity (рекомендуется)
Версии эталонной модели по именованным псевдонимам Этапы реестра моделей. Перемещение версий модели на один из четырех фиксированных этапов для их ссылки на этот этап. Не удается переименовать или добавить этапы. Псевдонимы реестра моделей: создайте до 10 пользовательских и переназначаемых именованных ссылок на версии модели для каждой зарегистрированной модели.
Создание управляемых доступом сред для моделей Этапы реестра моделей: использование этапов в одной зарегистрированной модели для обозначения среды своих версий модели с элементами управления доступом только для двух из четырех фиксированных этапов (Staging и Production). Зарегистрированные модели: создайте зарегистрированную модель для каждой среды в рабочем процессе MLOps, используя трехуровневые пространства имен и разрешения каталога Unity для выражения управления.
Повышение уровня моделей в разных средах (модель развертывания) transition_model_version_stage() Используйте API клиента MLflow для перемещения версии модели на другой этап, потенциально критических рабочих процессов, ссылающихся на предыдущий этап. copy_model_version() Используйте API клиента MLflow для копирования версии модели из одной зарегистрированной модели в другую.
Доступ и совместное использование моделей в рабочих областях Экспорт и импорт моделей вручную в рабочих областях или настройка подключений к удаленным реестрам моделей с помощью личных маркеров доступа и секретов рабочих областей область. Вне поля доступа к моделям в разных рабочих областях в одной учетной записи. не требуется дополнительная настройка.
Настройка разрешений Задайте разрешения на уровне рабочей области. Задайте разрешения на уровне учетной записи, которая применяет согласованное управление в рабочих областях.
Доступ к моделям в метке Databricks Недоступен. Загрузите модели из Marketplace Databricks в хранилище метаданных каталога Unity и доступ к ним в рабочих областях.

В статьях ниже описано, как перенести рабочие процессы (задания обучения модели и пакетного вывода) и модели из реестра моделей рабочей области в каталог Unity.

Ограничения на поддержку каталога Unity

  • Этапы не поддерживаются для моделей в каталоге Unity. Databricks рекомендует использовать трехуровневое пространство имен в каталоге Unity, чтобы выразить среду, в которой находится модель, и использовать псевдонимы для продвижения моделей для развертывания. Дополнительные сведения см . в руководстве по обновлению.
  • Веб-перехватчики не поддерживаются для моделей в каталоге Unity. Ознакомьтесь с предлагаемыми альтернативами в руководстве по обновлению.
  • Некоторые поля и операторы API поиска не поддерживаются для моделей в каталоге Unity. Это можно устранить, вызвав API поиска с помощью поддерживаемых фильтров и сканирования результатов. Ниже приведены некоторые примеры.
    • Параметр order_by не поддерживается в search_model_versions или search_registered_models клиентских API.
    • Фильтры на основе тегов (tags.mykey = 'myvalue') не поддерживаются или search_registered_modelsне поддерживаютсяsearch_model_versions.
    • Операторы, отличные от точного равенства (например, LIKE, ILIKE), !=не поддерживаются или search_registered_modelsне поддерживаютсяsearch_model_versions.
    • Поиск зарегистрированных моделей по имени (например, MlflowClient().search_registered_models(filter_string="name='main.default.mymodel'") не поддерживается. Чтобы получить определенную зарегистрированную модель по имени, используйте get_registered_model.
  • Уведомления по электронной почте и потоки обсуждения комментариев в зарегистрированных моделях и версиях моделей не поддерживаются в каталоге Unity.
  • Журнал действий не поддерживается для моделей в каталоге Unity. Однако вы можете отслеживать действия в моделях в каталоге Unity с помощью журналов аудита.
  • search_registered_models Может возвращать устаревшие результаты для моделей, общих через разностный общий доступ. Чтобы обеспечить последние результаты, используйте интерфейс командной строки Databricks или пакет SDK для перечисления моделей в схеме.