MLflow 3 ใน Fabric Data Science

Microsoft Fabric รองรับ MLflow จนถึงเวอร์ชัน 3.1 ซึ่งเป็นแพลตฟอร์มการติดตามการเรียนรู้ของเครื่องแบบโอเพนซอร์ส ด้วยการสนับสนุนนี้ คุณสามารถใช้ความสามารถต่อไปนี้เพื่อติดตามและตรวจสอบปริมาณงานการเรียนรู้ของเครื่องและ AI เชิงกําเนิดใน Fabric:

  • LoggedModel ที่เปิดตัวใน MLflow 3 เป็นเอนทิตีชั้นหนึ่งที่เชื่อมโยงแต่ละแบบจําลองกับการเรียกใช้ต้นทาง โค้ด การกําหนดค่า พารามิเตอร์ เมตริก และชุดข้อมูล
  • การติดตาม ที่จับข้อความแจ้ง การตอบกลับ การเรียกใช้เครื่องมือ เวลาแฝง และการใช้โทเค็นจากโมเดลภาษาขนาดใหญ่ (LLM) และแอปพลิเคชัน Generative AI

บทความนี้จะอธิบายถึงการเปลี่ยนแปลงใน MLflow 3 วิธีใช้ฟีเจอร์ใหม่ใน Fabric และวิธีการย้ายข้อมูลจาก MLflow 2.x

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

Prerequisites

  • พื้นที่ทํางานที่อัปเกรดเป็นประสบการณ์การติดตามแมชชีนเลิร์นนิ่งล่าสุด หากต้องการตรวจสอบสิทธิ์และการอัปเกรด โปรดดู อัปเกรดระบบติดตามแมชชีนเลิร์นนิ่งของคุณ

  • mlflow เวอร์ชัน 3.0 หรือใหม่กว่า สมุดบันทึก Fabric มาพร้อมกับ MLflow 2.x ตามค่าเริ่มต้น ดังนั้นคุณต้องอัปเกรดเป็น MLflow 3 โดยเรียกใช้คําสั่งต่อไปนี้ในสมุดบันทึกของคุณ:

    %pip install "synapseml-mlflow[online-notebook]>=2.0.3" "mlflow-skinny==3.1.0" "opentelemetry-api<=1.40.0"
    

    คําสั่งเดียวกันนี้ยังติดตั้งแพคเกจ synapseml-mlflow ที่อัปเกรดแล้วสําหรับสถานการณ์ข้ามพื้นที่ทํางานและ Fabric ภายนอก

มีการเปลี่ยนแปลงอะไรบ้างใน MLflow 3

ขอบเขต เอ็มแอลโฟลว์ 2.x เอ็มแอลโฟลว์ 3
API การบันทึกแบบจําลอง log_model(model, artifact_path="model") log_model(model, name="my_model", params={...}) (มรดก artifact_path ยังคงใช้งานได้)
การแสดงแบบจําลอง สิ่งประดิษฐ์ที่แนบมากับการวิ่ง เอนทิตี LoggedModel คลาสแรกที่เชื่อมโยงกับการเรียกใช้
UI การทดลอง มุมมองการทดสอบเดียว การทดสอบ ML เทียบกับประเภทการทดสอบ AI รวมถึงส่วนโมเดลที่บันทึกไว้และแท็บการติดตาม
ความสามารถในการสังเกต Generative AI ไม่มี การติดตาม ข้อความแจ้ง การตอบกลับ การเรียกใช้เครื่องมือ เวลาแฝง และโทเค็น

MLflow 3 เข้ากันได้กับเวิร์กโฟลว์ MLflow 2.x แบบย้อนหลัง การทดลอง การเรียกใช้ และสมุดบันทึกที่มีอยู่ที่ใช้ mlflow>=2 จะยังคงทํางานต่อไปโดยไม่มีการเปลี่ยนแปลง

เลือกประเภทการทดสอบ

เมื่อคุณสร้างการทดสอบ Ribbon จะมีสวิตช์ประเภทการทดสอบ:

  • การทดลอง ML — พื้นผิวการติดตามแบบคลาสสิกสําหรับการเรียกใช้ พารามิเตอร์ เมตริก และ LoggedModels ใช้ประเภทนี้สําหรับเวิร์กโฟลว์แมชชีนเลิร์นนิงแบบดั้งเดิม
  • การทดลอง AI — การติดตามพื้นผิวเป็นอันดับแรกที่ปรับแต่งสําหรับปริมาณงาน Generative AI แท็บ การติดตาม อยู่ด้านหน้าและตรงกลาง และมุมมองรายละเอียดการเรียกใช้จะเน้นข้อความแจ้ง การเรียกใช้เครื่องมือ และการใช้โทเค็น

