Python生态下ML工具:MLflow、DVC、Evidently、ZenML

Python常用NLP:fastText、SentencePiece、TextBlob、Aeon、SpeedML,本文继续汇总介绍几个Python生态ML类库。

MLOps和机器学习可观测性领域,近年来涌现许多优秀的开源项目,它们致力于解决机器学习生命周期中的监控、评估、实验跟踪、模型部署等关键问题:

  • Evidently:评估和可观测性AI框架
  • ZenML:AI管道和智能体平台

MLflow

官网,开源(GitHub,26.9K Star,6K Fork)端到端ML生命周期管理平台,解决如下核心需求:

  • 实验跟踪和比较
  • 模型打包和版本管理
  • 模型注册和部署
  • 项目打包和可复现性

核心技术原理:

  • 分布式追踪后端:支持文件、SQL、HTTP后端
  • 统一模型格式:MLmodel标准格式打包模型
  • REST API服务:模型服务标准化接口
  • 插件化存储:支持多种Artifact存储后端

中文文档

WanDB

有待学习。

DVC

官网,Data Version Control,开源(GitHub,15.7K Star,1.3K Fork)数据和模型版本控制系统。

解决核心需求:

  • 大数据集版本管理
  • 机器学习流水线管理
  • 实验可复现性
  • 数据和模型存储优化

核心技术原理:

  • Git扩展:在Git之上添加大数据版本控制
  • 内容寻址存储:基于哈希的数据去重和存储
  • 依赖图跟踪:自动跟踪数据、代码、模型依赖关系
  • 远程存储集成:S3、GCS、Azure Blob等云存储支持

Evidently

官网,专为ML模型监控而设计的开源(GitHub,7.7K Star,873 Fork)Python库,帮助数据科学家和ML工程师快速发现数据漂移、模型性能下降等问题。提供丰富的可视化报告和实时监控功能,支持分类、回归、排序等多种任务类型,是MLOps工具链中不可或缺的一环。

特性

  • 数据漂移检测:自动检测特征分布的变化,及时发现数据质量问题
  • 模型性能监控:跟踪模型准确率、精确率、召回率等关键指标
  • 可视化报告:生成交互式HTML报告,直观展示监控结果
  • 实时监控面板:支持构建实时监控仪表板,集成到生产环境
  • 多种任务支持:覆盖分类、回归、推荐等常见机器学习任务
  • 无缝集成:可与pandas、sklearn等主流库完美配合

安装

基于pip安装:pip install evidently

数据漂移是指训练数据与生产环境数据分布发生变化,会导致模型性能下降。通过evidently可快速检测训练集和当前数据之间的分布差异。

以下示例演示如何生成数据漂移报告,比较参考数据集和当前数据集的特征分布,帮助识别哪些特征发生了显著变化。

py 复制代码
from evidently.report import Report
from evidently.metric_preset import DataDriftPreset
import pandas as pd

# 准备数据
reference_data = pd.read_csv('train_data.csv')
current_data = pd.read_csv('production_data.csv')
# 创建数据漂移报告
report = Report(metrics=[DataDriftPreset()])
report.run(reference_data=reference_data, current_data=current_data)
# 保存报告
report.save_html('data_drift_report.html')

对于分类任务,evidently提供全面的性能指标分析,包括混淆矩阵、ROC曲线、各类别的精确率和召回率等。

py 复制代码
from evidently.report import Report
from evidently.metric_preset import ClassificationPreset

# 假设已有预测结果
report = Report(metrics=[ClassificationPreset()])
report.run(
    reference_data=reference_data,
    current_data=current_data,
    column_mapping={'target': 'label', 'prediction': 'pred'}
)
report.save_html('classification_report.html')

针对回归任务,evidently能够计算MAE、RMSE、R²等常用指标。生成回归模型的详细评估报告,分析预测值与真实值的误差分布,帮助识别模型在哪些数值区间表现较差。

py 复制代码
from evidently.metric_preset import RegressionPreset

