Skip to content

Commit 516e24e

Browse files
authored
Merge pull request #65 from amber-moe/readme
add MultiModal Cache README
2 parents 0a36623 + 1987348 commit 516e24e

5 files changed

+180
-35
lines changed

README.md

+2-1
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ ModelCache
4343

4444
## News
4545

46+
- 🔥🔥[2024.10.22] Added tasks for 1024 developer day.
4647
- 🔥🔥[2024.04.09] Added Redis Search to store and retrieve embeddings in multi-tenant. This can reduce the interaction time between Cache and vector databases to 10ms.
4748
- 🔥🔥[2023.12.10] Integrated LLM embedding frameworks such as 'llmEmb', 'ONNX', 'PaddleNLP', 'FastText', and the image embedding framework 'timm' to bolster embedding functionality.
4849
- 🔥🔥[2023.11.20] Integrated local storage, such as sqlite and faiss. This enables you to initiate quick and convenient tests.
@@ -60,7 +61,7 @@ Codefuse-ModelCache is a semantic cache for large language models (LLMs). By cac
6061

6162
You can find the start script in `flask4modelcache.py` and `flask4modelcache_demo.py`.
6263

63-
- `flask4modelcache_demo.py`: A quick test service that embeds SQLite and FAISS. No database configuration required.
64+
- `flask4modelcache_demo.py`: A quick test service that embeds SQLite and FAISS. No database configuration required.
6465
- `flask4modelcache.py`: The standard service that requires MySQL and Milvus configuration.
6566

6667
### Dependencies

README_CN.md

+51-34
Original file line numberDiff line numberDiff line change
@@ -16,19 +16,35 @@ ModelCache
1616

1717
## Contents
1818

