Управление моделями MLflow на разных рабочих областях и платформах

Для машинного обучения в рабочей среде требуется больше, чем обучение хорошей модели. Вам нужны надежные рабочие процессы для перемещения моделей из разработки с помощью проверки в рабочую среду. Ведение журнала между рабочими областями в Microsoft Fabric включает два ключевых сценария:

  • Создание комплексных рабочих процессов MLOps. Обучайтесь и проводите эксперименты в среде разработки, проверяйте в тестовой среде и развертывайте в продукционной среде с использованием стандартных API MLflow. Это разделение сред помогает командам применять шлюзы качества и поддерживать четкие следы аудита от экспериментирования до рабочей среды.

  • Переносите существующие активы машинного обучения в Fabric. Если вы уже обучены модели в Azure Databricks, Машинное обучение Azure, локальной среде или любой другой платформе, поддерживающей MLflow, вы можете записывать эти эксперименты и модели непосредственно в рабочую область Fabric. Вы можете легко объединить артефакты машинного обучения в одном месте, без необходимости перестраивать конвейеры обучения.

Ведение журнала между рабочими областями осуществляется через пакет synapseml-mlflow, который предоставляет модуль отслеживания MLflow, совместимый с Fabric. Вы выполняете проверку подлинности в целевой рабочей области, задаете URI отслеживания и используете стандартные команды MLflow.

Замечание

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

Необходимые условия

Для сценариев, связанных с блокнотами Fabric, создайте новый блокнот и подключите Lakehouse перед выполнением любого кода.

Подсказка

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

Установка подключаемого модуля MLflow

Пакет synapseml-mlflow позволяет ведение журнала между рабочими областями, предоставляя модуль отслеживания Fabric MLflow. Выберите команду установки в зависимости от среды.

Это важно

MLflow 3 в настоящее время не поддерживается. Необходимо зафиксировать mlflow-skinny на версии 2.22.2 или ранее.

Для записной книжки Fabric используйте эту команду, чтобы установить пакет с онлайн-зависимостями записной книжки.

%pip install -U "synapseml-mlflow[online-notebook]" "mlflow-skinny<=2.22.2"

После установки перезапустите ядро перед выполнением оставшегося кода.

Логирование объектов MLflow в другую рабочую область Fabric

В этом сценарии вы запускаете записную книжку в одной рабочей области Fabric (источник) и регистрируете эксперименты и модели в другой рабочей области Fabric (целевой).

Настройка целевой рабочей области

Наведите указатель на целевую рабочую MLFLOW_TRACKING_URI область, задав переменную среды:

import os

target_workspace_id = "<your-target-workspace-id>"
target_uri = f"sds://api.fabric.microsoft.com/v1/workspaces/{target_workspace_id}/mlflow"
os.environ["MLFLOW_TRACKING_URI"] = target_uri

Записывать эксперименты и модели

Создайте эксперимент и запишите выполнение с параметрами, метриками и моделью.

import mlflow
import mlflow.sklearn
import numpy as np
from sklearn.linear_model import LogisticRegression
from mlflow.models.signature import infer_signature

# Create or set the experiment in the target workspace
EXP_NAME = "my-cross-workspace-experiment"
MODEL_NAME = "my-cross-workspace-model"
mlflow.set_experiment(EXP_NAME)

with mlflow.start_run() as run:
    lr = LogisticRegression()
    X = np.array([-2, -1, 0, 1, 2, 1]).reshape(-1, 1)
    y = np.array([0, 0, 1, 1, 1, 0])
    lr.fit(X, y)

    score = lr.score(X, y)
    signature = infer_signature(X, y)

    mlflow.log_params({
        "objective": "classification",
        "learning_rate": 0.05,
    })
    mlflow.log_metric("score", score)

    mlflow.sklearn.log_model(lr, "model", signature=signature)

    mlflow.register_model(
        f"runs:/{run.info.run_id}/model",
        MODEL_NAME
    )

