- 🔥🔥[2024.10.22] 增加1024程序员节任务。
- 🔥🔥[2024.04.09] 增加了多租户场景中Redis Search存储和检索embedding的能力,可以将Cache和向量数据库的交互耗时降低至10ms内。
- 🔥🔥[2023.12.10] 增加llmEmb、onnx、paddlenlp、fasttext等LLM embedding框架,并增加timm 图片embedding框架,用于提供更丰富的embedding能力。
- 🔥🔥[2023.11.20] codefuse-ModelCache增加本地存储能力, 适配了嵌入式数据库sqlite、faiss,方便用户快速启动测试。
- [2023.10.31] codefuse-ModelCache...
Codefuse-ModelCache 是一个开源的大模型语义缓存系统,通过缓存已生成的模型结果,降低类似请求的响应时间,提升用户体验。该项目从服务优化角度出发,引入缓存机制,在资源有限和对实时性要求较高的场景下,帮助企业和研究机构降低推理部署成本、提升模型性能和效率、提供规模化大模型服务。我们希望通过开源,分享交流大模型语义Cache的相关技术。
项目中启动服务脚本分为 flask4modelcache.py
和 flask4modelcache_demo.py
,其中:
flask4modelcache_demo.py
为快速测试服务,内嵌了 SQLite 和 FAISS,用户无需关心数据库相关事宜。flask4modelcache.py
为正常服务,需用户具备 MySQL 和 Milvus 等数据库服务。
-
python版本: 3.8 及以上
-
依赖包安装:
pip install -r requirements.txt
-
离线模型 bin 文件下载, 参考地址:Hugging Face,并将下载的 bin 文件,放到
model/text2vec-base-chinese
文件夹中。 -
执行
flask4modelcache_demo.py
启动服务。cd CodeFuse-ModelCache
python flask4modelcache_demo.py
在启动标准服务前,应该进行如下环境配置:
- 安装关系数据库 MySQL, 导入 SQL 创建数据表,MySQL 文件:
reference_doc/create_table.sql
。 - 安装向量数据库 Milvus。
- 在配置文件中添加数据库访问信息,配置文件为:
modelcache/config/milvus_config.ini
modelcache/config/mysql_config.ini
- 离线模型 bin 文件下载, 参考地址:Hugging Face,并将下载的 bin 文件,放到
model/text2vec-base-chinese
文件夹中。 - 通过flask4modelcache.py脚本启动后端服务。
当前服务以 restful API 方式提供 3 个核心功能:数据写入,cache 查询和 cache 数据清空。请求 demo 如下:
import json
import requests
url = 'http://127.0.0.1:5000/modelcache'
type = 'insert'
scope = {"model": "CODEGPT-1008"}
chat_info = [{"query": [{"role": "system", "content": "你是一个AI代码助手, 你必须提供中立的、无害的答案帮助用户解决代码相关的问题"}, {"role": "user", "content": "你是谁?"}],
"answer": "你好,我是智能助手,请问有什么能帮您!"}]
data = {'type': type, 'scope': scope, 'chat_info': chat_info}
headers = {"Content-Type": "application/json"}
res = requests.post(url, headers=headers, json=json.dumps(data))
import json
import requests
url = 'http://127.0.0.1:5000/modelcache'
type = 'query'
scope = {"model": "CODEGPT-1008"}
query = [{"role": "system", "content": "你是一个AI代码助手, 你必须提供中立的、无害的答案帮助用户解决代码相关的问题"}, {"role": "user", "content": "你是谁?"}]
data = {'type': type, 'scope': scope, 'query': query}
headers = {"Content-Type": "application/json"}
res = requests.post(url, headers=headers, json=json.dumps(data))
import json
import requests
url = 'http://127.0.0.1:5000/modelcache'
type = 'remove'
scope = {"model": "CODEGPT-1008"}
remove_type = 'truncate_by_model'
data = {'type': type, 'scope': scope, 'remove_type': remove_type}
headers = {"Content-Type": "application/json"}
res = requests.post(url, headers=headers, json=json.dumps(data))
https://mp.weixin.qq.com/s/ExIRu2o7yvXa6nNLZcCfhQ
功能方面,为了解决 Hugging Face 网络问题并提升推理速度,增加了 embedding 本地推理能力。鉴于 SqlAlchemy 框架存在一些限制,我们对关系数据库交互模块进行了重写,以更灵活地实现数据库操作。在实践中,大型模型产品需要与多个用户和多个模型对接,因此在 ModelCache 中增加了对多租户的支持,同时也初步兼容了系统指令和多轮会话。
模块 | 功能 | ||
---|---|---|---|
ModelCache | GPTCache | ||
基础接口 | 数据查询接口 | ☑ | ☑ |
数据写入接口 | ☑ | ☑ | |
Embedding | embedding模型配置 | ☑ | ☑ |
大模型embedding层 | ☑ | ||
bert模型长文本处理 | ☑ | ||
Large model invocation | 是否与大模型解耦 | ☑ | |
embeddingg模型本地加载 | ☑ | ||
数据隔离 | 模型数据隔离 | ☑ | ☑ |
超参数隔离 | |||
数据库 | MySQL | ☑ | ☑ |
Milvus | ☑ | ☑ | |
OceanBase | ☑ | ||
会话管理 | 单轮回话 | ☑ | ☑ |
system指令 | ☑ | ||
多轮回话 | ☑ | ||
数据管理 | 数据持久化 | ☑ | ☑ |
一键清空缓存 | ☑ | ||
租户管理 | 支持多租户(多模型) | ☑ | |
milvus多表能力 | ☑ | ||
其他 | 长短对话区分能力 | ☑ |
在ModelCache 中,沿用了 GPTCache 的主要思想,包含了一系列核心模块:adapter、embedding、similarity 和 data_manager。adapter模块主要功能是处理各种任务的业务逻辑,并且能够将 embedding、similarity、data_manager等模块串联起来;embedding 模块主要负责将文本转换为语义向量表示,它将用户的查询转换为向量形式,并用于后续的召回或存储操作;rank 模块用于对召回的向量进行相似度排序和评估;data_manager 模块主要用于管理数据库。同时,为了更好的在工业界落地,我们做了架构和功能上的升级,如下:
- 架构调整(轻量化集成):以类redis的缓存模式嵌入到大模型产品中,提供语义缓存能力,不会干扰LLM调用和安全审核等功能,适配所有大模型服务。
- 多种模型加载方案:
- 支持加载本地embedding模型,解决huggingface网络连通问题
- 支持加载多种预训练模型embeding层
- 数据隔离能力
- 环境隔离:可依据环境,拉取不同的数据库配置,实现环境隔离(开发、预发、生产)
- 多租户数据隔离:根据模型动态创建collection,进行数据隔离,用于大模型产品中多个模型/服务数据隔离问题
- 支持系统指令:采用拼接的方式,解决propmt范式中sys指令问题。
- 长短文本区分:长文本会给相似评估带来更多挑战,增加了长短文本的区分,可单独配置判断阈值。
- milvus性能优化:milvus consistency_level调整为"Session"级别,可以得到更好的性能。
- 数据管理能力:
- 一键清空缓存的能力,用于模型升级后的数据管理。
- 召回hitquery,用于后续的数据分析和模型迭代参考。
- 异步日志回写能力,用于数据分析和统计
- 增加model字段和数据统计字段,用于功能拓展。
- register adapter for Milvus:根据 scope 中的 model 参数,初始化对应 Collection 并且执行 load 操作。
- inference 优化:优化 embedding 推理速度,适配fastertransformer、TurboTransformers 和 ByteTransformer 等推理引擎。
- 兼容huggingface模型和modelscope模型,提供更多模型加载方式。
- Support MongoDB。
- Support ElasticSearch。
- 在多模态场景中适配faiss存储。
- 增加Rank模型,对embedding召回后的数据,进行精排。
- 支持fastapi。
- 增加前端界面,用于测试。
本项目参考了以下开源项目,在此对相关项目和研究开发人员表示感谢。
GPTCache
ModelCache是一个非常有趣且有用的项目,我们相信这个项目有很大的潜力,无论你是经验丰富的开发者,还是刚刚入门的新手,都欢迎你为这个项目做出一些贡献,包括但不限于:提交问题和建议,参与代码编写,完善文档和示例。你的参与将会使这个项目变得更好,同时也会为开源社区做出贡献。