dot Redis 8 来了——而且是开源的

了解更多

Redis AI 初步

在 RedisConf 2019 上,Redis 介绍了一个名为 RedisAI 的新模块。其想法是将机器学习 (ML) 和深度学习 (DL) 结合在一起,并尽可能靠近数据所在的位置执行人工智能 (AI) 模型。这听起来很棒,但如果您是这一切的全新手呢?如果您对机器学习感兴趣,但不确定这一切意味着什么呢?您如何理解这一切呢?您的老板的老板说:“我们需要集成机器学习”,而上周您认为这意味着他希望您运行一个额外的编译步骤或其他操作。现在您坐在这里试图理解许多新术语,以及如何将这些引入您的组织。

好的,首先,深吸一口气,让我们退一步。今天,我们将开始深入研究一些 AI 术语,并向您展示如何将 RedisAI 模块添加到您现有的 Redis 系统中,并开始尝试使用这些东西。

什么是机器学习?

那么机器学习到底是什么?这个广泛的概念是指构建读取数据并根据该数据以及任何新数据做出预测的算法。在最初的“训练”期间,有人会查看模型的预测,并告诉系统每次猜测是好是坏。深度学习涉及构建算法并向模型馈送数据,但不是外部训练,而是系统自行训练。

训练这些系统很复杂,通常发生在完全不同的应用程序中(不用担心,您不需要编写该应用程序,除非您喜欢线性代数)。最流行的机器学习系统之一称为 TensorFlow,它是开源的。 TensorFlow 帮助您构建、训练和部署 ML 应用程序,并拥有一个强大的社区来帮助您入门。

野外的 ML

您可能已经与 ML 系统进行了比您意识到的更多的互动。如果您有 Netflix 帐户并且单击某个电影或节目上的“喜欢”或“不喜欢”,那么您正在训练一个模型,以更好地预测您喜欢哪种类型的电影和节目。 Netflix 的建议与您说您喜欢的内容直接相关。可悲的是,这就是为什么我的队列中充满了诸如 True and the Rainbow Kingdom 之类的东西(谢谢孩子们)。

此外,如果您过去几年一直在上网,那么您无疑已经看到了聊天机器人的爆炸式增长。这些也是 ML/DL 工具。它们经过训练可以回答问题,在某些情况下可以与人们围绕相关主题进行相当不错的对话。当然,训练有时会 失控,但如果没有别的,观看也很有趣!

Redis 在哪里适用?

传统上,所有这些数据都需要移动,这可能会带来一些严重的 DevOps 挑战。想想一个聊天机器人保存你的对话状态。这些数据需要存储在某个地方,因为它对机器人很重要。它需要这个对话和上下文来帮助构建接下来要说的内容。我们需要反序列化数据,通过模型运行它,然后在将其发送回 Redis 后序列化数据。完成所有这些操作会使用 CPU 周期和网络开销,以便从一个应用程序转到另一个应用程序,并在系统之间转换数据。

RedisAI 为您提供新的数据结构,并允许 Redis 管理运行模型和执行模型的请求。本质上,我们是在数据所在的位置运行您的模型。没有网络开销,没有序列化/反序列化。

我该如何开始?

我是一个老派的人,我喜欢自己构建这样的工具。因此,当我想尝试使用 Redis 的新模块时,我会转到源代码并构建它。我们可以通过几种不同的方式让 RedisAI 在本地运行

通过 Docker 安装…

如果您是 Docker 用户,则可以在系统上轻松获得带有 RedisAI 的 Redis 实例

$ docker pull redisai/redisai
$ docker run -p 6379:6379 -it --rm redisai/redisai

您仍然需要克隆 RedisAI 存储库 以访问示例。

…或从源代码构建

让我们在命令行中弄脏双手。现在,在您可以制作代码之前,您需要安装两个特殊的东西:cmake 和 git-lfs。在我的 Macbook 上,这就像使用 Homebrew 一样简单

$ brew install git-lfs cmake

您还需要确保您运行的是 redis-server 版本 4.09 或更高版本。如果您需要检查,请输入

$ redis-server --version

现在您已经检查了服务器版本并且知道一切正常,请转到并克隆 AI 存储库

$ git clone [email protected]:RedisAI/RedisAI.git

将您自己 Cd 到 RedisAI 存储库中并获取依赖项

$ bash get_deps.sh

现在构建

$ mkdir build
$ cd build
$ cmake -DDEPS_PATH=../deps/install ..
$ make
$ cd ..

如果一切按计划进行,您就可以加载模块并开始使用了。该过程应该非常顺利。我遇到的唯一问题是没有安装 CMake。一旦我完成了这个,整个过程都有效了。

现在,在您进一步操作之前,您应该确保 Redis 服务器没有运行。我忘记了我总是将它作为我机器上的服务启动,所以它只是在后台运行!当我尝试加载模块时,一切似乎都运行良好,但模块实际上并没有加载。由于 Redis 服务器已经在后台运行,事情变得有点不稳定,模块没有加载。如果您使用 Homebrew 安装了 Redis,则停止 Redis 服务器应该是一个简单的命令。 brew services stop Redis 在我的 Mac 上可以做到。

停止 Redis 后,您可以运行

$ redis-server --loadmodule build/redisai.so

您可以通过使用 CLI 中的 MODULE LOAD 命令来使您的生活更轻松

> MODULE LOAD path/to/build/redisai.so

现在,将模块加载到服务器中,您就可以开始使用了!

使用一些示例

恭喜您走到这一步,现在乐趣开始了。您拥有了使用 RedisAI 进行实验所需的一切。如果您是这一切的新手,您可能不确定下一步该怎么做,因此 RedisAI 附带了一个您可以运行的示例,以查看事物的工作情况。

如果这是您进入 AI 世界的第一步,那么您接下来需要做的是构建和训练一个模型。这些步骤超出了 Redis 和本文的范围(但如果您有兴趣,有一些 很棒的材料可用),因此我们将跳过所有这些内容,并为您提供一些可以立即使用的数据。

我已经在 Github 上设置了一个 存储库,您可以下载并使用示例。在该文件夹中,您可以找到入门所需的一切:

我们的示例项目是一个 CLI 图像分类应用程序。我们将给它一张图像,该应用程序应该能够找出图像中的内容。例如,我们有一张熊猫的图像,当我们给应用程序这张图片时,该应用程序应该告诉我们图像中有一只大熊猫。

要启动并运行此程序,请 cd 到 JS 文件夹中并运行 yarnnpm install。 您需要启动它的所有内容都将安装。然后您要做的就是运行:

$ node mobilenet.js ../img/panda.jpg

panda.jpg 图像是此博客文章的标题图像。如果一切顺利,您的输出应该类似于以下内容

太棒了,我们得到了一些回报!太棒了?这到底意味着什么,我们做了什么?我们为我们的节点应用程序提供了一张熊猫和一台电脑的图片。我们的系统经过训练,可以查看图像并告诉我们图像中的内容。因此,我们在这里所做的是为我们的应用程序提供了 2 张图像,并且该应用程序能够告诉我们它在图像中“看到”的内容。

快速地,我们已经在我们的 Redis 实例中设置了 RedisAI,因此您可以为其提供数据并观看它找出并分类您提供的图像。此示例是面部识别和图像识别的基本构建块。现在,借助 RedisAI,我们可以在数据所在的 Redis 中工作。