После завершения выполнения эксперимент и зарегистрированная модель отображаются в целевой рабочей области.

Перемещение объектов MLflow между рабочими областями Fabric

В этом сценарии вы сначала регистрируете объекты в исходной рабочей области, затем скачиваете артефакты и повторно регистрируете их в целевой рабочей области. Этот метод полезен, если необходимо перенести обученную модель из рабочего пространства разработки в рабочее пространство эксплуатации.

Шаг 1. Регистрация объектов в исходной рабочей области

import mlflow
import mlflow.sklearn
import numpy as np
from sklearn.linear_model import LogisticRegression
from mlflow.models.signature import infer_signature

# Log to the current (source) workspace
EXP_NAME = "source-experiment"
mlflow.set_experiment(EXP_NAME)

with mlflow.start_run() as run:
    lr = LogisticRegression()
    X = np.array([-2, -1, 0, 1, 2, 1]).reshape(-1, 1)
    y = np.array([0, 0, 1, 1, 1, 0])
    lr.fit(X, y)

    signature = infer_signature(X, y)
    mlflow.sklearn.log_model(lr, "model", signature=signature)

    source_run_id = run.info.run_id

Шаг 2. Скачивание артефактов из исходного запуска

import mlflow.artifacts

# Download the model artifacts locally
local_artifact_path = mlflow.artifacts.download_artifacts(
    run_id=source_run_id,
    artifact_path="model"
)

Шаг 3: Повторная регистрация артефактов в целевую рабочую область

import os

target_workspace_id = "<your-target-workspace-id>"
target_uri = f"sds://api.fabric.microsoft.com/v1/workspaces/{target_workspace_id}/mlflow"
os.environ["MLFLOW_TRACKING_URI"] = target_uri

TARGET_EXP_NAME = "promoted-experiment"
TARGET_MODEL_NAME = "promoted-model"
mlflow.set_experiment(TARGET_EXP_NAME)

with mlflow.start_run() as run:
    mlflow.log_artifacts(local_artifact_path, "model")
    mlflow.register_model(
        f"runs:/{run.info.run_id}/model",
        TARGET_MODEL_NAME
    )

Логирование объектов MLflow изне Fabric

Вы можете регистрировать эксперименты и модели MLflow в рабочую область Fabric из любой среды, в которой вы создаете модели, в том числе:

  • Локальные компьютеры. VS Code, записные книжки Jupyter или любая локальная среда Python.
  • Azure Databricks. Azure Databricks блокноты и задания.
  • Машинное обучение Azure. Машинное обучение Azure вычислительных экземпляров и конвейеров.
  • Любая другая платформа. Любая среда, поддерживающая Python и MLflow.

Шаг 1. Установка пакета

synapseml-mlflow Установите пакет в вашей среде:

pip install -U "synapseml-mlflow" "mlflow-skinny<=2.22.2"

Шаг 2. Проверка подлинности с помощью Fabric

Выберите метод проверки подлинности в зависимости от среды:

Используйте этот метод для локальных сред разработки с доступом к браузеру, например VS Code или Jupyter.

from fabric.analytics.environment.credentials import SetFabricAnalyticsDefaultTokenCredentialsGlobally
from azure.identity import DefaultAzureCredential

SetFabricAnalyticsDefaultTokenCredentialsGlobally(
    credential=DefaultAzureCredential(exclude_interactive_browser_credential=False)
)

Шаг 3. Установите целевую рабочую область и выполните запись объектов MLflow

После проверки подлинности установите URI для отслеживания, чтобы указать целевую рабочую область Fabric, и ведите журнал экспериментов и моделей, используя стандартные API MLflow.

import os
import mlflow
import mlflow.sklearn
import numpy as np
from sklearn.linear_model import LogisticRegression
from mlflow.models.signature import infer_signature

