【翻译】我们为什么要关注AIOps?

文章探讨了在软件开发中引入机器学习后,如何管理和维护复杂度的增加。AIOps作为应对策略,强调了数据版本化、模型测试和版本控制、监控SLI的重要性,以及可视化影响以确保人工智能系统的可靠性和审计能力。文章指出,随着AI在生产环境中的应用增多,需要借鉴和扩展DevOps实践,以实现更好的持续交付和管理。
摘要由CSDN通过智能技术生成

我们这些以生产软件或管理软件团队为生的人,最终得到的报酬是改善业务流程,无论是使汽车自主化以提高安全性,节省人们的驾驶时间并降低成本;优化工业流程以提高生产率;还是使人工任务自动化。

我们中的大多数人通过编写 "经典 "程序,以高度可追溯的方式解决问题,但即使这些程序也会很快变得非常复杂。回想一下你参加过的所有软件项目,它们都超过了最初分配的时间,或者更糟糕的是,由于它们的复杂性不再能证明它们会带来的好处而被完全取消。随着时间的推移,我们在开发过程中加入了许多不同的方法,正如Container Solutions的联合创始人Jamie Dobson在WTF的其他地方所探讨的那样,有的成功,有的不太成功。

"

DevOps "是云原生文化的核心部分,也是其中之一,它特别注重持续交付和通过更短的反馈环路提高代码质量。

如果这还不够复杂,让我们再增加一层复杂性:机器学习系统依靠的是随机地从输入的数据中提取信息的代码,使决策过程实际上无法追踪。

首先,你需要生成一个标记的数据集。此外,你需要收集更多的计算资源,并让你的数据科学家可以使用它们。然后你在测试数据集上报告你的结果,一切都很好,人们希望把它带入生产。

现在你的问题真正开始了,因为事实证明,实际的人工智能代码往往是整个项目中最小的部分。你需要扩大你已经很复杂的DevOps管道,不仅要运送代码,还要运送随机的黑盒子。然而,在这个过程中,你还需要对黑盒和代码所做的事情有一些保证和可审计性--或者至少能够在问题发生时提前停止它们,或者回滚到模型的旧的稳定版本。在这一点上,你将与谷歌写下他们臭名昭著的论文《机器学习系统中的隐藏技术债务》时的情况大致相同

WTF-diagrams_25 07

这就是AIOps领域的起点。简单地说,它涵盖了你在生产中成功运行AI所需要的一切,在我们已经知道的DevOps的基础上增加了一些关键功能。具体来说:
  • 数据的版本化和可搜索性
  • 模型的测试、重用和版本化
  • 用于模型预测和流入数据的服务水平指标(SLA)
  • 可视化影响的能力

数据的版本化和可搜索性

我们所有的人工智能模型都从数据中获得业务逻辑。每个项目都是从一个请求开始的。"你能预测我们的电力消耗吗?这将大大减少成本。如果这是第一次有人关注耗电量,你现在就会开始与公司所有相关人员交谈,试图找出影响耗电量的原因。这很快就会变得非常棘手,所以记录可用的数据集,给它们打上标签,并使它们可以被搜索,是一个好习惯。下一个做任何与公司电力消耗有关的事情的人都会感谢你。

当我们有了漂亮的分类数据后,我们面临着下一个障碍。在不同的数据集上训练的两个模型很少会在相同的输入下产生相同的结果,所以不同模型的结果总是需要用相同的数据集来比较。试想一下,你的一个数据科学家出现在你的门口说。"我在MNIST数据集上取得了99%的准确率,而人B在CIFAR-10数据集上只有90%。我的模型要好得多"。你肯定会质疑这种说法,尽管它有可能是正确的。如果我们把自己的数据集记录得足够好,就不应该出现这种情况。

上面的例子很直接,因为我们有两个完全不同的数据集,目标也不同,但同样的问题也发生在不同版本的数据集上,比如PASCAL VOC数据集。如果一个模型在VOC 2007上达到了很高的准确率,那么它在2012年的版本上也会达到很高的准确率,但这是没有保证的。

正因为如此,我们必须对我们的数据集进行版本管理,并跟踪每个特定训练所使用的版本。如果你的模型不断地提供请求,并为其接收地面真相,这就变得更加重要了。让我们考虑下面的例子。你部署了一个模型来检测一张图片是否包含一只猫或一只狗,并有一个按钮让用户表明模型是否正确。一段时间后,你想用新注释的数据重新训练你的模型。如果你只是把你的新数据做一个随机的训练测试分割,你的测试集会与之前的训练运行不同,使得你的结果没有可比性。相反,最好是将新的例子添加到你的训练数据中,并使用相同的测试集。这样你就可以验证模型是否在新数据的帮助下变得更好,或者人们只是搞了些小动作,错误地注释了你的数据

测试、重用和模型的版本化

通过通用函数和库重用代码是每个软件开发者工具包的标准部分,这与测试和DRY(不要重复自己)的DevOps实践有很大关系。

但对于人工智能来说,情况并不那么好。作为一个例子,考虑一下我们经常使用的数据转换,例如返回给定日期的星期几。

如果我们不需要为这些事情写自己的函数,那就太好了。在人工智能领域,我们在这方面越来越好。特别是scikit-learn和它的基于转化器的API,在涉及到表格数据时帮助很大。在你的公司内部转换数据时,你应该支持类似的方法。你不希望你的数据科学家花时间重写已经存在的代码。这样做的一个重要的有益的副作用是,你使用的是已经经过适当测试的代码:没有人喜欢花时间去调试别人的代码。此外,有了测试用例,就可以记录下各个转化器应该如何使用,以及它实际上能处理什么样的情况。