report = Report(metrics=[RegressionPreset()])
report.run(
    reference_data=reference_data,
    current_data=current_data,
    column_mapping={'target': 'price', 'prediction': 'predicted_price'}
)
report.save_html('regression_report.html')

evidently允许用户定义自己的监控指标和阈值。

以下代码演示如何创建自定义的数据质量检测测试套件,设置特定的漂移阈值。

当数据集中超过30%的特征发生漂移时,测试将失败并触发告警,可用于自动化监控流程。

py 复制代码
from evidently.test_suite import TestSuite
from evidently.tests import TestShareOfDriftedColumns

# 创建测试套件
test_suite = TestSuite(tests=[
    TestShareOfDriftedColumns(lt=0.3)  # 漂移特征占比小于30%
])
test_suite.run(reference_data=reference_data, current_data=current_data)
test_suite.save_html('test_results.html')
# 获取测试结果
results = test_suite.as_dict()
ifnot results['summary']['all_passed']:
    print("警告:检测到数据质量问题!")

对于生产环境,evidently支持将监控结果输出为JSON格式,便于集成到监控系统中。

下面展示如何定期收集监控指标并存储,可以配合Grafana、Prometheus等工具构建完整的监控体系,实现7×24小时的模型健康度跟踪。

py 复制代码
from evidently.ui.workspace import Workspace
from evidently.ui.dashboards import DashboardConfig
import json

workspace = Workspace.create("monitoring_workspace")
# 生成报告并保存到工作区
report = Report(metrics=[DataDriftPreset()])
report.run(reference_data=reference_data, current_data=current_data)
# 导出为JSON用于集成
metrics_json = report.json()
with open('metrics.json', 'w') as f:
    json.dump(json.loads(metrics_json), f)

ZenML

官网,开源(GitHub,5.5K Star,631 Fork)的MLOps平台,为ML和AI工程师设计,从传统ML到LLM再到Agent全覆盖。核心功能:编写可在任何基础设施上运行的工作流(Pipeline),自动容器化和追踪代码,记录每次运行的指标、日志和元数据,集成MLflow、Langfuse、Sagemaker、GCP Vertex等现有工具,抽象掉基础设施复杂性,快速迭代实验。

用户:Airbus、AXA、Rivian等大厂

核心功能

  • 统一Pipeline框架,无论是训练经典ML模型、运行LLM工作流还是跑Agent循环,都用同样的Pipeline抽象,不用学多套工具
  • 跨基础设施运行,本地开发用Docker,生产环境切K8s或Sagemaker,Pipeline代码一行不改,只要切换Stack配置就行
  • 自动化能力强大,代码自动容器化,依赖自动管理,运行追踪自动记录,省去大量手动配置
  • 集成生态丰富,支持MLflow、Weights & Biases、Langfuse、LangGraph、Kubeflow、Vertex AI等40+工具和平台,不用重写现有代码
  • MCP服务器集成,通过Claude Desktop、Cursor等MCP兼容客户端用自然语言查询Pipeline、分析运行、触发部署,"这周哪些Pipeline失败了"秒出结果
  • VS Code扩展,直接在编辑器里管理Pipeline,不用切换到Web界面,开发效率翻倍

特色:

  • 客户端-服务器架构:让团队协作更顺畅,本地开发用zenml[local],生产环境分离部署提高稳定性
  • 元数据追踪系统:自动记录Pipeline每次运行的所有细节,版本、参数、指标、日志全都有,可复现性100%保证
  • 抽象化基础设施:切换云平台就像换衣服一样简单,代码不动改配置文件就行

实战

安装

bash 复制代码
pip install "zenml[server]" # 带服务端功能的完整版
pip install zenml # 轻量客户端版本
zenml init
zenml up
zenml login <server-url>

浏览器打开http://localhost:8237

Python SDK示例

py 复制代码
from zenml import pipeline, step

@step
def load_data() -> dict:
    return {"data": [1, 2, 3, 4, 5]}

@step
def process_data(data: dict) -> dict:
    processed = [x * 2 for x in data["data"]]
    return {"processed": processed}

