MLflow-modellen beheren in werkruimten en platforms

Voor machine learning voor productie is meer vereist dan het trainen van een goed model. U hebt betrouwbare werkstromen nodig om modellen van ontwikkeling via validatie naar productie te verplaatsen. Logboekregistratie tussen werkruimten in Microsoft Fabric maakt twee belangrijke scenario's mogelijk:

  • End-to-end MLOps-werkstromen bouwen. Train en experimenteer in een ontwikkelwerkruimte, valideer in een testwerkruimte en implementeer deze in een werkruimte voor productie met behulp van standaard MLflow-API's. Door deze scheiding van omgevingen kunnen teams kwaliteitspoorten afdwingen en duidelijke audittrails onderhouden van experimenten tot productie.

  • Breng bestaande machine learning-assets in Fabric. Als u al modellen hebt getraind in Azure Databricks, Azure Machine Learning, een lokale omgeving of een ander platform dat MLflow ondersteunt, kunt u deze experimenten en modellen rechtstreeks in een Fabric werkruimte vastleggen. U kunt uw machine learning-artefacten eenvoudig op één plaats samenvoegen zonder uw trainingspijplijnen opnieuw te bouwen.

Logboekregistratie tussen werkruimten werkt via het synapseml-mlflow-pakket, dat een Fabric-compatibele MLflow-tracking-invoegtoepassing biedt. U verifieert met uw doelwerkruimte, stelt de tracerings-URI in en gebruikt standaard MLflow-opdrachten.

Opmerking

Logboekregistratie tussen werkruimten is gericht op de code-first-ervaring. Integratie van de gebruikersinterface voor scenario's tussen werkruimten wordt in een toekomstige release behandeld.

Vereiste voorwaarden

Voor Fabric notebook-scenario's maakt u een nieuw notebook en koppelt u een lakehouse voordat u code uitvoert.

Aanbeveling

Logboekregistratie tussen werkruimten wordt ondersteund in werkruimten waarvoor uitgaande toegangsbeveiliging is ingeschakeld. Loggen tussen verschillende werkruimten naar een andere werkruimte vereist een beheerd privé-eindpunt. Logboekregistratie binnen dezelfde werkruimte en van buiten Fabric werkt zonder extra configuratie.

De MLflow-invoegtoepassing installeren

Het synapseml-mlflow-pakket maakt logboekregistratie tussen werkruimten mogelijk door de Fabric MLflow-traceringsinvoegtoepassing op te geven. Kies de installatieopdracht op basis van uw omgeving.

Belangrijk

MLflow 3 wordt momenteel niet ondersteund. U moet mlflow-skinny vastzetten op versie 2.22.2 of eerder.

Gebruik deze opdracht voor een Fabric notebook om het pakket te installeren met online notebookafhankelijkheden:

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

Na de installatie start u de kernel opnieuw op voordat u de resterende code uitvoert.

MLflow-objecten vastleggen in een andere Fabric werkruimte

In dit scenario voert u een notebook uit in een Fabric-werkruimte (bron) en logt experimenten en modellen naar een andere Fabric-werkruimte (doel).

De doelwerkruimte instellen

Wijs uw doelwerkruimte aan door de MLFLOW_TRACKING_URI omgevingsvariabele in te stellen:

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

Logboekexperimenten en -modellen

Maak een experiment en registreer een uitvoering met parameters, metrische gegevens en een model:

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
    )

Nadat de uitvoering is voltooid, worden het experiment en het geregistreerde model weergegeven in de doelwerkomgeving.

MLflow-objecten verplaatsen tussen Fabric werkruimten

In dit scenario logt u eerst objecten in de bronwerkruimte en downloadt u de artefacten en meldt u ze opnieuw aan bij de doelwerkruimte. Deze methode is handig wanneer u een getraind model van een ontwikkelwerkruimte naar een productiewerkruimte moet promoveren.

Stap 1: Objecten vastleggen in de bronwerkruimte

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

Stap 2: Artefacten downloaden uit de bronuitvoering

import mlflow.artifacts

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

Stap 3: Artefacten opnieuw vastleggen in de doelwerkruimte

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-objecten van buiten Fabric registreren

U kunt MLflow-experimenten en -modellen vastleggen in een Fabric werkruimte vanuit elke omgeving waarin u uw modellen bouwt, waaronder:

  • Lokale machines. VS Code, Jupyter notebooks of een lokale Python-omgeving.
  • Azure Databricks. Azure Databricks-notebooks en takenverwerking.
  • Azure Machine Learning. Azure Machine Learning rekeninstanties en pijplijnen.
  • Elk ander platform. Elke omgeving die ondersteuning biedt voor Python en MLflow.

Stap 1: Het pakket installeren

Installeer het synapseml-mlflow pakket in uw omgeving:

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

Stap 2: verifiëren met Fabric

Kies een verificatiemethode op basis van uw omgeving:

Gebruik deze methode voor lokale ontwikkelomgevingen met browsertoegang, zoals VS Code of Jupyter.

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

SetFabricAnalyticsDefaultTokenCredentialsGlobally(
    credential=DefaultAzureCredential(exclude_interactive_browser_credential=False)
)

Stap 3: Stel de doelwerkruimte in en log MLflow-objecten

Na verificatie stelt u de tracerings-URI in zodat deze verwijst naar uw doel-Fabric werkruimte- en logboekexperimenten en -modellen met behulp van standaard MLflow-API's:

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
    )

Gebruik werkruimte-overschrijdende logging met beveiliging van uitgaande toegang

Als voor uw werkruimte uitgaande toegangsbeveiliging is ingeschakeld, is voor logboekregistratie voor meerdere werkruimten een beheerd privé-eindpunt voor meerdere werkruimten van de bronwerkruimte naar de doelwerkruimte vereist.

Logboekregistratie binnen dezelfde werkruimte en logboekregistratie van buiten Fabric (lokale machines, Azure Databricks, Azure Machine Learning) werken zonder extra configuratie.

Zie Werkruimte uitgaande toegangsbeveiliging voor Fabric Data Science voor meer informatie over ondersteunde scenario's en de vereiste configuratie.

Het pakket installeren in een werkruimte met OAP-functionaliteit

Voor de standaardopdracht %pip install is uitgaande internettoegang vereist, die wordt geblokkeerd in werkruimten waarvoor uitgaande toegangsbeveiliging (OAP) is ingeschakeld. Als u het pakket wilt installeren, downloadt u het synapseml-mlflow eerst vanuit een niet-OAP-omgeving en uploadt u het vervolgens naar het lakehouse.

  1. Download het synapseml-mlflow pakket vanaf een computer met internettoegang.

    pip download synapseml-mlflow[online-notebook]
    
  2. Upload de gedownloade bestanden naar het lakehouse in uw werkruimte met OAP-functionaliteit. Upload alle .whl bestanden naar de sectie Bestanden van het lakehouse (bijvoorbeeld /lakehouse/default/Files).

  3. Installeer vanaf het lakehouse-pad in uw Fabric-notebook:

    %pip install --no-index --find-links=/lakehouse/default/Files "synapseml-mlflow[online-notebook]>2.0.0" "mlflow-skinny<=2.22.2" --pre
    
  4. Stel de tracerings-URI in om het beheerde privé-eindpunt te gebruiken. Als OAP is ingeschakeld voor uw huidige werkruimte, moet u een door meerdere werkruimten beheerd privé-eindpunt van de bronwerkruimte naar de doelwerkruimte configureren. Routeer vervolgens de tracerings-URI via het privé-eindpunt.

    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"
    

Bekende beperkingen

  • Schrijfmachtiging is vereist. U moet schrijfrechten hebben voor de doelruimte.
  • Afhankelijkheden tussen werkruimten worden niet ondersteund. U kunt geen relaties tussen notebooks, experimenten en modellen weergeven wanneer deze objecten vanuit verschillende werkruimten worden vastgelegd.
  • Het bronnotitieblok is niet zichtbaar in de doelwerkruimte. Het bronnotitieblok wordt niet weergegeven in de doelwerkruimte. Op artefactdetails en lijstpagina's is de koppeling naar het bronnotitieblok leeg.
  • Momentopnamen van items worden niet ondersteund. Machine learning-experimenten of -modellen die zijn vastgelegd in een andere werkruimte, worden niet weergegeven in de momentopname van het notebook-item dat door de bron wordt uitgevoerd.
  • Grote taalmodellen worden niet ondersteund. Logboekregistratie tussen werkruimten biedt geen ondersteuning voor grote taalmodellen (LLM's).