Microsoft Fabric 中的机器学习模型

机器学习模型是经过训练以识别某些模式类型的文件。 通过一组数据训练模型,并为其提供一种算法,该算法用于对数据集进行推理和学习。 训练模型后,可以使用它来推理以前从未见过的数据,并预测该数据。

MLflow 中,机器学习模型可以包含多个模型版本。 在这里,每个版本都可以表示模型迭代。

本文介绍如何:

  • 在 Microsoft Fabric 中创建机器学习模型
  • 管理和跟踪模型版本
  • 比较各版本的模型性能
  • 应用模型进行评分和推理

创建机器学习模型

在 MLflow 中,机器学习模型包括标准打包格式。 此格式允许在各种下游工具中使用这些模型,包括 Apache Spark 上的批处理推理。 该格式定义了一种约定,用于以不同的“变体”保存模型,使得不同的下游工具可以理解。

可以直接从 Fabric UI 创建机器学习模型。 MLflow API 还可以直接创建模型。

若要从 UI 创建机器学习模型,请执行以下作:

  1. 选择现有的数据科学工作区,或 创建新的工作区
  2. 通过工作区或使用“创建”按钮创建新项:
    1. 工作区
      1. 选择工作区。
      2. 选择“新建项”。
      3. “分析和训练数据”下选择“ML 模型”。 “新建项”菜单的屏幕截图,其中突出显示了“分析和训练数据”部分下的“ML 模型”选项。
    2. “创建”按钮:
      1. 从垂直菜单中选择“创建”,可在...中找到。 位于垂直菜单导航中的“创建”按钮的屏幕截图。
      2. 数据科学下选择 ML 模型 “创建”菜单的屏幕截图,其中显示了“数据科学”部分下的“ML 模型”选项。
  3. 创建模型后,可以开始添加模型版本来跟踪运行指标和参数。 将试验运行注册或保存到现有模型。

您还可以直接通过您的创作体验,利用 mlflow.register_model() API 创建机器学习模型。 如果具有给定名称的已注册机器学习模型不存在,API 会自动创建它。

import mlflow

model_uri = "runs:/{}/model-uri-name".format(run.info.run_id)
mv = mlflow.register_model(model_uri, "model-name")

print("Name: {}".format(mv.name))
print("Version: {}".format(mv.version))

管理机器学习模型中的版本

机器学习模型包含用于简化跟踪和比较的模型版本的集合。 在模型中,数据科学家可以跨各种模型版本导航,以浏览基础参数和指标。 数据科学家还可以跨模型版本进行比较,以确定较新的模型是否会产生更好的结果。

跟踪机器学习模型

机器学习模型版本表示已注册用于跟踪的单个模型。

机器学习模型版本详细信息页的屏幕截图,其中显示了指标、参数和跟踪信息。

每个模型版本都包含以下信息:

  • 创建时间:创建模型的日期和时间。
  • 运行名称:用于创建此特定模型版本的试验运行的标识符。
  • 超参数:超参数保存为键值对。 键和值都是字符串。
  • 指标:运行保存为键值对的指标。 值为数字。
  • 模型架构/签名:模型输入和输出的说明。
  • 记录的文件:以任何格式记录的文件。 例如,可以记录图像、环境、模型和数据文件。
  • 标记:作为要运行的键值对的元数据。

将标记应用于机器学习模型

使用模型版本的 MLflow 标记,用户可以将自定义元数据附加到 MLflow 模型注册表中已注册模型的特定版本。 这些标记存储为键值对,有助于组织、跟踪和区分模型版本,从而更轻松地管理模型生命周期。 标记可用于表示模型的目的、部署环境或任何其他相关信息,从而促进团队内更高效的模型管理和决策。

此代码演示如何使用 Scikit-learn 训练 RandomForestRegressor 模型,使用 MLflow 记录模型和参数,然后使用自定义标记在 MLflow 模型注册表中注册模型。 这些标记提供有用的元数据,例如项目名称、部门、团队和项目季度,以便更轻松地管理和跟踪模型版本。

import mlflow.sklearn
from mlflow.models import infer_signature
from sklearn.datasets import make_regression
from sklearn.ensemble import RandomForestRegressor

# Generate synthetic regression data
X, y = make_regression(n_features=4, n_informative=2, random_state=0, shuffle=False)

# Model parameters
params = {"n_estimators": 3, "random_state": 42}

# Model tags for MLflow
model_tags = {
    "project_name": "grocery-forecasting",
    "store_dept": "produce",
    "team": "stores-ml",
    "project_quarter": "Q3-2023"
}

# Log MLflow entities
with mlflow.start_run() as run:
    # Train the model
    model = RandomForestRegressor(**params).fit(X, y)
    
    # Infer the model signature
    signature = infer_signature(X, model.predict(X))
    
    # Log parameters and the model
    mlflow.log_params(params)
    mlflow.sklearn.log_model(model, artifact_path="sklearn-model", signature=signature)

# Register the model with tags
model_uri = f"runs:/{run.info.run_id}/sklearn-model"
model_version = mlflow.register_model(model_uri, "RandomForestRegressionModel", tags=model_tags)

# Output model registration details
print(f"Model Name: {model_version.name}")
print(f"Model Version: {model_version.version}")

应用标记后,可以直接在模型版本详细信息页上查看它们。 此外,可以随时从此页面添加、更新或删除标记。

显示自定义标记(如项目名称和团队信息)的模型版本详细信息页的屏幕截图。

比较和筛选机器学习模型

若要比较和评估机器学习模型版本的质量,可以比较所选版本之间的参数、指标和元数据。

直观比较机器学习模型

可以直观地比较现有模型中的运行。 视觉比较允许在多个版本之间轻松导航和排序。

模型比较视图的屏幕截图,其中显示了具有指标和参数的多个机器学习模型版本。

若要对比运行结果,您可以:

  1. 选择包含多个版本的现有机器学习模型。
  2. 选择“ 视图 ”选项卡,然后导航到 “模型”列表 视图。 还可以直接从详细信息视图中选择“ 查看模型”列表 的选项。
  3. 可以自定义表中的列。 展开“ 自定义列 ”窗格。 在此处,可以选择要查看的属性、指标、标记和超参数。
  4. 最后,可以在指标比较窗格中选择多个版本来比较其结果。 在此窗格中,您可以通过更改图表标题、可视化类型、X 轴、Y 轴等来自定义图表。

使用 MLflow API 比较机器学习模型

数据科学家还可以使用 MLflow 在工作区中保存的多个模型之间进行搜索。 请访问 MLflow 文档 ,浏览其他用于模型交互的 MLflow API。

from pprint import pprint

client = MlflowClient()
for rm in client.list_registered_models():
    pprint(dict(rm), indent=4)

应用机器学习模型

训练完模型后,可以将该模型应用于未见过的数据来生成预测。 我们称此模型使用技术 评分推理

后续步骤: