点 Redis 8 来了——而且它是开源的

了解更多

将您的 AI 模型尽可能靠近数据运行

引言

今天我们很高兴宣布 RedisAI 的预览版本,该版本是与 [tensor]werk 合作推出的。RedisAI 是一个 Redis 模块,用于服务张量和执行深度学习模型。在这篇博文中,我们将引导您了解这个新模块的功能、它能实现什么,以及为什么我们相信它将彻底改变机器学习和深度学习 (ML/DL) 模型。

RedisAI 的诞生有两个核心原因。首先,将数据移动到执行人工智能 (AI) 模型的主机上成本高昂,在当今的即时体验中,每一毫秒都很重要。其次,模型服务历来是 DevOps 的挑战。我们构建 RedisAI 是为了让您可以在数据所在的位置运行模型,并在 Redis 内部轻松地从多个后端服务、更新和集成(ensemble)您的模型

数据本地性很重要

为了说明我们为何认为共置性(在数据所在的位置运行您的 ML/DL 模型)很重要,让我们考虑一个聊天机器人应用示例。聊天机器人通常使用循环神经网络 (RNN),通常采用 seq2seq 架构来对输入句子进行回复。更高级的模型以数值中间状态张量的形式保留对话上下文,使用两个输入张量和两个输出张量。作为输入,模型接收用户发送的最新消息,以及表示对话历史记录的中间状态。其输出是对消息的回复以及新的中间状态。

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

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

通过 RedisAI,我们引入了一种新的数据类型,称为 Tensor。通过一组简单的命令,您可以从您喜欢的客户端获取和设置 Tensor。我们还引入了另外两种数据类型:Models 和 Scripts,用于模型运行时功能。

设置 Models 时会包含它们应该运行在哪个设备上(CPU 或 GPU)以及后端特定的参数信息。RedisAI 集成了多个后端,例如 TensorFlow 和 Pytorch,我们正努力尽快支持 ONNXRuntime。 ONNX 和 ONNX-ML 的此运行时增加了对“传统”机器学习模型的支持。然而,令人欣喜的是,执行 Model 的命令与其后端无关。

AI.MODELRUN model_key INPUTS input_key1 … OUTPUTS output_key1 ..

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

Scripts 可以在 CPU 和 GPU 上运行,并允许您通过 TorchScript 操作 Tensor,TorchScript 是一种类似于 Python 的、用于 Tensor 操作的领域特定语言。这让您可以在执行 Model 之前预处理输入数据,以及后处理结果,例如,用于集成(ensembling)不同的 Models 以提高性能。

RedisAI 的数据结构和后端概览

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

新的架构可以简化如下

Model 服务 一项 DevOps 挑战 变得轻松

直接从您的 Jupyter notebook 中取出代码并放入 Flask 应用中可能无法在生产环境中提供最佳保障。您如何确定您正在最佳地使用资源?当您的主机宕机时,我们聊天机器人示例的中间状态会发生什么?您最终可能会重复发明现有 Redis 功能的轮子。
另一方面,处理非常有主见的解决方案可能具有挑战性,因为它们往往不如您预期的那样具有可组合性。

RedisAI 的目标是将 Redis 的理念带到 AI 模型服务的任务中。由于我们将 Tensors、Models 和 Scripts 实现为成熟的 Redis 数据结构,它们继承了 Redis 的所有企业级功能。如果您需要扩展模型服务,只需扩展您的 Redis 集群即可。您还可以使用 Redis Enterprise 的高可用性功能来确保您的 Model 和 Tensors 始终可用。由于 Redis 易于扩展,您可以根据需要在生产环境中添加任意数量的 Models,从而降低您的基础设施成本和总拥有成本。

最后,RedisAI 与现有的 Redis 生态系统完美契合,让您可以做到一切,从重用 Streams 用于输入数据和分类输出数据流,使用 RedisGears 在数据结构之间进行正确转换,到采用 RedisGraph 来保持您的本体论最新等等。

结论与展望

短期内,我们希望让 RedisAI 全面可用,包括支持三大主要 ML/DL 后端(Tensorflow、Pytorch 和 ONNXRuntime)。在下一阶段,我们希望这些后端能够动态加载,这将使您能够仅加载您希望在设备上运行所需的特定后端。例如,这将允许您将 Tensorflow Lite 用于您的边缘用例。

我们计划在不久的将来实现的另一个功能称为 autobatching,它将检查队列并自动合并对相同 Models 的调用,以榨取最后的效率。此外,RedisAI 还将公开关于您的 Models 运行状况的指标,并且我们将研究前面解释过的 DAG 功能。

我们期待听到您的所有反馈,请随时联系我们或在github上评论。