Çalışma alanları ve platformlar arasında MLflow modellerini yönetme

Üretim makine öğrenmesi, iyi bir model eğitmaktan daha fazlasını gerektirir. Modelleri geliştirme aşamasından doğrulama yoluyla üretime taşımak için güvenilir iş akışlarına ihtiyacınız vardır. Microsoft Fabric'da iş alanları arası günlük kaydı, iki önemli senaryonun gerçekleştirilmesine olanak tanır.

  • Uçtan uca MLOps iş akışları oluşturun. Standart MLflow API'lerini kullanarak geliştirme çalışma alanında eğitim ve denemeler yapın, test çalışma alanında doğrulayın ve üretim hizmeti veren bir çalışma alanına dağıtın. Ortamların bu şekilde ayrılması, ekiplerin kalite geçitlerini zorunlu tutmasına ve denemelerden üretime kadar net denetim izlerini korumasına yardımcı olur.

  • Mevcut makine öğrenmesi varlıklarını Fabric'e entegre edin. Modelleri Azure Databricks, Azure Machine Learning, yerel bir ortam veya MLflow destekleyen başka bir platformda zaten eğittiyseniz, bu deneyleri ve modelleri doğrudan Fabric ortamındaki bir çalışma alanında günlüğe kaydedebilirsiniz. Eğitim işlem hatlarınızı yeniden oluşturmadan makine öğrenmesi yapıtlarınızı tek bir yerde kolayca birleştirebilirsiniz.

Çalışma alanları arası günlük kaydı, Fabric uyumlu bir MLflow izleme eklentisi sağlayan synapseml-mlflow paketi aracılığıyla çalışır. Hedef çalışma alanınızla kimlik doğrulaması yapar, izleme URI'sini ayarlar ve standart MLflow komutlarını kullanırsınız.

Uyarı

Çalışma alanları arası günlük kaydı, kod-öncelikli deneyime odaklanır. Çalışma alanları arası senaryolar için kullanıcı arabirimi tümleştirmesi, gelecek bir sürümde ele alınacaktır.

Önkoşullar

Fabric not defteri senaryoları için, herhangi bir kod çalıştırmadan önce yeni bir not defteri oluşturun ve bir lakehouse ekleyin.

Tip

Çalışma alanları arası günlük kaydı, çıkış erişimi koruması etkinleştirilmiş çalışma alanlarında desteklenir. Farklı bir çalışma alanına çalışma alanları arasında günlük kaydetmek, yönetilen bir özel uç nokta gerektirir. Aynı çalışma alanında ve Fabric dışı çalışmalarda günlüğe kaydetme, ek yapılandırma gerektirmez.

MLflow eklentisini yükleme

synapseml-mlflow paketi, Fabric MLflow izleme eklentisini sağlayarak çalışma alanları arasında günlük kaydını etkinleştirir. Ortamınıza göre yükleme komutunu seçin.

Uyarı

Paket synapseml-mlflow artık MLflow 3'i destekliyor. mlflow-skinny öğesini artık 2.22.2 sürümüne sabitlemenize gerek yok. Fabric’teki MLflow 3 özelliklerine genel bakış için bkz: Fabric Veri Bilimi’nde MLflow 3

Fabric not defteri için, paketi çevrimiçi not defteri bağımlılıklarıyla yüklemek için şu komutu kullanın:

%pip install -U "synapseml-mlflow[online-notebook]"

Yüklemeden sonra, kalan kodu çalıştırmadan önce çekirdeği yeniden başlatın.

MLflow nesnelerini başka bir Fabric çalışma alanına kaydetme

Bu senaryoda, bir Fabric çalışma alanında (kaynak) bir not defteri çalıştırır ve denemeleri ve modelleri farklı bir Fabric çalışma alanında (hedef) günlüğe kaydedip saklarsınız.

Hedef çalışma alanını ayarlama

Ortam değişkenini ayarlayarak hedef çalışma alanınızı işaret edin:

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

Deneyleri ve modelleri kaydet

Deneme oluşturun ve parametreler, ölçümler ve bir modelle çalıştırmayı günlüğe kaydedin:

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
    )

Çalıştırma tamamlandıktan sonra deneme ve kayıtlı model hedef çalışma alanında görünür.

MLflow nesnelerini Fabric çalışma alanları arasında taşıma

Bu senaryoda, önce kaynak çalışma alanında nesneleri kayıt altına alır, ardından belgeleri indirir ve hedef çalışma alanına yeniden kayıt altına alırsınız. Bu yöntem, eğitilmiş bir modeli geliştirme çalışma alanından üretim çalışma alanına yükseltmeniz gerektiğinde kullanışlıdır.

1. Adım: Nesneleri kaynak çalışma alanında loglayın

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. Adım: Artefaktları kaynak çalıştırmasından indirme

