写点什么

Redis AI 第一步

  • 2019-10-24
  • 本文字数:2691 字

    阅读完需:约 9 分钟

Redis AI 第一步

在 2019 年的 RedisConf 上,Redis Labs 推出了一个名为 RedisAI 的新模块。目的是将机器学习(ML)和深度学习(DL)结合起来,并尽可能地在数据当前所在的地方运行人工智能(AI)模型。这听起来很神奇,如果这一切对你都是全新的,而且你对机器学习感兴趣,但不太清楚这一切到底意味着什么呢?你怎么弄明白这一切呢?上周你老板的老板说,“我们需要把机器学习整合进来”,那可能意味着需要进行额外的编译或其他步骤。现在,你正坐在这里试图了解大量的新术语以及如何将其引入你的组织。


今天,我们将开始好好深入研究一些 AI 术语,并展示一下如何将 RedisAI 模块添加到你现有的 Redis 系统中,并开始用起来。

1 什么是机器学习?

究竟什么是机器学习呢?广义的概念是指构建算法,即读取数据并且依靠那些数据以及任何读入的新数据来做出预测。在最初的“训练”期间,会有人查看模型的预测,并告诉系统每个猜想正确与否。深度学习涉及到如何构建算法和提供模型数据,并由系统本身训练自己,而不是通过外部来训练。


训练这些系统很复杂,通常在一个完全不同的应用程序中进行(不用担心,除非你喜欢线性代数,否则你不需要编写该应用程序)。最受欢迎的机器学习系统之一叫做 TensorFlow,它是开源的。TensorFlow 可以帮助你构建、培训和部署 ML 应用程序,TensorFlow 有一个很好的社区可以帮助你入门。

2 现实世界中的机器学习

你可能已经和机器学习系统进行了很多交互。如果你有一个 Netflix 账户,并且在某个电影或节目上点过“喜欢”或“不喜欢”按钮,那么你就正在训练模型,以更好地预测你喜欢的电影和节目的类型。Netflix 的推荐与你喜欢的内容直接相关。不幸的是,这就是为什么我的节目列表 被《True and theRainbow Kingdom》(:)谢谢孩子们)之类的节目填满了。


并且,如果你在过去的几年里一直上网的话,毫无疑问你会看到爆炸式增长的聊天机器人。这些也是基于机器学习/深度学习的工具。他们被训练用来回答问题,在某些情况下可以在相关主题下和人们很好的对话。当然,训练有时也可能会失控,但一般来说,这还是挺有意思的!

3 Redis 能做些什么?

传统上,所有这类数据都需要被移来移去,这可能会给 DevOps 带来一些严峻的挑战。我们考虑下,如何保存一个聊天机器人与你的对话状态。这些数据需要保存在某个地方,因为这些数据对于机器人来说很重要。我们需要这个对话及其上下文来确定接下来要说的内容。这就需要对数据进行反序列化,在模型中运行它,将数据发送到 Redis 之后,再对其进行序列化。在应用之间转移数据和在系统之间进行数据转换,所有这一切都会带来 CPU 和网络开销。


RedisAI 为你提供了新的数据结构,并允许 Redis 管理运行模型的请求并执行他们。实际上,我们是在你的数据的所在地运行你的模型,没有网络开销,无需序列化/反序列化。

4 从哪里开始入手?

我是一个跟不上时代的人,喜欢自己构建这样的工具。因此,当我想使用 Redis 的新模块时,我会通过源码来构建。有几种不同的方法可以让 RedisAI 在本地运行:

4.1 通过 Docker 安装

如果你是 Docker 用户,那么使用 RedisAI 获取 Redis 实例就是小菜一碟:


$ docker pull redisai/redisai$ docker run -p 6379:6379 -it --rm redisai/redisai
复制代码


你也可以克隆 RedisAI 代码库来获取对实例的访问权限。

4.2 或者从源码构建

让我们在命令行中实践一下。在构建代码之前,你需要安装 cmake 和 git-lfs。在我的 Macbook 上,这就像使用 Homebrew 一样简单:


$ brew install git-lfs cmake
复制代码


你还需要确保运行的是 redis-server 4.09 或更高版本。可以检查一下:


$ redis-server --version
复制代码


现在你已经检查了版本,并且一切顺利,请克隆 AI 代码库:


$ git clone git@github.com:RedisAI/RedisAI.git
复制代码


进入 RedisAI repo/ 目录,并获取依赖项:


$ bash get_deps.sh
复制代码


现在开始构建:


$ mkdir build$ cd build$ cmake -DDEPS_PATH=../deps/install ..$ make$ cd ..
复制代码


如果一切按计划进行,你就可以加载模块并开始玩了。这个过程应该非常顺利。我遇到的唯一问题是没有安装 CMake。一旦装好了,就没其他问题了。


现在,在继续之前,你应该确保 Redis Server 还没有运行。我已经忘了我总是把它作为我的机器上的服务启动了,所以它一直在后台运行!当我试图加载模块时,一切似乎都工作正常,但模块实际上并没有被加载。由于 Redis Server 已经在后台运行,因此对我来说很糟糕,模块没有加载。如果你使用 Homebrew 安装 Redis,那么停止 Redis Server 就是一条简单的命令,执行 brew services stop Redis 就可以了。


一旦你停止了 Redis,就可以运行:


$ redis-server --loadmodule build/redisai.so
复制代码


只需使用 CLI 中的 MODULE LOAD 命令,接下来的一切就简单了:


> MODULE LOAD path/to/build/redisai.so
复制代码


现在,模块已经加载到 Redis Server 中了,可以开始运行了!