@pipeline
def training_pipeline():
    data = load_data()
    processed = process_data(data)
    return processed

training_pipeline()

以及

py 复制代码
from zenml import pipeline, step
from sklearn.ensemble import RandomForestClassifier
import pandas as pd

@step
def train_model(data: pd.DataFrame) -> RandomForestClassifier:
    model = RandomForestClassifier()
    model.fit(data.drop("target", axis=1), data["target"])
    return model

@step
def evaluate_model(model: RandomForestClassifier, test_data: pd.DataFrame) -> float:
    return model.score(test_data.drop("target", axis=1), test_data["target"])

@pipeline
def ml_pipeline():
    model = train_model(data)
    accuracy = evaluate_model(model, test_data)
py 复制代码
from zenml import pipeline, step
from langgraph import create_agent

@step
def run_agent(query: str) -> dict:
    agent = create_agent()
    result = agent.run(query)
    return result

@pipeline
def agent_pipeline():
    result = run_agent("Analyze market trends")

生产环境部署,基于Helm

bash 复制代码
helm repo add zenml https://zenml-io.github.io/zenml
helm install zenml zenml/zenml

基于Docker:docker run -it -p 8080:8080 zenmldocker/zenml:latest

Stack配置,定义基础设施组合

bash 复制代码
# 查看可用Stack
zenml stack list
# 创建新Stack(例如配置AWS环境)
zenml stack register aws_stack \
  -o sagemaker \
  -a s3 \
  -c aws_ecr
# 切换Stack
zenml stack set aws_stack

集成配置示例,连接现有工具

bash 复制代码
# 安装MLflow集成
zenml integration install mlflow

# 配置MLflow实验追踪器
zenml experiment-tracker register mlflow_tracker \
  --flavor=mlflow \
  --tracking_uri=http://localhost:5000

# 更新Stack使用MLflow
zenml stack update -e mlflow_tracker

MCP服务器设置,自然语言查询Pipeline

bash 复制代码
# 1. 下载ZenML MCP Server的.dxt文件
#    从 https://github.com/zenml-io/mcp-zenml
# 2. 拖到Claude Desktop设置里
# 3. 配置ZenML服务器URL和API密钥
# 4. 在Claude里问:
#    "这周哪些Pipeline运行失败了?"
#    "显示所有客户流失模型的准确率指标"
#    "用生产数据触发最新的欺诈检测Pipeline"

VS Code扩展安装

相关推荐
小何code1 个月前
人工智能【第46篇】AI系统的模型监控与运维:MLOps实战指南
模型部署·mlops·mlflow·机器学习运维·模型监控
QC·Rex2 个月前
MLOps 平台架构设计:从 0 到 1 构建企业级机器学习运维系统
ci/cd·kubernetes·自动化部署·mlops·机器学习运维·平台架构·模型监控
AI精钢3 个月前
Agent Harness,正在成为新的 MLOps
人工智能·自然语言处理·语音识别·mlops·ai agent·agentops·ai engineering
Johnny.Cheung5 个月前
MLOps是什么?AWS-Azure-GCP
llm·azure·aws·mlops·gcp
猿小羽5 个月前
AI 2.0 时代全栈开发实战:从 Spring AI 到 MLOps 的进阶指南
ai·llm·mlops·rag·vector database·spring ai·prompt engineering
DB!!!6 个月前
cube-studio手动部署label_studio至“标注平台”(启动企业版的功能)
人工智能·机器学习·rancher·mlops
数据与后端架构提升之路6 个月前
2025:把“大模型”写进“数据闭环”——从自动驾驶到具身机器人,我如何用数据与算法做可落地的智能系统
数据湖·mlops·vla·流批一体·世界模型·自动驾驶数据闭环·occupancy
腾讯数据架构师7 个月前
海光dcu 虚拟化适配
云原生·kubernetes·mlops·dcu·海光·cube studio·vdcu
九章云极AladdinEdu8 个月前
GitHub Actions for AI:构建企业级模型CI/CD流水线
自动化测试·模型部署·mlops·github actions·深度学习调试·ai ci/cd·企业级流水线