import mlflow.artifacts

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

3. Adım: Artefaktları hedef çalışma alanında tekrar günlüğe kaydet

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
    )

Fabric dışından MLflow nesnelerini loglama

MLflow denemelerini ve modellerini, modellerinizi oluşturduğunuz herhangi bir ortamdan bir Fabric çalışma alanına kaydedebilirsiniz, örneğin:

  • Yerel makineler. VS Code, Jupyter not defterleri veya herhangi bir yerel Python ortamı.
  • Azure Databricks. Azure Databricks notebook'ları ve işler.
  • Azure Machine Learning. Azure Machine Learning işlem örnekleri ve işlem hatları.
  • Başka herhangi bir platform. Python ve MLflow destekleyen tüm ortamlar.

1. Adım: Paketi yükleme

synapseml-mlflow Paketi ortamınıza yükleyin:

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

2. Adım: Fabric ile kimlik doğrulaması

Ortamınıza göre bir kimlik doğrulama yöntemi seçin:

VS Code veya Jupyter gibi tarayıcı erişimi olan yerel geliştirme ortamları için bu yöntemi kullanın.

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

SetFabricAnalyticsDefaultTokenCredentialsGlobally(
    credential=DefaultAzureCredential(exclude_interactive_browser_credential=False)
)

Adım 3: Hedef çalışma alanını ayarlama ve MLflow nesnelerini kaydetme

Kimlik doğrulamasından sonra, izleme URI'sini hedef Fabric çalışma alanını işaret edecek şekilde ve standart MLflow API'lerini kullanarak denemeleri ve modelleri günlüğe kaydetmek amacıyla ayarlayın.

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
    )

Çapraz çalışma alanı loglamasını, giden erişim koruması kullanarak yapma

Çalışma alanınızda giden erişim koruması etkinleştirildiyse, çalışma alanları arasında günlük kaydı için kaynak çalışma alanından hedef çalışma alanına bir çalışma alanları arası yönetilen özel uç nokta gerekir.

Aynı çalışma alanında ve Fabric dışından (yerel makineler, Azure Databricks, Azure Machine Learning) kayıt tutma, ek yapılandırma gerektirmeden çalışır.

Desteklenen senaryolar ve gerekli yapılandırma hakkında ayrıntılı bilgi için bkz: Fabric Veri Bilimi için Çalışma Alanı Giden Erişim Koruması.

Paketi OAP özellikli bir çalışma alanına yükleme

Standart %pip install komutu, giden erişim koruması (OAP) etkinleştirilmiş çalışma alanlarında engellenen giden İnternet erişimine ihtiyaç duyar. Önce OAP olmayan bir ortamdan synapseml-mlflow paketini indirin, ardından lakehouse'a yükleyin.

  1. synapseml-mlflow Paketi İnternet erişimi olan bir makineden indirin.

    pip download synapseml-mlflow[online-notebook]
    
  2. İndirilen dosyaları OAP özellikli çalışma alanınızdaki lakehouse'a yükleyin. Tüm .whl dosyaları lakehouse'un Dosyalar bölümüne yükleyin (örneğin, /lakehouse/default/Files).

  3. Fabric notebook'unuzdaki lakehouse yolundan yükleyin.

    %pip install --no-index --find-links=/lakehouse/default/Files "synapseml-mlflow[online-notebook]>2.0.0" "mlflow-skinny<=2.22.2" --pre
    
  4. yönetilen özel uç noktayı kullanmak için izleme URI'sini ayarlayın. Geçerli çalışma alanınızda OAP etkinse, kaynak çalışma alanından hedef çalışma alanına çalışma alanları arası yönetilen bir özel uç nokta yapılandırmanız gerekir. Ardından izleme URI'sini özel uç nokta üzerinden yönlendirin.

    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"
    

Bilinen sınırlamalar

  • Yazma izni gereklidir. Hedef çalışma alanında yazma izniniz olmalıdır.
  • Çalışma alanları arası köken desteklenmez. Bu nesneler farklı çalışma alanlarından kaydedildiğinde notlar, deneyler ve modeller arasındaki ilişkileri görüntüleyemezsiniz.
  • Kaynak not defteri hedef çalışma alanında görünmez. Kaynak not defteri hedef çalışma alanında görünmez. Yapıt ayrıntılarında ve liste sayfalarında kaynak not defteri bağlantısı boş.
  • Öğe anlık görüntüleri desteklenmez. Başka bir çalışma alanında günlüğe kaydedilen makine öğrenmesi denemeleri veya modelleri, kaynak çalıştırma not defteri öğesinin anlık görüntüsünde görünmez.
  • Büyük dil modelleri desteklenmez. Çalışma alanları arası günlük kaydı büyük dil modellerini (LLM) desteklemez.