target_workspace_id = "<your-target-workspace-id>"
target_uri = f"sds://api.fabric.microsoft.com/v1/workspaces/{target_workspace_id}/mlflow"
os.environ["MLFLOW_TRACKING_URI"] = target_uri

EXP_NAME = "external-experiment"
MODEL_NAME = "external-model"
mlflow.set_experiment(EXP_NAME)

with mlflow.start_run() as run:
    lr = LogisticRegression()
    X = np.array([-2, -1, 0, 1, 2, 1]).reshape(-1, 1)
    y = np.array([0, 0, 1, 1, 1, 0])
    lr.fit(X, y)

    signature = infer_signature(X, y)
    mlflow.log_metric("score", lr.score(X, y))
    mlflow.sklearn.log_model(lr, "model", signature=signature)

    mlflow.register_model(
        f"runs:/{run.info.run_id}/model",
        MODEL_NAME
    )

Использование ведения журнала между рабочими областями с защитой исходящего доступа

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

Ведение журнала в одной рабочей области и ведение журнала вне Fabric (локальные компьютеры, Azure Databricks, Машинное обучение Azure) работает без дополнительной настройки.

Дополнительные сведения о поддерживаемых сценариях и требуемой конфигурации см. в статье Workspace outbound access protection for Fabric Data Science.

Установка пакета в рабочей области с поддержкой OAP

Для стандартной %pip install команды требуется исходящий доступ к Интернету, который заблокирован в рабочих областях с включенной защитой от исходящего доступа (OAP). Чтобы установить пакет synapseml-mlflow, сначала скачайте его из среды, не являющейся OAP, а затем загрузите его в Lakehouse.

  1. synapseml-mlflow Скачайте пакет с компьютера с доступом к Интернету.

    pip download synapseml-mlflow[online-notebook]
    
  2. Загрузите скачанные файлы в Lakehouse в вашей рабочей области с поддержкой OAP. Отправьте все .whl файлы в раздел "Файлы" раздела lakehouse (например, /lakehouse/default/Files).

  3. Установите по пути Lakehouse в блокноте Fabric.

    %pip install --no-index --find-links=/lakehouse/default/Files "synapseml-mlflow[online-notebook]>2.0.0" "mlflow-skinny<=2.22.2" --pre
    
  4. Задайте URI отслеживания для использования управляемой частной конечной точки. Если в вашей текущей рабочей области включен ОАП, необходимо настроить управляемую частную конечную точку между рабочими областями из исходной рабочей области в целевую рабочую область. Затем перенаправьте URI отслеживания через частную конечную точку.

    import os
    from fabric.analytics.environment.context import FabricContext, InternalContext
    
    context = FabricContext(workspace_id=target_workspace_id, internal_context=InternalContext(is_wspl_enabled=True))
    print(context.pbi_shared_host)
    # You need to set up and use this private endpoint if your current workspace has OAP enabled
    
    os.environ["MLFLOW_TRACKING_URI"] = f"sds://{context.pbi_shared_host}/v1/workspaces/{target_workspace_id}/mlflow"
    

Известные ограничения

  • Требуется разрешение на запись. Необходимо иметь разрешение на запись в целевой рабочей области.
  • Взаимосвязанность между рабочими пространствами не поддерживается. Невозможно просматривать связи между записными книжками, экспериментами и моделями, когда эти объекты регистрируются из разных рабочих областей.
  • Исходная записная книжка не отображается в целевой рабочей области. Исходная записная книжка не отображается в целевой рабочей области. На страницах сведений и списка артефактов ссылка на исходную записную книжку пуста.
  • Моментальные снимки элементов не поддерживаются. Эксперименты или модели машинного обучения, зарегистрированные в другой рабочей области, не отображаются в снимке состояния элемента записной книжки, запущенного из исходного источника.
  • Большие языковые модели не поддерживаются. Ведение журнала между рабочими областями не поддерживает большие языковые модели (LLM).