人工智能

2024 年最好的 MLOps 工具指南:Weights & Biases、Comet 及其他

mm
MLOps Tools Guide: Weights & Biases, Comet and More

机器学习运维(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 工具类型

MLOps 工具在机器学习生命周期的每个阶段都发挥着至关重要的作用。在本节中,您将看到一份 MLOps 工具在 ML 生命周期各个阶段的角色清单。

管道编排工具

管道编排是指管理和协调机器学习工作流程中涉及的各种任务和组件的过程,从数据预处理和模型训练到模型部署和监控。

MLOps 软件在此领域非常流行,因为它提供了工作流管理、依赖管理、并行化、版本控制和部署自动化等功能,允许组织简化其 ML 工作流程、提高数据科学家和工程师之间的合作,并加速 ML 解决方案的交付。

模型训练框架

此阶段涉及使用标记和未标记数据创建和优化预测模型。在训练期间,模型学习数据中的底层模式和关系,并调整其参数以最小化预测和实际结果之间的差异。您可以将此阶段视为整个 ML 管道中最代码密集的阶段。因此,数据科学家需要积极参与此阶段,因为他们需要尝试不同的算法和参数组合。

机器学习框架(如 scikit-learn)在训练机器学习模型方面非常流行,而 TensorFlow 和 PyTorch 则是训练深度学习模型(由不同神经网络组成)的热门选择。

模型部署和服务平台

一旦开发团队完成模型训练,他们需要将该模型部署到生产环境中,以便模型可以生成预测。这通常涉及将模型部署到服务基础设施中,设置用于通信的 API、模型版本管理、自动扩展和负载均衡以及确保可扩展性、可靠性和性能。

MLOps 工具提供容器化、编排、模型版本管理、A/B 测试和日志记录等功能,允许组织高效地部署和提供 ML 模型。

监控和可观察性工具

开发和部署模型并不是一次性的过程。当您在某个数据分布上开发模型时,您希望模型在生产环境中对同样的数据分布进行预测。但这并不是理想的,因为数据分布在现实世界中容易发生变化,这会导致模型的预测能力下降,这被称为数据漂移。识别数据漂移的唯一方法是持续监控生产环境中的模型。

机器学习中的模型监控和可观察性包括监控预测准确率、延迟、吞吐量和资源利用率等关键指标,以及检测数据分布中的异常、漂移和概念转变。MLOps 监控工具可以自动收集遥测数据、实现指标的实时分析和可视化以及根据预定义的阈值或条件触发警报和操作。

协作和实验跟踪平台

假设您正在与一组数据科学家团队一起开发一个机器学习系统。如果您没有使用跟踪已尝试的模型、谁正在处理管道的哪个部分等的机制,那么很难确定哪些模型已经被尝试过。可能有两个开发人员正在开发相同的功能,这将浪费时间和资源。由于您没有跟踪项目的任何内容,因此您绝对不能将这些知识用于其他项目,从而限制了可复制性。

协作和实验跟踪的 MLOps 工具允许数据科学家和工程师有效地合作、共享知识和重现实验以进行模型开发和优化。这些工具提供实验跟踪、版本控制、血统跟踪和模型注册等功能,允许团队记录实验、跟踪更改并比较不同 ML 模型迭代之间的结果。

数据存储和版本控制

在处理 ML 管道时,您会在预处理阶段对原始数据进行大量更改。出于某些原因,如果您无法立即训练模型,您可能需要存储预处理后的数据以避免重复工作。同样,对于代码,您总是希望继续处理上一个会话中留下的代码。

MLOps 数据存储和版本控制工具提供数据版本控制、工件管理、元数据跟踪和数据血统等功能,允许团队跟踪更改、重现实验并确保不同 ML 模型迭代之间的一致性和可复制性。

计算和基础设施

当您讨论训练、部署和扩展模型时,一切都归结为计算和基础设施。特别是在当前时期,像大型语言模型(LLM)这样的模型正在为几项行业基于生成式人工智能的项目做出贡献。您当然可以在具有 8 GB RAM 和无 GPU 设备的系统上训练一个简单的分类器,但在同样的基础设施上训练一个 LLM 模型将不是明智的选择。

计算和基础设施工具提供容器化、编排、自动扩展和资源管理等功能,允许组织高效地利用云资源、内部基础设施或混合环境来处理 ML 工作负载。

2024 年最好的 MLOps 工具和平台

虽然 Weights & Biases 和 Comet 是著名的 MLOps 初创公司,但还有其他工具可用于支持机器学习生命周期的各个方面。以下是一些值得注意的例子:

  • MLflow:MLflow 是一个开源平台,帮助管理整个机器学习生命周期,包括实验跟踪、可复制性、部署和集中模型注册表。
  • Kubeflow:Kubeflow 是一个开源平台,旨在简化在 Kubernetes 上部署机器学习模型。它提供了一套全面的工具,用于在生产环境中准备数据、训练模型、优化模型、提供预测和监控模型。
  • BentoML:BentoML 是一个 Python 首选的工具,用于在生产环境中部署和维护机器学习模型。它支持并行推理、自适应批处理和硬件加速,实现高效和可扩展的模型服务。
  • TensorBoard:TensorBoard 是由 TensorFlow 团队开发的开源可视化工具,用于机器学习实验。它允许用户跟踪指标、可视化模型图、投影嵌入和共享实验结果。
  • Evidently:Evidently AI 是一个开源的 Python 库,用于在开发、验证和生产环境中监控机器学习模型。它检查数据和模型质量、数据漂移、目标漂移、回归和分类性能。
  • Amazon SageMaker:Amazon Web Services SageMaker 是一个全面的 MLOps 解决方案,涵盖模型训练、实验跟踪、模型部署、监控等。它为数据科学团队提供了一个协作环境,实现了 ML 工作流的自动化和生产环境中模型的持续监控。

什么是 Weights & Biases?

Weights & Biases(W&B)是一个流行的机器学习实验跟踪和可视化平台,帮助数据科学家和 ML 实践者轻松管理和分析其模型。它提供了一套支持 ML 工作流每个步骤的工具,从项目设置到模型部署。

Weights & Biases 的关键功能

  1. 实验跟踪和日志记录:W&B 允许用户记录和跟踪实验,捕获诸如超参数、模型架构和数据集详细信息等基本信息。通过记录这些参数,用户可以轻松地重现实验并比较结果,促进团队成员之间的合作。
import wandb

<p># 初始化 W&amp;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})
  1. 可视化和仪表盘: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]])})
  1. 模型版本控制和比较:使用 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})
  1. 与流行 ML 框架的集成:W&B 无缝集成流行的 ML 框架,如 TensorFlow、PyTorch 和 scikit-learn。它提供了轻量级的集成,需要最少的代码修改,允许用户利用 W&B 的功能而不会破坏其现有的工作流程。
