简单地说,我们现在是Redis

了解更多

运行你的AI模型尽可能接近你的数据



回到博客

介绍

今天,我们很高兴地宣布RedisAI的预览版,与(张量)颂歌.RedisAI是一个Redis模块,用于服务张量和执行深度学习模型。在这篇博文中,我们将向您介绍这个新模块的功能,它能实现什么,以及为什么我们认为它是机器学习和深度学习(ML/DL)模型的游戏规则改变者。

RedisAI的出现有两个核心原因。首先,因为将数据移动到执行人工智能(AI)模型的主机是昂贵的,而且在今天的即时体验中每一毫秒都很重要。其次,服务模型在历史上一直是DevOps的挑战。我们构建了RedisAI,这样你就可以在数据所在的地方运行你的模型,轻松地服务、更新和从多个后端集成您的模型在复述。

数据局部性问题

为了说明为什么我们认为共域(在数据所在的地方运行ML/DL模型)很重要,让我们考虑一个聊天机器人应用程序示例。聊天机器人通常使用递归神经网络(RNN),通常安排在seq2seq架构中,为输入句子提供答案。更高级的模型使用两个输入张量和两个输出张量,以数值中间状态张量的形式保留对话的上下文。作为输入,模型获取用户的最新消息,以及表示对话历史的中间状态。它的输出是对消息和新的中间状态的响应。

这种中间状态必须保存在数据库中,以支持用户特定的交互,就像会话一样,所以Redis是一个很好的选择。聊天机器人的模型可以部署在Spark中,封装在Flask应用程序或任何其他DIY解决方案中。当收到来自用户的聊天请求时,服务应用需要从Redis获取中间状态。由于在Redis中没有一个张量的原生数据类型,数据库将不得不首先做一些反序列化,并且在RNN模型运行后,它将必须确保最新的中间状态被序列化并发送回Redis。

考虑到RNN的时间复杂性、在序列化/反序列化上浪费的CPU周期以及昂贵的网络开销,我们知道我们需要一个更好的解决方案来确保良好的用户体验。

在RedisAI中,我们引入了一种新的数据类型,叫做张量。用一套简单的命令,您可以从您喜欢的客户端获取和设置张量。我们还将介绍另外两种数据类型,Models和Scripts,用于模型运行时特性。

模型设置了关于它们应该在哪个设备上运行(CPU或GPU)的信息和特定于后端的参数。RedisAI有几个集成的后端,比如TensorFlow和Pytorch,我们正在努力支持ONNXRuntime。ONNX和ONNX- ml的运行时增加了对“传统”机器学习模型的支持。然而,很好的一点是,用于执行Model的命令不知道它的后端:

人工智能。MODELRUN model_key INPUTS input_key1…

这允许您将后端选择(通常由数据科学家做出的决定)与使用这些模型提供功能的应用程序服务分离开来。切换模型就像在Redis中设置一个新键一样简单。RedisAI管理所有在处理队列中运行模型的请求,并在单独的线程上执行它们,而Redis保持对所有其他命令的响应。

脚本可以在cpu和gpu上运行,并允许您通过TorchScript操作张量,TorchScript是一种类似python的领域特定语言,用于张量操作。这允许您在执行模型之前对输入数据进行预处理,并对结果进行后处理,例如集成不同的模型以提高性能。

概述RedisAI的数据结构和后端

另一个伟大的特性是通过一个有向无环图(DAG)命令,我们将在不久的将来添加到RedisAI。这将允许您在一个原子操作中组合多个RedisAI命令,例如在不同设备上运行一个Model的多个实例,并通过脚本平均预测来集成结果。使用DAG引擎,计算并行执行,然后连接。要获得完整和更深入的功能列表,请访问redisai.io

新的架构可以简化如下:

模型服务DevOps的挑战很容易

直接从您的Jupyter笔记本中取出代码并将其放在烧瓶应用程序中可能无法在生产中提供最好的保证。你如何确定你在最佳地使用你的资源?当您的主机宕机时,聊天机器人示例的中间状态会发生什么?你可能会重新发明现有的Redis功能。
另一方面,处理非常固执己见的解决方案可能是具有挑战性的,因为它们往往比您预期的更难以组合。

RedisAI的目标是将Redis的理念应用到为人工智能模型服务的任务中。由于我们将张量、模型和脚本作为完整的Redis数据结构来实现,它们继承了Redis的所有企业级特性。如果你需要扩展模型服务,你可以简单地扩展你的Redis集群。你也可以使用Redis Enter万博体育彩prise的高可用性特性来确保你的模型和张量总是可用的。由于Redis易于扩展,你可以添加尽可能多的模型,因为你想要或需要运行在生产中,降低你的基础设施成本和总拥有成本。

最后,RedisAI非常适合现有的Redis生态系统,允许你做任何事情,从重用Streams的输入数据和分类输出数据流,使用RedisGears在数据结构之间进行正确的转换,到采用RedisGraph保持你的本体最新等等。

结论和下一步

在短期内,我们想让RedisAI普遍可用,包括它对三个主要的ML/DL后端(Tensorflow, Pytorch和ONNXRuntime)的支持。在我们的下一个阶段,我们希望这些后端是动态加载的,这将允许你只加载你想要运行它们的设备所需要的特定后端。例如,这将允许您在Edge用例中使用Tensorflow Lite。

我们计划在不久的将来实现的另一个特性叫做自动批处理,它将检查队列并自动合并对相同模型的调用,以压缩效率的最后一点。此外,RedisAI还将公开有关您的模型表现如何的指标,我们将研究前面解释的DAG特性。

我们期待听到你所有的反馈,所以请联系或评论github

Baidu