การทดสอบที่มีอยู่ที่สร้างขึ้นก่อน MLflow 3 มีค่าเริ่มต้นเป็นประเภทการทดสอบ ML คุณสามารถสลับชนิดจาก Ribbon ได้ตลอดเวลา

สกรีนช็อตของดรอปดาวน์ริบบิ้นการทดสอบที่ให้คุณสลับระหว่างการทดลองแมชชีนเลิร์นนิงและประเภทการทดสอบ AI

เริ่มต้นจากเทมเพลตสมุดบันทึก

เทมเพลตสมุดบันทึกสองแบบมาพร้อมกับรุ่นเพื่อให้คุณทํางานได้ในคลิกเดียว เมื่อคุณเปิดการทดสอบที่ยังไม่ได้เรียกใช้ หน้าการทดสอบที่ว่างเปล่าจะแสดงการ์ดเริ่มต้น 2 ใบ ดังนี้

  • เทมเพลตโมเดลใหม่ — ตัวอย่าง ElasticNet แบบ end-to-end ที่สาธิต LoggedModel API ใหม่ ซึ่งรวมถึง params=และ get_logged_model()เมตริกที่เชื่อมโยงกับทั้ง LoggedModel และชุดข้อมูล
  • เทมเพลตการติดตามใหม่ — ครอบคลุมตัวตกแต่ง @mlflow.trace, การบันทึกอัตโนมัติของ OpenAI ด้วยข้อมูลประจําตัว Fabric, ตัวแทน LangChain และ OpenAI Agents SDK

เลือกการ์ดเพื่อเปิดสมุดบันทึกที่กําหนดค่าไว้ล่วงหน้าด้วยเวอร์ชันปลั๊กอิน MLflow และการรับรองความถูกต้องที่เหมาะสม

สกรีนช็อตของหน้าการทดสอบที่ว่างเปล่าที่มีการ์ดเริ่มต้นเทมเพลตโมเดลใหม่และเทมเพลตการติดตามใหม่ถูกเน้น

บันทึกแบบจําลองด้วย LoggedModel

ใน MLflow 3 ทุกการเรียกใช้เพื่อสร้าง log_model() เอนทิตี LoggedModel ที่เชื่อมโยงกับการเรียกใช้ต้นทาง พารามิเตอร์ เมตริก และชุดข้อมูลที่ได้รับการฝึกอบรม ตัวอย่างต่อไปนี้ฝึกโมเดล ElasticNet บนชุดข้อมูล Iris บันทึกเป็น LoggedModel และเชื่อมโยงเมตริกการประเมินกลับไปยัง LoggedModel และชุดข้อมูลนั้น:

import pandas as pd
from sklearn.linear_model import ElasticNet
from sklearn.metrics import mean_squared_error, mean_absolute_error, r2_score
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split

import mlflow
import mlflow.sklearn
from mlflow.entities import Dataset

mlflow.set_experiment("mlflow3-logged-model-demo")

def compute_metrics(actual, predicted):
    rmse = mean_squared_error(actual, predicted)
    mae = mean_absolute_error(actual, predicted)
    r2 = r2_score(actual, predicted)
    return rmse, mae, r2

iris = load_iris()
iris_df = pd.DataFrame(data=iris.data, columns=iris.feature_names)
iris_df["quality"] = (iris.target == 2).astype(int)
train_df, test_df = train_test_split(iris_df, test_size=0.2, random_state=42)

with mlflow.start_run() as training_run:
    # Wrap the training data as an MLflow Dataset so metrics can be linked to it.
    train_dataset: Dataset = mlflow.data.from_pandas(train_df, name="train")
    train_x = train_dataset.df.drop(["quality"], axis=1)
    train_y = train_dataset.df[["quality"]]

    lr = ElasticNet(alpha=0.5, l1_ratio=0.5, random_state=42)
    lr.fit(train_x, train_y)

    # Log the model. `params=` attaches hyperparameters directly to the LoggedModel.
    model_info = mlflow.sklearn.log_model(
        sk_model=lr,
        name="elasticnet",
        params={"alpha": 0.5, "l1_ratio": 0.5},
        input_example=train_x,
    )

    # Retrieve the LoggedModel to inspect its identifier and parameters.
    logged_model = mlflow.get_logged_model(model_info.model_id)
    print(logged_model.model_id, logged_model.params)

    # Compute metrics and link them to both the LoggedModel and the training dataset.
    predictions = lr.predict(train_x)
    rmse, mae, r2 = compute_metrics(train_y, predictions)
    mlflow.log_metrics(
        metrics={"rmse": rmse, "r2": r2, "mae": mae},
        model_id=logged_model.model_id,
        dataset=train_dataset,
    )

หลังจากการรันเสร็จสิ้น โมเดลจะปรากฏเป็น LoggedModel ในสองตําแหน่ง:

  • ส่วน โมเดลที่บันทึก ไว้ในหน้าการทดสอบ
  • แท็บ โมเดลที่บันทึก ไว้ บนหน้ารายละเอียดการเรียกใช้

สกรีนช็อตของหน้ารายละเอียดการเรียกใช้ที่มีส่วน แบบจําลองและการติดตาม ถูกเน้น ซึ่งแสดง LoggedModel ที่เชื่อมโยง

ตรวจสอบ LoggedModel

เลือก LoggedModel จากรายการเพื่อเปิดหน้ารายละเอียด หน้ารายละเอียดจะแสดง:

  • พารามิเตอร์ และ เมตริก ที่บันทึกสําหรับโมเดล
  • ลิงก์การเรียกใช้ต้นทางที่นําทางไปยังการเรียกใช้ที่สร้างแบบจําลอง
  • ชุดข้อมูล ที่ใช้ระหว่างการฝึกอบรม
  • Environment (เวอร์ชัน Python การขึ้นต่อกัน ลายเซ็น)

สกรีนช็อตของแท็บโมเดลในหน้าการทดสอบที่มีรายการโมเดลที่บันทึกไว้ไฮไลต์

เปรียบเทียบ LoggedModels

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

สกรีนช็อตของแท็บ แบบจําลอง ที่มีโมเดลที่บันทึกไว้หลายแบบที่เลือก และแผง การเปรียบเทียบเมตริก ที่แสดงแผนภูมิเส้นสําหรับ RMSE, bagging_fraction และ bagging_freq

ลงทะเบียน LoggedModel

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

จับภาพการติดตาม Generative AI

การติดตามจับการดําเนินการของ LLM หรือแอปพลิเคชัน Generative AI เป็นลําดับชั้นของช่วง การติดตามแต่ละรายการแสดงอินพุต เอาต์พุต เวลาแฝง การใช้โทเค็น และการเรียกใช้เครื่องมือหรือฟังก์ชันใดๆ ใช้ชนิด การทดสอบ AI เพื่อประสบการณ์การติดตามเป็นอันดับแรกที่ดีที่สุด

ติดตามฟังก์ชันกับ @mlflow.trace ตัวตกแต่ง

เพิ่ม @mlflow.trace ไปยังฟังก์ชันใดๆ เพื่อบันทึกอินพุต เอาต์พุต และระยะเวลา ใช้เพื่อ mlflow.update_current_trace() แนบแท็กจากภายในฟังก์ชัน:

import mlflow
import time

mlflow.set_experiment("mlflow3-trace-demo")

@mlflow.trace
def process_user(user_id, action):
    mlflow.update_current_trace(tags={
        "user_id": user_id,
        "action": action,
        "environment": "production",
    })
    time.sleep(1)
    return f"Processed action {action} for user {user_id}"

with mlflow.start_run(run_name="function_call"):
    process_user(user_id=123, action="login")

เมื่อฟังก์ชันที่ตกแต่งเรียกกัน MLflow จะซ้อนช่วงโดยอัตโนมัติ เพื่อให้คุณสามารถเห็นภาพแผนผังการเรียกแบบเต็มในหน้ารายละเอียดการติดตาม

บันทึกการแชท OpenAI โดยอัตโนมัติ

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

import mlflow
from openai import AzureOpenAI
from synapse.ml.fabric.credentials import get_openai_httpx_sync_client

mlflow.openai.autolog()

