机器学习模型是经过训练以识别某些模式类型的文件。 通过一组数据训练模型,并为其提供一种算法,该算法用于对数据集进行推理和学习。 训练模型后,可以使用它来推理以前从未见过的数据,并预测该数据。
在 MLflow 中,机器学习模型可以包含多个模型版本。 在这里,每个版本都可以表示模型迭代。
本文介绍如何:
- 在 Microsoft Fabric 中创建机器学习模型
- 管理和跟踪模型版本
- 比较各版本的模型性能
- 应用模型进行评分和推理
创建机器学习模型
在 MLflow 中,机器学习模型包括标准打包格式。 此格式允许在各种下游工具中使用这些模型,包括 Apache Spark 上的批处理推理。 该格式定义了一种约定,用于以不同的“变体”保存模型,使得不同的下游工具可以理解。
可以直接从 Fabric UI 创建机器学习模型。 MLflow API 还可以直接创建模型。
若要从 UI 创建机器学习模型,请执行以下作:
- 选择现有的数据科学工作区,或 创建新的工作区。
- 通过工作区或使用“创建”按钮创建新项:
- 创建模型后,可以开始添加模型版本来跟踪运行指标和参数。 将试验运行注册或保存到现有模型。
您还可以直接通过您的创作体验,利用 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}")
应用标记后,可以直接在模型版本详细信息页上查看它们。 此外,可以随时从此页面添加、更新或删除标记。
比较和筛选机器学习模型
若要比较和评估机器学习模型版本的质量,可以比较所选版本之间的参数、指标和元数据。
直观比较机器学习模型
可以直观地比较现有模型中的运行。 视觉比较允许在多个版本之间轻松导航和排序。
若要对比运行结果,您可以:
- 选择包含多个版本的现有机器学习模型。
- 选择“ 视图 ”选项卡,然后导航到 “模型”列表 视图。 还可以直接从详细信息视图中选择“ 查看模型”列表 的选项。
- 可以自定义表中的列。 展开“ 自定义列 ”窗格。 在此处,可以选择要查看的属性、指标、标记和超参数。
- 最后,可以在指标比较窗格中选择多个版本来比较其结果。 在此窗格中,您可以通过更改图表标题、可视化类型、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)
应用机器学习模型
训练完模型后,可以将该模型应用于未见过的数据来生成预测。 我们称此模型使用技术 评分 或 推理。
后续步骤: