使用 Seldon Alibi 进行模型监控

简介: 虽然 Seldon 使在生产中部署和服务模型变得容易,但一旦部署,我们如何知道该模型是否在做正确的事情?训练期间的良好表现并不一定意味着在生产运行几个月后表现良好。 现实世界中发生的事情是我们无法解释的,例如:输入数据逐渐偏离训练数据,以及异常值和偏差。

模型监控如何工作?

通常,当我们谈论模型监控时,我们对以下一项或多项感兴趣:

  • 数据漂移:现实世界中的数据开始与训练数据不同。它漂移得越远,模型就越有可能以意想不到的方式表现。
  • 异常值:超出我们预期范围的输入。在这种情况下,模型可能会产生毫无意义的输出。
  • 偏见(Bias):该模型以我们在训练期间没有预测的方式显示出对某些预测的偏见。处理偏见本身就是一个复杂的话题,但识别它是解决它的第一步。

我们可以使用这种监控来做出决策,例如:何时重新训练或获取新数据。

您可能已经熟悉在更传统的设置中进行监控,例如:Web 应用程序,其任务是捕获错误和服务器崩溃。对于模型,监控要复杂一些,这主要是因为每个模型都是不同的。因此,需要围绕我们想要使用的特定模型和训练数据构建监控系统。


Alibi Detect 简介

与 Seldon Core 一样,Alibi Detect 运行在 Kubernetes 之上。为了监控模型,您需要创建一个称为检测器的东西。每个模型都需要自己的检测器,专门为该模型部署

与模型一样,检测器在容器内运行。 Seldon 再次利用了 Kubernetes 作为容器编排引擎的优势,因此,您的检测器将以与模型相同的可靠性运行。

开箱即用的 Alibi 可以监控数据漂移异常值,这两个最常见的事情可能会影响您的模型。

它还支持所谓的对抗性检测。围绕此功能的文档有点晦涩,所以请允许我尝试一个简单的解释:假设某个怀有恶意的人试图让您的模型做一些您不打算做的事情,即试图破解您的模型。对抗性检测是一种自动发现攻击者可以利用的输入的技术,它可以帮助您避免此类攻击。因为通常很难预测模型的行为方式,所以在不使用对抗检测的情况下也很难发现安全漏洞。

Alibi 的所有文档都可以在此处获得。现在让我们看看它的实际效果。


监控模型

检测器没有什么太神秘的地方:它确实是一种特殊的模型,与任何模型一样,需要使用一些数据进行训练。 Alibi Detect 包括一个 Python 库来帮助您做到这一点,以及非常好的文档。

但通常你不需要从头开始训练检测器,因为Alibi 还附带了一堆针对各种用例的预训练检测器,这些是最简单的入门方法。为了说明这是如何工作的,让我们看一个例子,使用带有漂移检测器的图像分类器。

您可以在 Seldon 文档中找到此示例的所有代码。与其在这里重复代码,我只给你一个大纲。


部署图像分类器

我们的第一件事是部署图像分类模型。 此示例使用名为 CIFAR-10 数据集的数据集,该数据集包含 60,000 张图像,通常用于演示目的。

该模型在 Seldon 为 Tensorflow 预先构建的 Docker 镜像上运行。 为了部署它,我们首先创建一个 Kubernetes 清单(其内容在上面提到的 Seldon 文档页面上),包含所有模型的配置,然后运行:

kubectl apply -f my_config.yaml
复制代码


完成后,我们就有了一个模型并运行起来。这是一个相对简单的模型:每当您向其展示图像时,它都会以汽车、鸟、飞机、房屋等类作为响应。


部署漂移检测器

我们可以有理由相信该模型在与训练图像相似的图像上表现良好。例如,训练数据中有很多动物的图片;马、牛、羊等。如果这些照片中的大多数都是在光线充足的户外、有很多草的乡村景观中拍摄的,那么类似的照片应该不会有问题。

另一方面,在光线昏暗的游泳池里戴帽子的马可能会从模型中抛出去。虽然这样的一次性事情没什么大不了的,但如果模型看到的图像类型的平均有很大的偏差,那么我们可能会遇到麻烦。

要检测漂移,我们需要查看大量案例。 Seldon 漂移检测器的工作原理是使用指定的批量大小收集一堆观察结果。在此示例中,它被配置为使用最近的 5000 个观测值来查找漂移

要设置它,我们需要做两件事:

首先部署漂移检测器。这就像部署模型一样简单。 Alibi 附带了一个 Docker 镜像(alibi-detect-server),我们从中将检测器部署为 Seldon 上的容器。

其次,我们需要改编它,以便每次模型接收到输入时,检测器都会接收到一个事件。这就是漂移检测器能够观察模型正在做什么的方式。

值得一提的是,Seldon 本身没有流式传输事件的功能,而是依赖另一个名为 Knative 的开源项目来执行此操作。因此,要使用 Alibi,您还需要在 Seldon 实例上设置 Knative。安装 Knative 后,最后的设置是创建一个称为触发器的东西,以确保每次模型接收到推理请求时,检测器都会收到一个事件

上述所有设置步骤都包含在前面提到的 Seldon 文档页面中。


从 Alibi 中获取指标

Alibi detect 会在检测到诸如漂移或异常值之类的东西时将警报记录到其应用程序日志中,并且可以使用 kubectl logs 命令通过 Kubernetes 访问这些日志。

