- 🔥🔥[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文件下载, 参考地址:https://huggingface.co/shibing624/text2vec-base-chinese/tree/main,并将下载的bin文件,放到 model/text2vec-base-chinese 文件夹中。
- 执行flask4modelcache_demo.py启动服务。
cd CodeFuse-ModelCache
python flask4modelcache_demo.py
在启动服务前,应该进行如下环境配置:
- 安装关系数据库 mysql, 导入sql创建数据表,sql文件:
reference_doc/create_table.sql
- 安装向量数据库milvus
- 在配置文件中添加数据库访问信息,配置文件为:
modelcache/config/milvus_config.ini
modelcache/config/mysql_config.ini
- 离线模型bin文件下载, 参考地址:https://huggingface.co/shibing624/text2vec-base-chinese/tree/main,并将下载的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
功能方面,为了解决huggingface网络问题并提升推理速度,增加了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是一个非常有趣且有用的项目,我们相信这个项目有很大的潜力,无论你是经验丰富的开发者,还是刚刚入门的新手,都欢迎你为这个项目做出一些贡献,包括但不限于:提交问题和建议,参与代码编写,完善文档和示例。你的参与将会使这个项目变得更好,同时也会为开源社区做出贡献。