import wandb
import tensorflow as tf

<p># 初始化 W&amp;B 并记录训练过程中的指标
wandb.init(project="my-project", entity="my-team")
wandb.tensorflow.log(tf.summary.scalar('loss', loss))

什么是 Comet?

Comet 是一个云端机器学习平台,开发人员可以在这里跟踪、比较、分析和优化实验。它的设计初衷是快速安装和易于使用,允许用户只需几行代码即可开始跟踪其 ML 实验,而无需依赖任何特定的库。

Comet 的关键功能

  1. 自定义可视化:Comet 允许用户为其实验和数据创建自定义可视化。此外,用户还可以利用社区提供的面板上的可视化,从而增强分析和解释结果的能力。
  2. 实时监控:Comet 提供有关正在进行的实验的实时统计和图表,允许用户监控其模型的进度和性能。
  3. 实验比较:使用 Comet,用户可以轻松地比较其实验,包括代码、指标、预测、洞察和更多。这个功能有助于识别表现最佳的模型和配置。
  4. 调试和错误跟踪:Comet 允许用户调试模型错误、环境特定错误和可能在训练和评估过程中出现的其他问题。
  5. 模型监控:Comet 启用用户监控其模型并在问题或错误出现时接收通知,确保及时的干预和缓解。
  6. 协作:Comet 支持团队内和与业务利益相关者之间的协作,实现无缝的知识共享和有效的沟通。
  7. 框架集成:Comet 可以轻松地与流行的 ML 框架(如 TensorFlow、PyTorch 等)集成,使其成为不同项目和用例的多功能工具。

选择合适的 MLOps 工具

在为您的项目选择 MLOps 工具时,必须考虑诸如团队对特定框架的熟悉程度、项目要求、模型复杂性和部署环境等因素。一些工具可能更适合特定的用例或与现有的基础设施更好地集成。

此外,评估工具的文档、社区支持和设置及集成的便捷性也至关重要。一个文档良好且拥有活跃社区的工具可以显著加速学习曲线并促进故障排除。

有效 MLOps 的最佳实践

为了最大限度地利用 MLOps 工具的优势并确保成功的模型部署和维护,遵循最佳实践至关重要。以下是一些关键考虑因素:

  1. 一致的日志记录:确保在整个实验过程中一致地记录所有相关的超参数、指标和工件。这促进了可复制性并促进了不同运行之间的有效比较。
  2. 协作和共享:利用 MLOps 工具的协作功能与团队成员共享实验、可视化和见解。这促进了知识共享并改善了整体项目成果。
  3. 文档和笔记:在 MLOps 工具内保持全面文档和笔记,以捕获实验详细信息、观察和见解。这有助于理解过去的实验并促进未来的迭代。
  4. 持续集成和部署(CI/CD):为您的机器学习模型实施 CI/CD 流水线,以确保自动化测试、部署和监控。这简化了部署过程并降低了错误的风险。

代码示例和用例

为了更好地理解 MLOps 工具的实际使用,让我们探索一些代码示例和用例。

使用 Weights & Biases 进行实验跟踪

Weights & Biases 提供了与流行的机器学习框架(如 PyTorch 和 TensorFlow)无缝集成。以下是如何使用 PyTorch 记录指标和可视化它们的示例:

import wandb
import torch
import torchvision

<p># 初始化 W&amp;B
wandb.init(project="image-classification", entity="my-team")</p>

<p># 加载数据和模型
train_loader = torch.utils.data.DataLoader(...)
model = torchvision.models.resnet18(pretrained=True)</p>

<p># 设置训练循环
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)
criterion = torch.nn.CrossEntropyLoss()</p>

<p>for epoch in range(10):</p>

<p>for inputs, labels in train_loader:</p>

<p>optimizer.zero_grad()
outputs = model(inputs)
loss = criterion(outputs, labels)
loss.backward()
optimizer.step()</p>

<p># 记录指标
wandb.log({"loss": loss.item()})</p>

<p># 保存模型
torch.save(model.state_dict(), "model.pth")
wandb.save("model.pth")

在这个例子中,我们初始化一个 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")

在这个例子中,我们加载参考数据、生产数据和一个训练好的模型。我们创建 DataDriftMonitorPerformanceMonitor 实例来监控数据漂移和模型性能。我们然后使用 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 工具和实践的重要性将只会增加,推动创新并使组织能够充分利用人工智能和机器学习技术的潜力。

我已经沉浸在了令人着迷的机器学习和深度学习世界中五年了。我的热情和专业知识让我为超过50个不同的软件工程项目做出了贡献,特别关注AI/ML。我的持续的好奇心也让我对自然语言处理产生了兴趣,这是一个我渴望进一步探索的领域。