19+
- [Contents](#contents)
1920
- [新闻](#新闻)
2021
- [项目简介](#项目简介)
22+
- [架构大图](#架构大图)
2123
- [快速部署](#快速部署)
24+
- [环境依赖](#环境依赖)
25+
- [启动服务](#启动服务)
26+
- [启动 Demo](#启动-demo)
27+
- [启动标准服务](#启动标准服务)
2228
- [服务访问](#服务访问)
29+
- [写入 cache](#写入-cache)
30+
- [查询 cache](#查询-cache)
31+
- [清空 cache](#清空-cache)
2332
- [文章](#文章)
24-
- [架构大图](#架构大图)
33+
- [功能对比](#功能对比)
2534
- [核心功能](#核心功能)
35+
- [Todo List](#todo-list)
36+
- [Adapter](#adapter)
37+
- [Embedding model\&inference](#embedding-modelinference)
38+
- [Scalar Storage](#scalar-storage)
39+
- [Vector Storage](#vector-storage)
40+
- [Ranking](#ranking)
41+
- [Service](#service)
2642
- [致谢](#致谢)
27-
- [Contributing](#Contributing)
43+
- [Contributing](#contributing)
2844

2945
## 新闻
3046

31-
- 🔥🔥[2024.10.22] 增加1024程序员节任务。
47+
- 🔥🔥[2024.10.22] 增加1024程序员节任务。
3248
- 🔥🔥[2024.04.09] 增加了多租户场景中Redis Search存储和检索embedding的能力,可以将Cache和向量数据库的交互耗时降低至10ms内。
3349
- 🔥🔥[2023.12.10] 增加llmEmb、onnx、paddlenlp、fasttext等LLM embedding框架,并增加timm 图片embedding框架,用于提供更丰富的embedding能力。
3450
- 🔥🔥[2023.11.20] codefuse-ModelCache增加本地存储能力, 适配了嵌入式数据库sqlite、faiss,方便用户快速启动测试。
@@ -38,53 +54,58 @@ ModelCache
3854

3955
Codefuse-ModelCache 是一个开源的大模型语义缓存系统,通过缓存已生成的模型结果,降低类似请求的响应时间,提升用户体验。该项目从服务优化角度出发,引入缓存机制,在资源有限和对实时性要求较高的场景下,帮助企业和研究机构降低推理部署成本、提升模型性能和效率、提供规模化大模型服务。我们希望通过开源,分享交流大模型语义Cache的相关技术。
4056

57+
## 架构大图
58+
59+
![modelcache modules](docs/modelcache_modules_20240409.png)
60+
4161
## 快速部署
4262

43-
项目中启动服务脚本分为flask4modelcache.py 和 flask4modelcache_demo.py,其中:
63+
项目中启动服务脚本分为 `flask4modelcache.py``flask4modelcache_demo.py`,其中:
4464

45-
- flask4modelcache_demo.py 为快速测试服务,内嵌了sqlite和faiss,用户无需关心数据库相关事宜。
46-
- flask4modelcache.py 为正常服务,需用户具备mysql和milvus等数据库服务
65+
- `flask4modelcache_demo.py` 为快速测试服务,内嵌了 SQLite 和 FAISS,用户无需关心数据库相关事宜。
66+
- `flask4modelcache.py` 为正常服务,需用户具备 MySQL 和 Milvus 等数据库服务
4767

4868
### 环境依赖
4969

50-
- python版本: 3.8及以上
70+
- python版本: 3.8 及以上
5171
- 依赖包安装:
5272

5373
```shell
5474
pip install -r requirements.txt
5575
```
5676

57-
### 服务启动
77+
### 启动服务
5878

59-
#### Demo服务启动
79+
#### 启动 Demo
6080

61-
- 离线模型bin文件下载, 参考地址:[https://huggingface.co/shibing624/text2vec-base-chinese/tree/main](https://huggingface.co/shibing624/text2vec-base-chinese/tree/main)并将下载的bin文件,放到 model/text2vec-base-chinese 文件夹中。
62-
- 执行flask4modelcache_demo.py启动服务
81+
- 离线模型 bin 文件下载, 参考地址:[Hugging Face](https://huggingface.co/shibing624/text2vec-base-chinese/tree/main)并将下载的 bin 文件,放到 `model/text2vec-base-chinese` 文件夹中。
82+
- 执行 `flask4modelcache_demo.py` 启动服务
6383

64-
```shell
65-
cd CodeFuse-ModelCache
66-
```
67-
```shell
68-
python flask4modelcache_demo.py
69-
```
84+
```shell
85+
cd CodeFuse-ModelCache
86+
```
87+
88+
```shell
89+
python flask4modelcache_demo.py
90+
```
7091

71-
#### 正常服务启动
92+
#### 启动标准服务
7293

73-
在启动服务前,应该进行如下环境配置:
94+
在启动标准服务前,应该进行如下环境配置:
7495

75-
1. 安装关系数据库 mysql, 导入sql创建数据表,sql文件:```reference_doc/create_table.sql```
76-
2. 安装向量数据库milvus
96+
1. 安装关系数据库 MySQL, 导入 SQL 创建数据表,MySQL 文件:```reference_doc/create_table.sql```
97+
2. 安装向量数据库 Milvus。
7798
3. 在配置文件中添加数据库访问信息,配置文件为:
7899
1. ```modelcache/config/milvus_config.ini```
79100
2. ```modelcache/config/mysql_config.ini```
80-
4. 离线模型bin文件下载, 参考地址:[https://huggingface.co/shibing624/text2vec-base-chinese/tree/main](https://huggingface.co/shibing624/text2vec-base-chinese/tree/main)并将下载的bin文件,放到 model/text2vec-base-chinese 文件夹中
101+
4. 离线模型 bin 文件下载, 参考地址:[Hugging Face](https://huggingface.co/shibing624/text2vec-base-chinese/tree/main)并将下载的 bin 文件,放到 `model/text2vec-base-chinese` 文件夹中
81102
5. 通过flask4modelcache.py脚本启动后端服务。
82103

83104
## 服务访问
84105

85-
当前服务以restful API方式提供3个核心功能:数据写入,cache查询和cache数据清空。请求demo 如下:
106+
当前服务以 restful API 方式提供 3 个核心功能:数据写入,cache 查询和 cache 数据清空。请求 demo 如下:
86107

87-
### cache写入
108+
### 写入 cache
88109

89110
```python
90111
import json
@@ -99,7 +120,7 @@ headers = {"Content-Type": "application/json"}
99120
res = requests.post(url, headers=headers, json=json.dumps(data))
100121
```
101122

102-
### cache查询
123+
### 查询 cache
103124

104125
```python
105126
import json
@@ -114,7 +135,7 @@ headers = {"Content-Type": "application/json"}
114135
res = requests.post(url, headers=headers, json=json.dumps(data))
115136
```
116137

117-
### cache清空
138+
### 清空 cache
118139

119140
```python
120141
import json
@@ -133,13 +154,9 @@ res = requests.post(url, headers=headers, json=json.dumps(data))
133154

134155
https://mp.weixin.qq.com/s/ExIRu2o7yvXa6nNLZcCfhQ
135156

136-
## 架构大图
137-
138-
![modelcache modules](docs/modelcache_modules_20240409.png)
139-
140157
## 功能对比
141158

142-
功能方面,为了解决huggingface网络问题并提升推理速度,增加了embedding本地推理能力。鉴于SqlAlchemy框架存在一些限制,我们对关系数据库交互模块进行了重写,以更灵活地实现数据库操作。在实践中,大型模型产品需要与多个用户和多个模型对接,因此在ModelCache中增加了对多租户的支持,同时也初步兼容了系统指令和多轮会话。
159+
功能方面,为了解决 Hugging Face 网络问题并提升推理速度,增加了 embedding 本地推理能力。鉴于 SqlAlchemy 框架存在一些限制,我们对关系数据库交互模块进行了重写,以更灵活地实现数据库操作。在实践中,大型模型产品需要与多个用户和多个模型对接,因此在 ModelCache 中增加了对多租户的支持,同时也初步兼容了系统指令和多轮会话。
143160

144161
<table>
145162
<tr>
@@ -264,7 +281,7 @@ https://mp.weixin.qq.com/s/ExIRu2o7yvXa6nNLZcCfhQ
264281

265282
## 核心功能
266283

267-
在ModelCache中,沿用了GPTCache的主要思想,包含了一系列核心模块:adapter、embedding、similarity和data_manager。adapter模块主要功能是处理各种任务的业务逻辑,并且能够将embedding、similarity、data_manager等模块串联起来;embedding模块主要负责将文本转换为语义向量表示,它将用户的查询转换为向量形式,并用于后续的召回或存储操作;rank模块用于对召回的向量进行相似度排序和评估;data_manager模块主要用于管理数据库。同时,为了更好的在工业界落地,我们做了架构和功能上的升级,如下:
284+
在ModelCache 中,沿用了 GPTCache 的主要思想,包含了一系列核心模块:adapter、embedding、similarity 和 data_manager。adapter模块主要功能是处理各种任务的业务逻辑,并且能够将 embedding、similarity、data_manager等模块串联起来;embedding 模块主要负责将文本转换为语义向量表示,它将用户的查询转换为向量形式,并用于后续的召回或存储操作;rank 模块用于对召回的向量进行相似度排序和评估;data_manager 模块主要用于管理数据库。同时,为了更好的在工业界落地,我们做了架构和功能上的升级,如下:
268285

269286
- [x] 架构调整(轻量化集成):以类redis的缓存模式嵌入到大模型产品中,提供语义缓存能力,不会干扰LLM调用和安全审核等功能,适配所有大模型服务。
270287
- [x] 多种模型加载方案:
@@ -286,11 +303,11 @@ https://mp.weixin.qq.com/s/ExIRu2o7yvXa6nNLZcCfhQ
286303

287304
### Adapter
288305

289-
- [ ] register adapter for Milvus:根据scope中的model参数,初始化对应Collection 并且执行load操作
306+
- [ ] register adapter for Milvus:根据 scope 中的 model 参数,初始化对应 Collection 并且执行 load 操作
290307

291308
### Embedding model&inference
292309

293-
- [ ] inference优化:优化embedding推理速度,适配fastertransformer, TurboTransformers, ByteTransformer等推理引擎
310+
- [ ] inference 优化:优化 embedding 推理速度,适配fastertransformerTurboTransformers 和 ByteTransformer 等推理引擎
294311
- [ ] 兼容huggingface模型和modelscope模型,提供更多模型加载方式。
295312

296313
### Scalar Storage
11.2 KB
Binary file not shown.

docs/time-cost-comparison.webp

63.1 KB
Binary file not shown.

mulicache-readme-cn.md

+127
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,127 @@
1+
# MultiModal Cache
2+
3+
为满足多模态的性能要求,我们在 LLModel Cache 的基础上,开发了 MultiModal Cache 系统。MultiModal Cache 增强了 ModelCache 功能,架优化架构,适应多种应用场景。
4+
5+
- [MultiModal Cache](#multimodal-cache)
6+
- [最新动态](#最新动态)
7+
- [特性](#特性)
8+
- [性能](#性能)
9+
- [效果评估](#效果评估)
10+
- [参与贡献](#参与贡献)
11+
12+
## 最新动态
13+
14+
- [2024.12.12] MultiModal Cache 系统正式发布。
15+
16+
## 特性
17+
18+
| 场景 | 数据类型 | 图像格式 | 数据隔离 |
19+
|------|----------|----------|----------|
20+
| 文本对话 | 文本 | 不适用 | 支持 |
21+
| 图文理解 | 文本+图像 | image_url/image_base64 | 支持 |
22+
23+
- **兼容性**:支持文本和图片链接(image_url)和图片 Base64 编码三种数据格式及其组合。
24+
- **数据隔离**:支持多模型数据隔离,允许不同数据模型在同一系统中独立运行。
25+
- **模态隔离**:支持同一模型下不同模态数据(如文本和图像)的隔离处理。
26+
27+
## 性能
28+
29+
我们在生产环境中使用企业级数据库对 MultiModal Cache 进行了全面的性能评估。以下是详细的性能数据:
30+
31+
<table cellpadding="5" cellspacing="0" style="border-collapse: collapse;">
32+
<tr style="background-color: #B8D4FF;">
33+
<th>请求类型</th>
34+
<th>Cache Hit</th>
35+
<th>总耗时范围</th>
36+
<th>组件</th>
37+
<th>组件耗时</th>
38+
</tr>
39+
<tr style="background-color: #F2F2F2;">
40+
<td rowspan="6">Text</td>
41+
<td rowspan="3">Hit</td>
42+
<td rowspan="3">420ms-520ms</td>
43+
<td>Multi-Encoder (Text):</td>
44+
<td>~300ms</td>
45+
</tr>
46+
<tr style="background-color: #F2F2F2;">
47+
<td>向量存储检索</td>
48+
<td>40-50ms</td>
49+
</tr>
50+
<tr style="background-color: #F2F2F2;">
51+
<td>关系存储检索</td>
52+
<td>60-70ms</td>
53+
</tr>
54+
<tr>
55+
<td rowspan="3">Not Hit</td>
56+
<td rowspan="3">300ms+N(s)</td>
57+
<td>Multi-Encoder (Text):</td>
58+
<td>~300ms</td>
59+
</tr>
60+
<tr>
61+
<td>向量存储检索</td>
62+
<td>40-50ms</td>
63+
</tr>
64+
<tr>
65+
<td>大模型调用</td>
66+
<td>N (s)</td>
67+
</tr>
68+
<tr style="background-color: #F2F2F2;">
69+
<td rowspan="6">IMG_TEXT</td>
70+
<td rowspan="3">Hit</td>
71+
<td rowspan="3">600ms-800ms</td>
72+
<td>Multi-Encoder (image+text)</td>
73+
<td>~600ms</td>
74+
</tr>
75+
<tr style="background-color: #F2F2F2;">
76+
<td>向量存储检索</td>
77+
<td>40-50ms</td>
78+
</tr>
79+
<tr style="background-color: #F2F2F2;">
80+
<td>关系存储检索</td>
81+
<td>60-70ms</td>
82+
</tr>
83+
<tr>
84+
<td rowspan="3">Not Hit</td>
85+
<td rowspan="3">600ms+N(s)</td>
86+
<td>Multi-Encoder (image+text)</td>
87+
<td>~600ms</td>
88+
</tr>
89+
<tr>
90+
<td>向量存储检索</td>
91+
<td>40-50ms</td>
92+
</tr>
93+
<tr>
94+
<td>大模型调用</td>
95+
<td>N (s)</td>
96+
</tr>
97+
</table>
98+
99+
根据目前的评估结果,Embedding 的推理时间存在较大的优化空间。
100+
**说明**:使用嵌入式数据库可能会进一步提升性能。
101+
102+
## 效果评估
103+
104+
为全面评估 Cache 对模型服务的影响,我们进行了端到端的性能测试,ua 比较了有 Cache 和无 Cache 两种服务配置。我们使用了 5000 个测试用例的数据集进行自动化测试。
105+
106+
- 有 Cache 的预发模型服务:观察其响应时间,预期 Cache 的引入能够显著提升服务的性能,降低延迟。
107+
- 无 Cache 的线上模型服务,以获取其原始性能指标和输出结果。这些数据将作为对比基准。
108+
109+
为了确保 Cache 引入后的数据准确性和一致性,我们比较了两个服务返回的结果,验证了 Cache 机制是否会影响最终用户收到的回复内容。
110+
111+
与原始的直接模型调用方式相比,Cache Service 的调用耗时数据呈现出稳定的分布特征,性能上并不会随着模型参数规模的增加而受到影响。在传统情况下,随着模型参数规模的扩大,模型调用的耗时往往会上升,这是因为更大规模的模型需要更多的计算资源。Cache 服务通过存储经常访问的数据来避免重复的计算,从而一定程度上解耦了耗时与模型复杂性之间的关联。
112+
113+
![cache-service-cost-time-distribution](docs/cache-service-cost-time-distribution.webp)
114+
115+
我们对缓存命中的耗时与实际调用模型的耗时进行了对比分析。实验数据表明,在集成 Cache Service之后,基于 llama7B 模型,缓存命中所带来的性能提升超过了 40%。预计随着模型的持续迭代与优化,性能提升的幅度将会有更进一步的增长。
116+
117+
![time-cost-comparison](docs/time-cost-comparison.webp)
118+
119+
## 参与贡献
120+
121+
MultiModal Cache 是一个充满潜力的开源项目,我们欢迎各种形式的贡献:
122+
123+
- 提交问题和建议
124+
- 参与代码编写
125+
- 完善文档和示例
126+
127+
无论您是经验丰富的开发者还是新手,您的参与都将使这个项目更加出色,同时为开源社区做出贡献。

0 commit comments

Comments
 (0)