5 运行一些例子

恭喜你做到了这一步,现在事情开始有点意思了。你已经拥有尝试使用 RedisAI 所需的一切。如果你对这一切都不熟悉,那么你可能无法进行下一个步骤,因此 RedisAI 附带了一个示例,你可以运行一下,看下它是如何运作的。


如果这是你进入 AI 世界的第一步,那么你接下来要做的就是构建并训练模型。这些步骤超出了 Redis 和本文的范围(如果你感兴趣的话,网上可以找到一些很好的资料),所以我们将跳过这一切并给你一些你可以立即玩起来的数据。


我在 Github 上建了一个库,你可以下载这个示例。在这里你可以找到入门所需的一切:



我们的示例项目是一个基于命令行界面的图像分类应用程序。提供一个图片给应用,这个应用就能够找出图片中的内容。例如,我们提供一个熊猫的图片给应用程序,应用程序就应该告诉我们图片中有一只大熊猫。



要启动并运行,请进入 JS 文件夹并运行 yarn 或 npm install。这将安装你所需要的一切。然后你要做的就是运行:


$ node mobilenet.js ../img/panda.jpg
复制代码


panda.jpg 是这篇博文的标题图片(编者注:即上方的大熊猫图片)。如果一切顺利,你得到的输出应该类似于:



太棒了,有返回结果了!这意味着什么,我们做了什么?我们为这个应用程序提供了熊猫和计算机的图片。系统经过训练去查看图片并告诉我们图片中的内容。我们所做的就是给应用程序提供 2 张图像,然后应用程序就能够告诉我们它在图像中“看到”了什么。


在我们的 Redis 实例中,可以很快的安装 RedisAI,这样你就可以给它喂数据,并观察它是如何识别图像的。该示例是面部识别和图像识别的基本构建模块。现在,通过 RedisAI 我们能够在 Redis 中,即我们的数据的所在的地方,开始工作了。


本文转载自公众号中间件小哥(ID:huawei_kevin)。


原文链接:


https://mp.weixin.qq.com/s/Ge_lfZJSvZ2sMFKgUIWCmA


2019-10-24 15:403901

评论

发布
暂无评论
发现更多内容

一击必杀!内网渗透——对不出网目标的精准打击

Thrash

安全

硬核资源!清华博士的Spring Boot中AOP与SpEL笔记,码农:膜拜

牛哄哄的java大师

Java

如何高效率的度过一天?

程序员海军

效率 方法论

涵盖了Java基础+JVM+多线程并发编程+spring全家桶+Linux+数据结构+数据库+nginx+分布式,这份Java技术成长笔记太强了

Java架构之路

Java 程序员 架构 面试 编程语言

北大学霸!手抄万字Java数组笔记,2小时吃透,你确定不拿走?

牛哄哄的java大师

Java 后端

吴凡 ベ莫离: 网友都说MyBatis多表查询太难了,小白:就这?我都学会了

牛哄哄的java大师

2021,国产数据库人的最好时代

BinTools图尔兹

数据安全 数据库管理 国产数据库

编程规范的意义

顿晓

5月日更 编程规范

架构实战营详细架构设计文档模板

Geek_e0c25c

2021金三银四(拿下5个offer)面试经历,附阿里4面+京东4面【面经分享】

Java 编程 程序员 面试 计算机

前端项目配置ts,axios,router,vuex

Vue js ts vuex VueRouter

如有神助!阿里P7大牛把Spring Boot讲解得如此透彻,送你上岸

飞飞JAva

spring boot项目TPS压测性能优化

李日盛

Spring Boot 性能调优

Dubbo 服务分组与多版本

青年IT男

深入了解 JavaScript 对象

程序员海军

JavaScript 大前端 对象

模板格式不统一?百度AI产品经理为你讲解如何高效构建定制化OCR模型

百度大脑

百度 AI OCR

京东丨阿里丨携程面试总结,已成功拿到京东offer

Java架构师迁哥

谈谈测试环境管理与实践

大卡尔

测试环境 工程效能

要不要去创业?

石云升

创业 5月日更

IDEA 这样设置,好看到爆炸!!!

楼下小黑哥

Java 程序员 IDEA 编程开发

从操作系统底层的IO原理入手讲解,同时提供高性能开发的实战案例!美团大佬最新总结的1053页Java高并发核心编程笔记!

Java架构之路

Java 程序员 架构 面试 编程语言

谷歌大佬的LeetCode算法刷题笔记,详细讲解了刷 LeetCode 时常用的技巧。

Java架构之路

Java 程序员 架构 面试 编程语言

区块链是什么意思?源中瑞开发BaaS平台促进企业数字转型升级

源中瑞-龙先生

企业数字化转型 #区块链# 源中瑞 Baas

Golang 实现 RTP

天黑黑

音视频 rtp Go 语言

网络攻防学习笔记 Day6

穿过生命散发芬芳

5月日更 网络攻防

Nginx基础配置-基础模块配置

梁龙先森

nginx 大前端

Redis - 哈希表

旺仔大菜包

redis

所谓软件测试工作能力强,其实就是这5点

程序员阿沐

软件测试 自动化测试 测试工程师 黑盒测试 白盒测试

Map在Java 8中增加非常实用哪些函数接口?

xcbeyond

Java java8 5月日更 内容合集

第八大洲环游记(三):人间胜境新西兰,AI孤岛or方舟?

脑极体

Golang中runtime包的基本使用方式

liuzhen007

Go 语言 5月日更

Redis AI 第一步_AI&大模型_中间件小哥_InfoQ精选文章