프로덕션 기계 학습에는 좋은 모델을 학습하는 것 이상이 필요합니다. 개발에서 유효성 검사를 통해 프로덕션으로 모델을 이동하려면 신뢰할 수 있는 워크플로가 필요합니다. Microsoft Fabric 작업 영역 간 로깅은 두 가지 주요 시나리오를 가능하게 합니다.
엔드 투 엔드 MLOps 워크플로를 빌드합니다. 개발 작업 영역에서 학습 및 실험하고, 테스트 작업 영역에서 유효성을 검사하고, 표준 MLflow API를 사용하여 프로덕션 서비스 작업 영역에 배포합니다. 이러한 환경 분리는 팀이 품질 게이트를 적용하고 실험에서 프로덕션까지 명확한 감사 내역을 유지하는 데 도움이 됩니다.
기존 기계 학습 자산을 Fabric에 통합. Azure Databricks, Azure Machine Learning, 로컬 환경 또는 MLflow를 지원하는 다른 플랫폼에서 모델을 이미 학습한 경우 해당 실험 및 모델을 Fabric 작업 영역에 직접 기록할 수 있습니다. 학습 파이프라인을 다시 빌드하지 않고도 기계 학습 아티팩트가 한 곳에서 쉽게 통합할 수 있습니다.
작업 영역 간 로깅은 Fabric 호환되는 MLflow 추적 플러그 인을 제공하는 synapseml-mlflow 패키지를 통해 작동합니다. 대상 작업 영역에서 인증하고, 추적 URI를 설정하고, 표준 MLflow 명령을 사용합니다.
메모
작업 영역 간 로깅은 코드 우선 환경에 중점을 둡니다. 작업 영역 간 시나리오에 대한 UI 통합은 향후 릴리스에서 해결될 예정입니다.
사전 요구 사항
- Microsoft Fabric 구독 또는 무료 Microsoft Fabric 평가판.
- 대상 Fabric 작업 영역에 대한 쓰기 권한입니다.
- 원본 및 대상 작업 영역 모두에 대해 업그레이드된 기계 학습 추적 시스템입니다.
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에 업로드합니다.
synapseml-mlflow인터넷에 액세스할 수 있는 컴퓨터에서 패키지를 다운로드합니다.pip download synapseml-mlflow[online-notebook]다운로드한 파일을 OAP 사용 작업 영역의 Lakehouse에 업로드합니다. 레이크하우스의
.whl섹션에 모든 파일을 업로드합니다(예:/lakehouse/default/Files).Fabric 노트북의 Lakehouse 경로에서 설치합니다.
%pip install --no-index --find-links=/lakehouse/default/Files "synapseml-mlflow[online-notebook]>2.0.0" "mlflow-skinny<=2.22.2" --pre관리되는 프라이빗 엔드포인트를 사용하도록 추적 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(대규모 언어 모델)을 지원하지 않습니다.