작업 영역 및 플랫폼에서 MLflow 모델 관리

프로덕션 기계 학습에는 좋은 모델을 학습하는 것 이상이 필요합니다. 개발에서 유효성 검사를 통해 프로덕션으로 모델을 이동하려면 신뢰할 수 있는 워크플로가 필요합니다. Microsoft Fabric 작업 영역 간 로깅은 두 가지 주요 시나리오를 가능하게 합니다.

  • 엔드 투 엔드 MLOps 워크플로를 빌드합니다. 개발 작업 영역에서 학습 및 실험하고, 테스트 작업 영역에서 유효성을 검사하고, 표준 MLflow API를 사용하여 프로덕션 서비스 작업 영역에 배포합니다. 이러한 환경 분리는 팀이 품질 게이트를 적용하고 실험에서 프로덕션까지 명확한 감사 내역을 유지하는 데 도움이 됩니다.

  • 기존 기계 학습 자산을 Fabric에 통합. Azure Databricks, Azure Machine Learning, 로컬 환경 또는 MLflow를 지원하는 다른 플랫폼에서 모델을 이미 학습한 경우 해당 실험 및 모델을 Fabric 작업 영역에 직접 기록할 수 있습니다. 학습 파이프라인을 다시 빌드하지 않고도 기계 학습 아티팩트가 한 곳에서 쉽게 통합할 수 있습니다.

작업 영역 간 로깅은 Fabric 호환되는 MLflow 추적 플러그 인을 제공하는 synapseml-mlflow 패키지를 통해 작동합니다. 대상 작업 영역에서 인증하고, 추적 URI를 설정하고, 표준 MLflow 명령을 사용합니다.

메모

작업 영역 간 로깅은 코드 우선 환경에 중점을 둡니다. 작업 영역 간 시나리오에 대한 UI 통합은 향후 릴리스에서 해결될 예정입니다.

사전 요구 사항

Fabric 노트북 시나리오의 경우, 코드를 실행하기 전에 새로운 노트북을 만들고 레이크하우스를 연결하세요.

팁 (조언)

작업 영역 간 로깅은 아웃바운드 액세스 보호를 사용하도록 설정된 작업 영역에서 지원됩니다. 다른 작업 영역에 대한 작업 영역 간 로깅에는 관리형 프라이빗 엔드포인트가 필요합니다. 동일한 작업 영역 내 및 외부 Fabric 로깅은 추가 구성 없이 작동합니다.

MLflow 플러그 인 설치

synapseml-mlflow 패키지는 Fabric MLflow 추적 플러그 인을 제공하여 작업 영역 간 로깅을 사용하도록 설정합니다. 환경에 따라 설치 명령을 선택합니다.

중요합니다

MLflow 3은 현재 지원되지 않습니다. 버전 2.22.2 이하로 mlflow-skinny을(를) 고정해야 합니다.

Fabric Notebook의 경우 다음 명령을 사용하여 온라인 Notebook 종속성이 있는 패키지를 설치합니다.

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

설치 후 나머지 코드를 실행하기 전에 커널을 다시 시작합니다.

다른 Fabric 작업 영역에 MLflow 개체 기록

이 시나리오에서는 하나의 Fabric 작업 영역(원본)에서 Notebook을 실행하고 실험 및 모델을 다른 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
    )

실행이 완료되면 실험 및 등록된 모델이 대상 작업 영역에 표시됩니다.

Fabric 작업 영역 간에 MLflow 개체 이동

이 시나리오에서는 먼저 원본 작업 영역에서 개체를 기록한 다음 아티팩트 다운로드하여 대상 작업 영역에 다시 로그합니다. 이 메서드는 개발 작업 영역에서 프로덕션 작업 영역으로 학습된 모델을 승격해야 하는 경우에 유용합니다.

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
    )

Fabric 외부에서 MLflow 개체를 기록하기

다음을 포함하여 모델을 빌드하는 모든 환경에서 MLflow 실험 및 모델을 Fabric 작업 영역에 기록할 수 있습니다.

  • 로컬 컴퓨터. VS Code, Jupyter Notebook 또는 로컬 Python 환경
  • Azure Databricks. Azure Databricks 전자 필기장 및 작업.
  • Azure Machine Learning. Azure Machine Learning의 컴퓨팅 인스턴스 및 파이프라인.
  • 다른 플랫폼. 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 개체 기록

인증 후 표준 MLflow API를 사용하여 대상 Fabric 작업 영역 및 로그 실험 및 모델을 가리키도록 추적 URI를 설정합니다.

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 Machine Learning)에서 로깅은 추가 구성 없이 작동합니다.

지원되는 시나리오 및 필수 구성에 대한 자세한 내용은 Fabric 데이터 과학에 대한 작업 영역 아웃바운드 액세스 보호 참조하세요.

OAP 사용 작업 영역에 패키지 설치

표준 %pip install 명령에는 아웃바운드 인터넷 액세스가 필요하며, OAP(아웃바운드 액세스 보호)를 사용하도록 설정된 작업 영역에서 차단됩니다. 패키지를 설치 synapseml-mlflow 하려면 먼저 비 OAP 환경에서 다운로드한 다음 Lakehouse에 업로드합니다.

  1. synapseml-mlflow 인터넷에 액세스할 수 있는 컴퓨터에서 패키지를 다운로드합니다.

    pip download synapseml-mlflow[online-notebook]
    
  2. 다운로드한 파일을 OAP 사용 작업 영역의 Lakehouse에 업로드합니다. 레이크하우스의 .whl 섹션에 모든 파일을 업로드합니다(예: /lakehouse/default/Files).

  3. Fabric 노트북의 Lakehouse 경로에서 설치합니다.

    %pip install --no-index --find-links=/lakehouse/default/Files "synapseml-mlflow[online-notebook]>2.0.0" "mlflow-skinny<=2.22.2" --pre
    
  4. 관리되는 프라이빗 엔드포인트를 사용하도록 추적 URI를 설정합니다. 현재 작업 영역에 OAP가 사용하도록 설정된 경우 원본 작업 영역에서 대상 작업 영역으로 작업 영역 간 관리형 프라이빗 엔드포인트 를 구성해야 합니다. 그런 다음, 프라이빗 엔드포인트를 통해 추적 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"
    

알려진 제한 사항

  • 쓰기 권한이 필요합니다. 대상 작업 영역에 대한 쓰기 권한이 있어야 합니다.
  • 작업 영역 간 계보는 지원되지 않습니다. 이러한 개체가 다른 작업 영역에서 기록되는 경우 Notebook, 실험 및 모델 간의 관계를 볼 수 없습니다.
  • 원본 Notebook은 대상 작업 영역에 표시되지 않습니다. 원본 Notebook이 대상 작업 영역에 표시되지 않습니다. 아티팩트 세부 정보 및 목록 페이지에서 원본 전자 필기장 링크가 비어 있습니다.
  • 항목 스냅샷은 지원되지 않습니다. 다른 작업 영역에 기록된 기계 학습 실험 또는 모델은 원본 실행 Notebook 항목의 스냅샷에 표시되지 않습니다.
  • 큰 언어 모델은 지원되지 않습니다. 작업 영역 간 로깅은 LLM(대규모 언어 모델)을 지원하지 않습니다.