日志本身的用途有限。通常,您需要在此基础上构建仪表板和警报系统。例如,如果检测到模型漂移,您可能希望通过某种方式向团队发送通知。

好消息是,这些事情都可以通过标准的警报和监控工具来完成。例如,您可能会选择使用您的云提供商拥有的任何东西,例如: Google Cloud Monitoring。

然而,构建仪表板和为模型做警报是一个足够大的话题,值得单独写一篇博文,所以我们现在不会讨论所有这些内容。


Alibi 适合你吗?

首先,如果您还使用 Seldon 来服务模型,那么 Alibi 是一个自然的选择,因为这两个工具的集成度非常好。

单独使用 Alibi 通常是没有意义的,也就是说,如果你的模型使用了 Seldon 以外的东西。那是因为要使用 Alibi,无论如何您都需要设置 Kubernetes 和 Seldon,即使您不打算将其用于服务

Alibi Detect 成熟,具有广泛的功能。我们在上面的示例中只讨论了图像,但它适用于许多不同类型的数据,包括表格、图像、时间序列和文本。

大量的选择使其很容易适用于绝大多数机器学习应用程序。虽然为您选择正确的算法确实需要大量的数据科学专业知识,但 Seldon 已经仔细考虑过使其检测器的配置和重新配置变得容易,这样您就可以专注于数据科学和机器学习,而不会有太多乱七八糟的基础设施。

在本系列的下一部分中,我们将结合 Seldon 与 ZenML,并展示如何将 Seldon 部署集成到您的 ML 训练流水线中。


相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
存储 人工智能 Prometheus
ML 模型监控最佳工具(上)
如果您迟早将模型部署到生产环境,那么您将开始寻找 ML 模型监控工具。 当您的 ML 模型影响业务时,您只需要了解“事物是如何工作的”。 当事物停止工作时,你真正感受到这一点的第一刻。如果没有设置模型监控,您可能不知道哪里出了问题以及从哪里开始寻找问题和解决方案。
|
存储 缓存 数据可视化
(七)解析Streamlit的数据元素:探索st.dataframe、st.data_editor、st.column_config、st.table、st.metric和st.json的神奇之处(上)
(七)解析Streamlit的数据元素:探索st.dataframe、st.data_editor、st.column_config、st.table、st.metric和st.json的神奇之处
7334 0
|
11月前
|
数据采集 机器学习/深度学习 自然语言处理
NLP助力非结构化文本抽取:实体关系提取实战
本文介绍了一套基于微博热帖的中文非结构化文本分析系统,通过爬虫代理采集数据,结合NLP技术实现实体识别、关系抽取及情感分析。核心技术包括爬虫模块、请求配置、页面采集和中文NLP处理,最终将数据结构化并保存为CSV文件或生成图谱。代码示例从基础正则规则到高级深度学习模型(如BERT-BiLSTM-CRF)逐步演进,适合初学者与进阶用户调试与扩展,展现了中文NLP在实际场景中的应用价值。
744 3
NLP助力非结构化文本抽取:实体关系提取实战
|
开发框架 前端开发 小程序
跨平台开发框架的选择应该考虑哪些因素?
【10月更文挑战第25天】综合考虑以上因素,能够帮助您更准确地选择适合项目需求的跨平台开发框架,从而提高项目的成功率和开发效率,为用户提供更好的应用体验。
|
设计模式 网络协议 Java
10.桥接模式设计思想
本文介绍了桥接模式的设计思想和实现方法。桥接模式通过将抽象部分与实现部分分离,使它们可以独立变化,解决了多层继承带来的复杂性和耦合性问题。文章详细讲解了桥接模式的由来、定义、应用场景和实现步骤,并通过具体实例演示了如何在支付场景中使用桥接模式。此外,还讨论了桥接模式的优缺点及其适用环境,提供了丰富的代码示例和进一步学习的资源链接。
482 2
|
数据采集 机器学习/深度学习 测试技术
数据清洗与过滤中,如何确定哪些数据是高质量的?
数据清洗与过滤中,如何确定哪些数据是高质量的?
|
JSON 搜索推荐 API
Python的web框架有哪些?小项目比较推荐哪个?
【10月更文挑战第15天】Python的web框架有哪些?小项目比较推荐哪个?
904 1
|
SQL Java 关系型数据库
MyBatis-Plus 分页魅力绽放!紧跟技术热点,带你领略数据分页的高效与便捷
【8月更文挑战第29天】在 Java 开发中,数据处理至关重要,尤其在大量数据查询与展示时,分页功能尤为重要。MyBatis-Plus 作为一款强大的持久层框架,提供了便捷高效的分页解决方案。通过封装数据库分页查询语句,开发者能轻松实现分页功能。在实际应用中,只需创建 `Page` 对象并设置页码和每页条数,再通过 `QueryWrapper` 构建查询条件,调用 `selectPage` 方法即可完成分页查询。MyBatis-Plus 不仅生成分页 SQL 语句,还自动处理参数合法性检查,并支持条件查询和排序等功能,极大地提升了系统性能和稳定性。
630 0
|
监控 Ubuntu Linux
在Linux中,如何在Linux中配置高可用性(HA)?
在Linux中,如何在Linux中配置高可用性(HA)?
|
NoSQL 关系型数据库 MySQL
软件测试之【基于开源商城系统fecmall功能测试项目实例】
软件测试之【基于开源商城系统fecmall功能测试项目实例】
1402 0
软件测试之【基于开源商城系统fecmall功能测试项目实例】