RedisAI安装手册
1.官方最快的安装方法
RedisAI 是一个 Redis 模块。要运行它,您需要一个 Redis 服务器(v6.0.0 或更高版本)、模块的共享库及其依赖项。 以下部分描述了如何开始使用 RedisAI。
首先需要安装Redis6.0以上的版本。具体可见:redis6.2.6安装教程
Docker
安装 RedisAI 的最快方法是启动其官方 Docker 容器映像。
CPU版本
docker run -p 6379:6379 redislabs/redisai:latest-cpu-x64-bionic
GPU版本
docker run -p 6379:6379 --gpus all -it --rm redislabs/redisai:latest-gpu-x64-bionic
如果没有安装docker的话,可以参考一下:Ubuntu Docker 安装 | 菜鸟教程 (runoob.com)
如果测试docker时,发现这个错误,是因为镜像源的问题。
$ sudo docker run hello-world
Unable to find image 'hello-world:latest' locally
具体修改措施,可以参考 解决Unable to find image ‘hello-world:latest‘ locally 问题。
如果能够通过docker直接安装最好,不然则使用源码安装。
2.使用源码安装
基本要求
-
Packages: git, python3, make, wget, g++/clang, & unzip
-
Cmake 3.0 or higer
-
CUDA11.2 and cuDDN 8.1 or higer (if GPU is required)
-
Redis v6.0 or higer
获取源码
git clone --recursive https://github.com/RedisAI/RedisAI
跳转到源码文件夹
cd RedisAI
建立依赖关系(此处需要下载构建RedisAI后端可能会很慢,需要更换镜像源)
第一次安装一些软件需要更换镜像源:conda、pip、Ubuntu镜像源等。
CPU版本
bash get_deps.sh
GPU版本
bash get_deps.sh gpu
建立模型
当依赖构建了之后,就可以建立RedisAI的模型用以下的命令:
make -C opt clean ALL=1
make -C opt
当然也可以建立支持GPU的RedisAI的模型
make -C opt clean ALL=1
make -C opt GPU=1
后端依赖
RedisAI 目前支持 PyTorch(libtorch)、Tensorflow(libtensorflow)、TensorFlow Lite 和 ONNXRuntime 作为后端。本节显示了 RedisAI 和支持的后端之间的版本映射。这非常重要,因为一个版本的序列化机制可能与另一个版本不匹配。为确保您的模型适用于给定的 RedisAI 版本,请查看后端文档,了解后端版本与构建 RedisAI 版本之间的不兼容功能。
RedisAI | PyTorch | TensorFlow | TFLite | ONNXRuntime |
---|---|---|---|---|
1.0.3 | 1.5.0 | 1.15.0 | 2.0.0 | 1.2.0 |
1.2.5 | 1.9.0 | 2.6.0 | 2.0.0 | 1.9.0 |
master | 1.9.0 | 2.6.0 | 2.0.0 | 1.9.0 |
加载模块
需要启动 Redis 服务器时加载模块, 只需要使用 --loadmodule 命令行开关来启动服务器。因为我们装的是GPU的版本,所以GitHub上面的CPU版本会提示不存在一些文件。跳转到RedisAI项目下
cd RedisAI
CPU 加载模块:
redis-server --loadmodule ./install-cpu/redisai.so
GPU 加载模块(我们使用是这个命令):
redis-server --loadmodule ./install-gpu/redisai.so
使用GPU加载之后,效果图如下:
可能存在的问题:
使用我们的安装方法安装之后,有时使用上面创建服务器可能会报错,说端口已经占用:
解决方法很简单只需要把刚刚创建的服务器关闭:
redis-cli shutdown
通过命令 ps -ef | grep -i redis 可以查看当前redis相关进程,如果shutdown失败,可以使用 kill -9 16678(对应进程号)
尝试一下
当加载后,您可以使用 redis-cli 与 RedisAI 进行交互。
RedisAI教程
RedisAI
RedisAI 是一个 Redis 模块,用于执行深度学习/机器学习模型并管理其数据。其目的是通过为流行的DL / ML框架和无与伦比的性能提供开箱即用的支持,成为模型服务的"主力"。RedisAI 既利用 Redis 经过生产验证的基础架构简化了图形的部署和服务,又通过坚持数据局部性原则最大限度地提高了计算吞吐量。
RedisAI的优势
因为 Redis 是内存中的数据结构服务器,所以 RedisAI 使用它来存储其所有数据。RedisAI 支持的主要数据类型是 Tensor,它是 DL/ML 域中数据的标准表示形式。由于张量存储在 Redis 服务器的内存空间中,因此 RedisAI 的任何后端库都可以轻松访问它们,延迟极小。此外,RedisAI也是模型的最佳测试平台,因为它允许并行执行多个计算图,并在未来的版本中实时评估它们各自的性能。
数据结构
RedisAI支持一下数据结构:
- 张量(Tensor):表示值的n维数组
- 模型(Model):表示受支持的 DL/ML 框架后端之一的计算图
- 脚本(Script) :表示一个Torch程序
DL/ML后端:
- TF : TensorFlow 后端
- TFLITE : The TensorFlow Lite 后端
- Torch: PyTorch 后端
- ONNX : ONNXRuntime 后端
开始
当服务器启动之后,我们可以通过任何redis客户端 来连接它。如果之前的安装教程通过了之后应该是有 redis-cli 客户端的。如果没有的话也可以从官方容器中获得。命令如下:
docker exec -it redisai redis-cli
如果已经具有客户端的话,直接在命令行输入命令
redis-cli
进入客户端之后显示:
接着我们就可以创建 RedisAI的张量(Tensor)
例如,考虑张量:
KaTeX parse error: No such environment: equation* at position 8: \begin{̲e̲q̲u̲a̲t̲i̲o̲n̲*̲}̲ tA = \begin{bm…
我们可以使用以下命令 AI.TENSORSET 来创建名称为"tA"的RedisAI张量:
AI.TENSORSET tA FLOAT 2 VALUES 2 3
显示OK说明操作成功了,这个 ‘tA’ 这个键已经存储在 RedisAI 中,我们可以通过命令 EXISTS、 TYPE 来访问。
RedisAI 张量在模型和脚本的执行中用作输入和输出。要从 RedisAI 张量值读取数据,有 AI.TENSORGET 命令,如下图所示获取tA的状态:
加载模型(选择跳过)
模型是有某个框架生成的深度学习或机器学习冻结图。RedisAI 模型数据结构表示这存储在数据库中可以运行的DL/ML模型。
cat graph.pb | docker exec -i redisai redis-cli -x \
AI.MODELSTORE mymodel TF CPU INPUTS 2 a b OUTPUTS 1 c BLOB
运行模型(选择跳过)
127.0.0.1:6379> AI.TENSORSET tA FLOAT 2 VALUES 2 3
OK
127.0.0.1:6379> AI.TENSORSET tB FLOAT 2 VALUES 3 5
OK
127.0.0.1:6379> AI.MODELEXECUTE mymodel INPUTS 2 tA tB OUTPUTS 1 tModel
OK
有兴趣的可以访问:Introduction - RedisAI - A Server for Machine and Deep Learning Models
使用Python插件来运行AI流
ReidisGears 模块通过python插件与RedisAI内置集成, 该插件支持AI流的注册,并在事件发生时触发它。例如,我们可以存储一下AI流,该流在Redis中设置张量并再这些张量上执行mymodel(自己的模型)。
import redisAI
async def ModelRun(record):
tensor_a = redisAI.createTensorFromValues('FLOAT', [2,2], [1.0, 2.0, 3.0, 4.0])
tensor_b = redisAI.createTensorFromValues('FLOAT', [2,2], [2.0, 3.0, 2.0, 3.0])
redisAI.msetTensorsInKeyspace({'a{1}': tensor_a, 'b{1}': tensor_b})
# assuming 'mymodel' is a model stored in Redis
modelRunner = redisAI.createModelRunner('mymodel')
redisAI.modelRunnerAddInput(modelRunner, 'a', tensor_a)
redisAI.modelRunnerAddInput(modelRunner, 'b', tensor_b)
redisAI.modelRunnerAddOutput(modelRunner, 'c')
# run the model asynchronously in RedisAI
res = await redisAI.modelRunnerRunAsync(modelRunner)
redisAI.setTensorInKey('c{1}', res[0])
return "ModelRun_OK"
GB("CommandReader").map(ModelRun).register(trigger="ModelRun")
然后,您可以触发此执行并通过运行以下命令获取结果:
redis> RG.TRIGGER ModelRun
1) "ModelRun_OK"
redis> AI.TENSORGET c{1} VALUES
1) "2"
2) "6"
3) "6"
4) "12"