然而,这只是人工智能中DRY的一个例子。我们还看到,在其他地方,预训练模型的可用性和使用越来越多,例如苹果的Core ML,来自DeepL 和谷歌的翻译服务,以及视频的字幕服务。

此外,越来越多的模型大量使用转移学习,允许他们从不同的神经网络中获取训练好的部分并重新使用它们。这始于图像识别中的ImageNet,并扩展到自然语言处理(NLP),首先是单词嵌入,如今则是BERT等模型及其所有后继者。一个很好的例子是拥抱脸库,它允许你在自己的模型中重用预先训练好的NLP模型的一部分。

然而,使用模型的一部分需要比重用转化器更相信别人的努力。你不仅要假定所提供的代码是有效的,而且还要假定模型是以合理的方式训练的,并且API总是返回给你相同的模型。还要记住,你是在重复使用别人的神经网络中间的一些神经元的值,并将其输入你自己的神经网络。另一个人并不关心你这样做,而是像使用一个类的私有属性。它就在那里,你可以使用它......但它可能会完全改变,因为开发者只保证你的公共API。

让我们详细说明一下。词嵌入可以通过预测其周围的词来进行训练。这方面的一个例子可以在左上图中看到。这将产生两件事:预测单词的整体准确性,以及对相关单词的嵌入(左上图)。

neurons

你可以利用这些嵌入并将其用于另一项任务,例如预测一个单词是否是诅咒词(左下图)。你的模型将大大受益于这些嵌入,因为骂人的词可能会有相互接近的嵌入。现在想象一下,有人在训练新的词汇嵌入:诅咒词仍然有可能是接近的,但是维度很容易被洗牌,而且值也可以有很大的变化(图右上)。作为一个例子,请看下面的图。它绘制了3.1.1和2.3.7两个版本中 "WTF "一词的前20个维度。仅仅通过目测,你就可以看到它们是非常不同的。Screenshot 2021-08-01 at 14.01.12

这就是为什么你需要确保每次都得到相同的模型版本:如果你的模型的权重被冻结,你的模型就会给出错误的预测(图右下)。这是你应该对你的模型进行版本管理的一个原因,但还有另外一个原因。如果你开发了一个新的模型并将其部署到生产中,然后意识到它对边缘情况的处理比以前的模型差得多,或者对请求的回复时间太长,你会想恢复到以前的模型。但显然,为了做到这一点,你需要把它放在某个地方,并且能够很容易地识别它。

模型预测的SLI和流入的数据

与正常的DevOps程序类似,我们应该在生产中监控我们的模型。他们最终会失败,如果发生这种情况,我们希望得到提醒。因此,我们应该定义服务水平指标,以及当这些指标未被满足时的警报规则。正如在DevOps中,监控响应时间对于保证良好的客户体验是至关重要的,但ML模型还有一些额外的陷阱。

正如谷歌关于在生产中测试ML

文章中所讨论的,我们需要跟踪模式和特征的倾斜,还有模型的老化:

模式的倾斜是指你的模式在训练和生产中的服务之间发生变化。最简单的例子是,你的训练数据有四列,但在生产中只有三列交给了模型。这肯定会导致你的预测出现问题。

当特征在生产中与训练中的设计不同时,就会出现特征偏移。让我们来看看这个例子。你的模型需要过去24小时内的客户数量。在训练数据库中,客户数量是按每小时的客户数汇总的。在生产中,这可能只是一个数组,只要记录是24小时的,就会删除条目。构建两者的总和将产生不同的结果,因为训练数据库中的总和将一次性删除一小时内的所有客户,而在生产中,他们将被逐渐删除。

最后,我们需要接受我们的模型正在老化。我们的大部分输入数据是由人类产生的,他们的行为会随着时间而改变。由于模型只能捕捉其训练数据中的行为,这需要更新,否则模型的预测和实际结果将随着时间的推移而进一步偏离。试想一下,你训练了一个预测2019年11月面罩消费的模型。它的预测可能不会长期准确,即使它没有突破。鉴于其训练数据,它根本无法预测消费的上升。可以帮助检测此类问题的技术是漂移检测(见下图)和离群点检测,如Seldon Core提供的技术,以及开源的替代技术。

distribution

可视化影响

几乎每个软件产品都有某种前端,以可视化其影响。毕竟,影响是你的客户所支付的东西。对于传统的软件来说,这可能已经是一项复杂的任务。然而,有了人工智能,你会得到一个额外的需要解释的点:虚假预测。由于人工智能是概率性的,它将会犯错误。有时你可以说,一个错误可以通过重新训练模型来修复。你可以这样做一次或两次,但后来人们开始质疑人工智能是否真的是一种方式,因为它犯了很多错误。

为了避免这种情况,重要的是要尽早设定预期,让客户明白错误会发生,以及他们将得到什么样的好处作为交换。就应用的可接受的错误预算和预期收益达成一致。将这两点持续可视化,你就可以免去很多讨论,因为人们可以很容易地看到他们从使用人工智能中获得了什么。

结论 总

而言之

,人工智能仍然是一个相对年轻的领域,其他学科的许多程序员认为理所当然的事情,在人工智能领域绝不是必然的。这包括但不限于版本控制、SLI和代码重用。然而,随着人工智能被用于越来越多的生产环境,该领域正在追赶计算机科学的其他分支。我还希望看到很多工具至少能使AIOps的一部分自动化,并最终导致低代码或无代码的解决方案,利用已经写好的转化器和AI。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值