人工智能
2024 年最好的 MLOps 工具指南:Weights & Biases、Comet 及其他
机器学习运维(MLOps)是一套旨在统一开发、部署和维护机器学习模型在生产环境中的过程和原则的实践和原则。它将 DevOps 的原则(如持续集成、持续交付和持续监控)与管理机器学习模型和数据集的独特挑战相结合。
随着机器学习在各个行业的采用率不断增长,对强大的 MLOps 工具的需求也在增加。这些工具有助于简化整个机器学习项目的生命周期,从数据准备和模型训练到部署和监控。在这份综合指南中,我们将探讨一些最好的 MLOps 工具,包括 Weights & Biases、Comet 和其他工具,以及它们的功能、用例和代码示例。
什么是 MLOps?
MLOps,或机器学习运维,是一个多学科领域,它结合了机器学习、软件工程和 DevOps 实践,以简化机器学习模型在生产环境中的部署、监控和维护。通过建立标准化的工作流程、自动化重复任务和实施强大的监控和治理机制,MLOps 启用组织加速模型开发、提高部署可靠性和最大化机器学习计划的价值。
构建和维护机器学习管道
在构建任何基于机器学习的产品或服务时,训练和评估模型在几个真实样本上并不一定意味着您的职责的结束。您需要使该模型可用于最终用户、监控它并在需要时重新训练它以获得更好的性能。传统的机器学习(ML)管道是包括数据收集、数据准备、模型训练和评估、超参数调优(如果需要)、模型部署和扩展、监控、安全和合规以及 CI/CD 等多个阶段的集合。
机器学习工程团队负责处理 ML 管道的前四个阶段,而最后两个阶段属于运维团队的职责。由于大多数组织的机器学习和运维团队之间存在明显的划分,因此两个团队之间的有效合作和沟通对于成功开发、部署和维护 ML 系统至关重要。这两个团队之间的合作被称为 MLOps,它专注于简化将 ML 模型部署到生产环境的过程,以及维护和监控它们。虽然 MLOps 是 ML 和运维的缩写,但不要让它混淆您,因为它可以在数据科学家、DevOps 工程师和 IT 团队之间实现合作。
MLOps 的核心职责是促进 ML 和运维团队之间的有效合作,以帮助加速模型开发和部署的速度,借助持续集成和开发(CI/CD)实践,并通过监控、验证和治理 ML 模型。自动化 CI/CD、易于开发、规模化部署、简化工作流程和增强合作的工具和软件通常被称为 MLOps 工具。在进行了大量研究后,我整理了一份在一些大型科技公司(如 Netflix、Uber、DoorDash、LUSH 等)中使用的各种 MLOps 工具的列表。我们将在本文后面讨论它们。
MLOps 工具类型
什么是 Weights & Biases?
Weights & Biases(W&B)是一个流行的机器学习实验跟踪和可视化平台,帮助数据科学家和 ML 实践者轻松管理和分析其模型。它提供了一套支持 ML 工作流每个步骤的工具,从项目设置到模型部署。
Weights & Biases 的关键功能
- 实验跟踪和日志记录:W&B 允许用户记录和跟踪实验,捕获诸如超参数、模型架构和数据集详细信息等基本信息。通过记录这些参数,用户可以轻松地重现实验并比较结果,促进团队成员之间的合作。
import wandb
<p># 初始化 W&B
wandb.init(project="my-project", entity="my-team")</p>
<p># 记录超参数
config = wandb.config
config.learning_rate = 0.001
config.batch_size = 32</p>
<p># 记录训练过程中的指标
wandb.log({"loss": 0.5, "accuracy": 0.92})
- 可视化和仪表盘:W&B 提供了一个交互式仪表盘来可视化实验结果,使得分析趋势、比较模型和识别改进区域变得容易。这些可视化包括可自定义的图表、混淆矩阵和直方图。仪表盘可以与合作伙伴共享,实现有效的沟通和知识共享。
# 记录混淆矩阵
wandb.log({"confusion_matrix": wandb.plot.confusion_matrix(predictions, labels)})
<p># 记录自定义图表
wandb.log({"chart": wandb.plot.line_series(x=[1, 2, 3], y=[[1, 2, 3], [4, 5, 6]])})
- 模型版本控制和比较:使用 W&B,用户可以轻松地跟踪和比较其模型的不同版本。这个功能在尝试不同的架构、超参数或预处理技术时特别有价值。通过维护模型的历史,用户可以识别出表现最佳的配置并做出数据驱动的决策。
# 保存模型工件
wandb.save("model.h5")
<p># 记录模型的多个版本
with wandb.init(project="my-project", entity="my-team"):</p>
<p># 训练和记录模型版本 1
wandb.log({"accuracy": 0.85})</p>
<p>with wandb.init(project="my-project", entity="my-team"):</p>
<p># 训练和记录模型版本 2
wandb.log({"accuracy": 0.92})
- 与流行 ML 框架的集成:W&B 无缝集成流行的 ML 框架,如 TensorFlow、PyTorch 和 scikit-learn。它提供了轻量级的集成,需要最少的代码修改,允许用户利用 W&B 的功能而不会破坏其现有的工作流程。
import wandb
import tensorflow as tf
<p># 初始化 W&B 并记录训练过程中的指标
wandb.init(project="my-project", entity="my-team")
wandb.tensorflow.log(tf.summary.scalar('loss', loss))
什么是 Comet?
Comet 是一个云端机器学习平台,开发人员可以在这里跟踪、比较、分析和优化实验。它的设计初衷是快速安装和易于使用,允许用户只需几行代码即可开始跟踪其 ML 实验,而无需依赖任何特定的库。
Comet 的关键功能
- 自定义可视化:Comet 允许用户为其实验和数据创建自定义可视化。此外,用户还可以利用社区提供的面板上的可视化,从而增强分析和解释结果的能力。
- 实时监控:Comet 提供有关正在进行的实验的实时统计和图表,允许用户监控其模型的进度和性能。
- 实验比较:使用 Comet,用户可以轻松地比较其实验,包括代码、指标、预测、洞察和更多。这个功能有助于识别表现最佳的模型和配置。
- 调试和错误跟踪:Comet 允许用户调试模型错误、环境特定错误和可能在训练和评估过程中出现的其他问题。
- 模型监控:Comet 启用用户监控其模型并在问题或错误出现时接收通知,确保及时的干预和缓解。
- 协作:Comet 支持团队内和与业务利益相关者之间的协作,实现无缝的知识共享和有效的沟通。
- 框架集成:Comet 可以轻松地与流行的 ML 框架(如 TensorFlow、PyTorch 等)集成,使其成为不同项目和用例的多功能工具。
选择合适的 MLOps 工具
在为您的项目选择 MLOps 工具时,必须考虑诸如团队对特定框架的熟悉程度、项目要求、模型复杂性和部署环境等因素。一些工具可能更适合特定的用例或与现有的基础设施更好地集成。
此外,评估工具的文档、社区支持和设置及集成的便捷性也至关重要。一个文档良好且拥有活跃社区的工具可以显著加速学习曲线并促进故障排除。
有效 MLOps 的最佳实践
为了最大限度地利用 MLOps 工具的优势并确保成功的模型部署和维护,遵循最佳实践至关重要。以下是一些关键考虑因素:
- 一致的日志记录:确保在整个实验过程中一致地记录所有相关的超参数、指标和工件。这促进了可复制性并促进了不同运行之间的有效比较。
- 协作和共享:利用 MLOps 工具的协作功能与团队成员共享实验、可视化和见解。这促进了知识共享并改善了整体项目成果。
- 文档和笔记:在 MLOps 工具内保持全面文档和笔记,以捕获实验详细信息、观察和见解。这有助于理解过去的实验并促进未来的迭代。
- 持续集成和部署(CI/CD):为您的机器学习模型实施 CI/CD 流水线,以确保自动化测试、部署和监控。这简化了部署过程并降低了错误的风险。
在这个例子中,我们初始化一个 W&B 运行,训练一个 ResNet-18 模型用于图像分类任务,并在每个步骤记录训练损失。我们还使用 wandb.save() 保存训练后的模型作为一个工件。W&B 自动跟踪系统指标,如 GPU 使用率,我们可以在 W&B 仪表盘中可视化训练进度、损失曲线和系统指标。
使用 Evidently 进行模型监控
Evidently 是一个用于监控机器学习模型在生产环境中的强大工具。以下是如何使用它来监控数据漂移和模型性能的示例:
import evidently
import pandas as pd
from evidently.model_monitoring import ModelMonitor
from evidently.model_monitoring.monitors import DataDriftMonitor, PerformanceMonitor
<p># 加载参考数据
ref_data = pd.read_csv("reference_data.csv")</p>
<p># 加载生产数据
prod_data = pd.read_csv("production_data.csv")</p>
<p># 加载模型
model = load_model("model.pkl")</p>
<p># 创建数据和性能监控器
data_monitor = DataDriftMonitor(ref_data)
perf_monitor = PerformanceMonitor(ref_data, model)</p>
<p># 运行监控
model_monitor = ModelMonitor(data_monitor, perf_monitor)
model_monitor.run(prod_data)</p>
<p># 生成 HTML 报告
model_monitor.report.save_html("model_monitoring_report.html")
在这个例子中,我们加载参考数据、生产数据和一个训练好的模型。我们创建 DataDriftMonitor 和 PerformanceMonitor 实例来监控数据漂移和模型性能。我们然后使用 ModelMonitor 运行这些监控器,并生成一个包含结果的 HTML 报告。
使用 BentoML 进行部署
BentoML 简化了机器学习模型的部署和服务过程。以下是如何使用 BentoML 包装和部署 scikit-learn 模型的示例:
import bentoml
from bentoml.io import NumpyNdarray
from sklearn.linear_model import LogisticRegression
<p># 训练模型
clf = LogisticRegression()
clf.fit(X_train, y_train)</p>
<p># 定义 BentoML 服务
class LogisticRegressionService(bentoml.BentoService):</p>
<p>@bentoml.api(input=NumpyNdarray(), batch=True)
def predict(self, input_data):</p>
<p>return self.artifacts.clf.predict(input_data)</p>
<p>@bentoml.artifacts([LogisticRegression.artifacts])
def pack(self, artifacts):</p>
<p>artifacts.clf = clf</p>
<p># 包装和保存模型
svc = bentoml.Service("logistic_regression", runners=[LogisticRegressionService()])
svc.pack().save()</p>
<p># 部署模型
svc = LogisticRegressionService.load()
svc.start()
在这个例子中,我们训练一个 scikit-learn LogisticRegression 模型,并定义一个 BentoML 服务来提供预测。我们然后使用 bentoml.Service 包装模型及其工件,并将其保存到磁盘。最后,我们加载保存的模型并启动 BentoML 服务,使其可用于提供预测。
结论
在机器学习领域的快速发展中,MLOps 工具在简化整个机器学习项目生命周期方面发挥着至关重要的作用,从实验和开发到部署和监控。像 Weights & Biases、Comet、MLflow、Kubeflow、BentoML 和 Evidently 这样的工具提供了一系列功能和能力,以支持 MLOps 工作流的各个方面。
通过利用这些工具,数据科学团队可以增强合作、可复制性和效率,同时确保在生产环境中部署可靠且高性能的机器学习模型。随着机器学习在各个行业的采用率持续增长,MLOps 工具和实践的重要性将只会增加,推动创新并使组织能够充分利用人工智能和机器学习技术的潜力。












