จัดการโมเดล MLflow ในพื้นที่ทํางานและแพลตฟอร์มต่างๆ

แมชชีนเลิร์นนิงในการผลิตต้องการมากกว่าการฝึกอบรมโมเดลที่ดี คุณต้องมีเวิร์กโฟลว์ที่เชื่อถือได้เพื่อย้ายโมเดลจากการพัฒนาผ่านการตรวจสอบความถูกต้องไปสู่การผลิต การบันทึกข้ามพื้นที่ทํางานใน Microsoft Fabric เปิดใช้งานสองสถานการณ์หลัก:

  • สร้างเวิร์กโฟลว์ MLOps แบบครบวงจร ฝึกฝนและทดลองในพื้นที่ทํางานการพัฒนา ตรวจสอบความถูกต้องในพื้นที่ทํางานทดสอบ และปรับใช้กับพื้นที่ทํางานที่ให้บริการจริงโดยใช้ MLflow API มาตรฐาน การแยกสภาพแวดล้อมนี้ช่วยให้ทีมบังคับใช้ประตูคุณภาพและรักษาเส้นทางการตรวจสอบที่ชัดเจนตั้งแต่การทดลองไปจนถึงการผลิต

  • นําเนื้อหาแมชชีนเลิร์นนิงที่มีอยู่มาไว้ใน Fabric หากคุณได้ฝึกโมเดลใน Azure Databricks, Azure Machine Learning, สภาพแวดล้อมภายในเครื่อง หรือแพลตฟอร์มอื่นๆ ที่รองรับ MLflow แล้ว คุณสามารถบันทึกการทดลองและโมเดลเหล่านั้นลงในพื้นที่ทํางาน Fabric ได้โดยตรง คุณสามารถรวมสิ่งประดิษฐ์แมชชีนเลิร์นนิงของคุณไว้ในที่เดียวได้อย่างง่ายดายโดยไม่ต้องสร้างไปป์ไลน์การฝึกอบรมใหม่

การบันทึกข้ามพื้นที่ทํางานทํางานผ่านแพ็คเกจ synapseml-mlflow ซึ่งมีปลั๊กอินการติดตาม MLflow ที่เข้ากันได้กับ Fabric คุณรับรองความถูกต้องกับพื้นที่ทํางานเป้าหมาย ตั้งค่า URI การติดตาม และใช้คําสั่ง MLflow มาตรฐาน

Note

การบันทึกข้ามพื้นที่ทํางานมุ่งเน้นไปที่ประสบการณ์การใช้งานโค้ดเป็นอันดับแรก การรวม UI สําหรับสถานการณ์ข้ามพื้นที่ทํางานจะได้รับการแก้ไขในรุ่นต่อๆ ไป

ข้อกำหนดเบื้องต้น

สําหรับสถานการณ์สมุดบันทึก Fabric ให้สร้างสมุดบันทึกใหม่และแนบเลคเฮาส์ก่อนที่คุณจะเรียกใช้โค้ดใดๆ

เคล็ดลับ

การบันทึกข้ามพื้นที่ทํางานได้รับการสนับสนุนในพื้นที่ทํางานที่เปิดใช้งานการป้องกันการเข้าถึงขาออก การบันทึกข้ามพื้นที่ทํางานไปยังพื้นที่ทํางานอื่นจําเป็นต้องมีปลายทางส่วนตัวที่มีการจัดการ การบันทึกภายในพื้นที่ทํางานเดียวกันและจากภายนอก Fabric ทํางานได้โดยไม่ต้องกําหนดค่าเพิ่มเติม

ติดตั้งปลั๊กอิน MLflow

แพ็คเกจ synapseml-mlflow ช่วยให้สามารถบันทึกข้ามพื้นที่ทํางานได้โดยจัดเตรียมปลั๊กอินการติดตาม MLflow ของ Fabric เลือกคําสั่งติดตั้งตามสภาพแวดล้อมของคุณ

สำคัญ

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 ในเครื่อง
  • <ค 0>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

หลังจากการรับรองความถูกต้อง ให้ตั้งค่า URI การติดตามให้ชี้ไปยังพื้นที่ทํางาน Fabric เป้าหมายของคุณ และบันทึกการทดลองและแบบจําลองโดยใช้ MLflow API มาตรฐาน:

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 Data Science

ติดตั้งแพคเกจในพื้นที่ทํางานที่เปิดใช้งาน OAP

คําสั่งมาตรฐาน %pip install ต้องการการเข้าถึงอินเทอร์เน็ตขาออก ซึ่งถูกบล็อกในพื้นที่ทํางานที่เปิดใช้งานการป้องกันการเข้าถึงขาออก (OAP) ในการติดตั้ง synapseml-mlflow แพ็คเกจ ก่อนอื่นให้ดาวน์โหลดจากสภาพแวดล้อมที่ไม่ใช่ OAP จากนั้นอัปโหลดไปยังเลคเฮาส์

  1. ดาวน์โหลดแพคเกจ synapseml-mlflow จากเครื่องที่มีการเข้าถึงอินเทอร์เน็ต

    pip download synapseml-mlflow[online-notebook]
    
  2. อัปโหลดไฟล์ที่ดาวน์โหลดไปยังเลคเฮาส์ในพื้นที่ทํางานที่เปิดใช้งาน OAP ของคุณ อัปโหลดไฟล์ทั้งหมด .whl ไปยังส่วน ไฟล์ ของเลคเฮาส์ (เช่น /lakehouse/default/Files)

  3. ติดตั้งจากทางเดินเลคเฮาส์ในสมุดบันทึก 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 การติดตามเพื่อใช้ปลายทางส่วนตัวที่มีการจัดการ หากพื้นที่ทํางานปัจจุบันของคุณเปิดใช้งาน 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"
    

ข้อจำกัดที่ทราบ

  • ต้องมีสิทธิ์ในการเขียน คุณต้องมีสิทธิ์ในการเขียนบนพื้นที่ทํางานเป้าหมาย
  • ไม่รองรับสายข้อมูลข้ามพื้นที่ทํางาน คุณไม่สามารถดูความสัมพันธ์ระหว่างสมุดบันทึก การทดลอง และแบบจําลองเมื่อวัตถุเหล่านี้ถูกบันทึกจากพื้นที่ทํางานที่แตกต่างกัน
  • สมุดบันทึกต้นทางไม่ปรากฏในพื้นที่ทํางานเป้าหมาย สมุดบันทึกต้นทางไม่ปรากฏในพื้นที่ทํางานเป้าหมาย ในรายละเอียดสิ่งประดิษฐ์และหน้ารายการ ลิงก์ไปยังสมุดบันทึกต้นฉบับจะว่างเปล่า
  • ไม่รองรับสแนปช็อตรายการ การทดลองหรือแบบจําลองการเรียนรู้ของเครื่องที่บันทึกไปยังพื้นที่ทํางานอื่นจะไม่ปรากฏในสแนปช็อตของรายการสมุดบันทึกที่เรียกใช้ต้นทาง
  • ไม่รองรับโมเดลภาษาขนาดใหญ่ การบันทึกข้ามพื้นที่ทํางานไม่รองรับโมเดลภาษาขนาดใหญ่ (LLM)