client = AzureOpenAI(
    api_version="2025-04-01-preview",
    http_client=get_openai_httpx_sync_client(),
)

with mlflow.start_run(run_name="simple_openai_chat") as run:
    response = client.chat.completions.create(
        model="gpt-4.1",
        messages=[
            {"role": "system", "content": "You are a helpful assistant."},
            {"role": "user", "content": "What are the main components of MLflow?"},
        ],
        temperature=0.7,
    )
    print(response.choices[0].message.content)
    print(f"Trace ID: {mlflow.get_last_active_trace_id()}")

สําหรับเฟรมเวิร์กตัวแทน MLflow ยังจัดส่งการบันทึกอัตโนมัติสําหรับ LangChain (mlflow.langchain.autolog()) และ OpenAI Agents SDK เทมเพลตการติดตามใหม่ประกอบด้วยตัวอย่างที่สมบูรณ์และเรียกใช้ได้สําหรับทั้งสองอย่าง รวมถึงการสนทนาการเรียกใช้เครื่องมือแบบหลายเทิร์น

ดูการติดตาม

วิธีดูการติดตาม

  1. เปิดการทดสอบที่มีการเรียกใช้ Generative AI
  2. เลือกแท็บการติดตาม
  3. เลือกการติดตามเพื่อเปิดมุมมองรายละเอียดการติดตาม

สกรีนช็อตของการติดตามที่เปิดอยู่ซึ่งแสดงรายละเอียดการดําเนินการ คุณสมบัติ และรายละเอียดการติดตามพร้อมอินพุตและเอาต์พุต

มุมมองรายละเอียดการติดตามจะแสดง:

  • แผนผังช่วงที่มีการแบ่งลําดับชั้นของคําขอ
  • อินพุต เอาต์พุต และแอตทริบิวต์ สําหรับแต่ละช่วง
  • คู่พร้อมท์/การตอบสนอง สําหรับช่วง LLM (ระบบ ผู้ใช้ ผู้ช่วย)
  • เวลาแฝง การใช้โทเค็น และข้อมูลเมตาของแบบจําลอง (ชื่อ รุ่น พารามิเตอร์)
  • การเรียกใช้เครื่องมือและฟังก์ชันด้วยอินพุต เอาต์พุต และรหัสเอกสาร
  • การติดตามที่ล้มเหลว โดยมีชนิดข้อยกเว้น ข้อความ และการติดตามสแต็ก

รายการการติดตามแสดงรหัสการติดตาม อินพุต เอาต์พุต ระยะเวลา เวลาเริ่มต้น และสถานะ (เสร็จสมบูรณ์ ล้มเหลว หรือกําลังทํางาน) คุณสามารถกรองการติดตามตามผู้ใช้ สถานะ หรือเวลาเริ่มต้น

สกรีนช็อตของรายการการติดตามที่เปิดอยู่ซึ่งแสดง ID การติดตาม อินพุต เอาต์พุต ระยะเวลา เวลาเริ่มต้น และสถานะ

การติดตามที่เกิดจากการรันจะปรากฏบนหน้ารายละเอียดการเรียกใช้ภายใต้แท็บการติดตาม

ย้ายข้อมูลจาก MLflow 2.x

คุณสามารถนํา MLflow 3 มาใช้ทีละน้อย:

  • สมุดบันทึกที่มีอยู่ จะยังคงทํางานต่อไปโดยไม่เปลี่ยนแปลง พารามิเตอร์ดั้งเดิม artifact_path บน log_model() ยังคงทํางานและสร้าง LoggedModel
  • โน้ตบุ๊กใหม่ ควรใช้พารามิเตอร์เพื่อ name ความชัดเจน
  • สถานการณ์ข้ามพื้นที่ทํางานใช้ แพคเกจที่ synapseml-mlflow อัปเกรด คุณไม่จําเป็นต้องปักหมุด mlflow-skinny ไว้ที่ 2.22.2 อีกต่อไป สําหรับขั้นตอนการติดตั้ง โปรดดู จัดการโมเดล MLflow ในพื้นที่ทํางานและแพลตฟอร์ม

สิ่งที่ยังไม่รองรับ

การประเมิน Generative AI (mlflow.genai.evaluate()) ยังไม่ได้เปิดใช้งานใน Fabric มีการวางแผนสําหรับการเปิดตัวในอนาคต