来源:Redislabs
做者:Pieter Cailliau、LucaAntiga
翻译:Kevin (公众号:中间件小哥)redis
简介数据库
今天咱们发布了一个 RedisAI 的预览版本,预集成了[tensor]werk组件。RedisAI 是一个能够服务 tensors 任务和执行深度学习任务的 Redis 模块。在这篇博客中,咱们将介绍这个新模块的功能,并解释咱们为何会认为它能颠覆机器学习(ML)、深度学习(DL)的解决方案。
RedisAI 的产生有两大缘由:首先,把数据迁移到执行 AI 模型的主机上成本很高,而且对实时性的体验很大的影响;其次,Serving 模型一直以来都是 AI 领域中 DevOps 的挑战。咱们构建 RedisAI 的目的,是让用户能够在不搬迁Redis 多节点数据的状况下,也能很好地服务、更新并集成本身的模型。后端
数据位置很重要网络
为了证实运行机器学习、深度学习模型中数据位置的重要性,咱们举一个聊天机器人的例子。聊天机器人一般使用递归神经网络模型(RNN),来解决一对一(seq2seq)用户问答场景。更高级的模型使用两个输入向量、两个输出向量,并以数字中间状态向量的方式来保存对话的上下文。模型使用用户最后的消息做为输入,中间状态表明对话的历史,而它的输出是对用户消息和新中间状态的响应。数据结构
为了支持用户自定义的交互,这个中间状态必需要保存在数据库中,因此 Redis +RedisAI是一个很是好的选择,这里将传统方案和 RedisAI 方案作一个对比。架构
1、传统方案框架
使用 Flask 应用或其它方案,集成 Spark 来构建一个聊天机器人。当收到用户对话消息时,服务端须要从 Redis 中获取到中间的状态。由于在 Redis 中没有原生的数据类型可用于 tensor,所以须要先进行反序列化,而且在运行递归神经网络模型(RNN)以后,保证明时的中间状态能够再序列化后保存到 Redis 中。机器学习
考虑到 RNN 的时间复杂度,数据序列化/反序列化上 CPU 的开销和巨大的网络开销,咱们须要一个更优的解决方案来保证用户体验。性能
2、RedisAI 方案
在 RedisAI 中,咱们提供了一种叫 Tensor 的数据类型,只需使用一系列简单的命令,便可在主流的客户端中对 Tensor向量进行操做。同时,咱们还为模型的运行时特性提供了另外两种数据类型:Models 和 Scripts。学习
Models 命令与运行的设备(CPU 或 GPU)和后端自定义的参数有关。RedisAI 内置了主流的机器学习框架,如 TensorFlow、Pytorch 等,并很快可以支持 ONNX Runtime 框架,同时增长了对传统机器学习模型的支持。然而,很棒的是,执行 Model 的命令对其后端是不感知的:
AI.MODELRUN model_key INPUTS input_key1 … OUTPUTS output_key1 .. |
这容许用户将后端选择(一般由数据专家来决定)和应用服务解耦合开来,置换模型只须要设置一个新的键值便可,很是简单。RedisAI 管理全部在模型处理队列中的请求,并在单独的线程中执行,这样保障了 Redis依然能够响应其它正常的请求。Scripts 命令能够在 CPU 或GPU 上执行,并容许用户使用 TorchScript 来操做Tensors 向量,TorchScript 是一个可操做 Tensors 向量的类 Python 自定义语言。这能够帮助用户在执行模型前对数据进行预处理,也能够用在对结果进行后处理的场景中,例如经过集成不一样的模型来提升性能。
咱们计划将来经过 DAG 命令支持批量执行命令,这会容许用户在一个原子性操做中批量执行多个 RedisAI 命令。例如在不一样的设备上运行一个模型的不一样实例,经过脚本对执行结果作平均预测。使用 DAG 命令,就可并行地进行计算,再执行聚合操做。若是须要全量且更深的特性列表,能够访问 redisai.io。新的架构能够简化为:
模型服务能够更简单
在生产环境中,使用 Jupyter notebooks 来编写代码并将其部署在Flask 应用并非最优方案。用户如何肯定本身的资源是最佳的呢?若是用户主机宕机以后,上述聊天机器人的中间状态会发生什么呢?用户可能会重复造轮子,实现已有的 Redis 功能来解决问题。另外,因为组合方案的复杂度每每超出预期,执拗地坚持原有的解决方案也会很是有挑战性。RedisAI 经过 Redis 企业级的数据存储方案,支持深度学习所须要的 Tensors、Models 和 Scripts等数据类型,很好的实现了 Redis 和 AI 模型的深度整合。若是须要扩展模型的计算能力,只须要简单的对Redis 集群进行扩容便可,因此用户能够在生产环境中增长尽量多的模型,从而下降基础设施成本和整体成本。最后,RedisAI 很好地适应了现有的 Redis 生态,容许用户执行脚原本预处理、后处理用户数据,可以使用 RedisGear 对数据结构作正确的转换,可以使用RedisGraph 来保持数据处于最新的状态。
结论和后续计划
一、短时间内,咱们但愿使用RedisAI 在支持 3 种主流后端(Tensorflow、Pytorch 和 ONNX Runtime)的状况下,尽快稳定下来并达到稳定状态。
二、咱们但愿能够动态加载这些后端,用户能够自定义的加载指定的后端。例如,这将容许用户使用Tensorflow Lite 处理边缘用例。三、计划实现自动调度功能,能够实如今同一模型中实现不一样队列的自动合并。四、RedisAI会统计模型的运行数据,用于衡量模型的执行状况。
五、完成上文中解释的DAG 特性。
更多优质中间件技术资讯/原创/翻译文章/资料/干货,请关注“中间件小哥”公众号!