Codefuse-ModelCache
中文 | English
目录
新闻
- 🔥🔥[2024.04.09] 添加Redis搜索以在多租户场景中存储和检索嵌入,这可以将Cache和向量数据库之间的交互时间减少到10ms。
- 🔥🔥[2023.12.10] 我们集成了如‘llmEmb’、‘ONNX'、‘PaddleNLP’、‘FastText’等LLM嵌入框架,并且独立集成了图片嵌入框架‘timm’,以增强嵌入功能。
- 🔥🔥[2023.11.20] codefuse-ModelCache已集成本地存储,如sqlite和faiss,为用户提供快速启动测试的便利。
- [2023.08.26] codefuse-ModelCache...
简介
Codefuse-ModelCache是一个大型语言模型(LLM)的语义缓存。通过缓存预生成的模型结果,它减少了相似请求的响应时间并改善了用户体验。
本项目旨在通过引入缓存机制来优化服务,帮助企业和研究机构降低推理部署成本,提高模型性能和效率,并为大型模型提供可扩展的服务。通过开源,我们希望分享和交换与大型模型语义缓存相关的技术。
快速部署
项目的启动脚本分为flask4modelcache.py和flask4modelcache_demo.py。
- flask4modelcache_demo.py是一个嵌入sqlite和faiss的快速测试服务,用户无需关心数据库相关事项。
- flask4modelcache.py是正常服务,需要配置mysql和milvus数据库服务。
依赖
- Python版本: 3.8及以上
- 包安装
pip install -r requirements.txt
服务启动
Demo服务启动
- 从以下地址下载嵌入模型bin文件: https://huggingface.co/shibing624/text2vec-base-chinese/tree/main。 将下载的bin文件放在model/text2vec-base-chinese文件夹中。
- 使用flask4modelcache_dome.py脚本启动后端服务。
cd CodeFuse-ModelCache
python flask4modelcache_demo.py
Normal服务启动
在启动服务之前,应该执行以下环境配置:
- 安装关系数据库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提供三个核心功能: 缓存写入、缓存查询和缓存清除。 示例:
缓存写入
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": "Who are you?"}]
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
模块
功能比较
在功能方面,我们对git仓库进行了多项修改。首先,我们解决了huggingface的网络问题,并通过引入本地嵌入推理能力提升了推理速度。此外,考虑到SqlAlchemy框架的局限性,我们对负责与关系数据库交互的模块进行了完全的重构,使数据库操作更加灵活。 在实际场景中,LLM产品往往需要集成多个用户和多个模型。 因此,我们在ModelCache中增加了对多租户的支持,同时也对系统命令和多轮对话进行了初步的兼容性调整。
模块 | 功能 | ||
---|---|---|---|
ModelCache | GPTCache | ||
基本接口 | 数据查询接口 | ☑ | ☑ |
数据写入接口 | ☑ | ☑ | |
嵌入 | 嵌入模型配置 | ☑ | ☑ |
大模型嵌入层 | ☑ | ||
BERT模型长文本处理 | ☑ | ||
大模型调用 | 与大模型解耦 | ☑ | |
本地加载嵌入模型 | ☑ | ||
数据隔离 | 模型数据隔离 | ☑ | ☑ |
超参数隔离 | |||
数据库 | MySQL | ☑ | ☑ |
Milvus | ☑ | ☑ | |
OceanBase | ☑ | ||
会话管理 | 单轮对话 | ☑ | ☑ |
系统命令 | ☑ | ||
多轮对话 | ☑ | ||
数据管理 | 数据持久化 | ☑ | ☑ |
一键清除缓存 | ☑ | ||
租户管理 | 支持多租户 | ☑ | |
Milvus多集合能力 | ☑ | ||
其他 | 长短对话区分 | ☑ |
核心特性
在ModelCache中,我们采用了GPTCache的主要思想,包括核心模块:adapter、embedding、similarity和data_manager。adapter模块负责处理各种任务的业务逻辑,可以连接embedding、similarity和data_manager模块。embedding模块主要负责将文本转换为语义向量表示,将用户查询转化为向量形式。rank模块用于对召回的向量进行排序和相似度评估。data_manager模块主要用于管理数据库。为了更好地促进工业应用,我们进行了以下架构和功能升级:
- 我们将其修改为类似Redis,并嵌入到LLMs产品中,提供语义缓存能力。这确保了它不会干扰LLM调用、安全审计等功能,实现与所有大规模模型服务的兼容性。
- 多种模型加载方案:
- 支持加载本地嵌入模型以解决Hugging Face网络连接问题。
- 支持加载各种预训练模型嵌入层。
- 数据隔离能力
- 环境隔离:可以根据环境拉取不同的数据库配置,实现环境隔离(开发、预发布、生产)。
- 多租户数据隔离:根据模型动态创建集合进行数据隔离,解决LLMs产品中多模型/服务场景下的数据隔离问题。
- 支持系统命令:采用连接的方法解决提示格式中的系统命令问题。
- 长短文本区分:长文本对相似度评估提出了更大的挑战。为了解决这一问题,我们增加了长短文本区分,可以分别配置确定相似性的阈值。
- Milvus性能优化:Milvus的一致性级别调整为“会话”级别,这可以带来更好的性能。
- 数据管理能力:
- 可以清除缓存用于模型升级后的数据管理。
- 命中查询召回用于后续数据分析和模型迭代参考。
- 异步日志写回能力用于数据分析和统计。
- 增加了模型字段和数据统计字段用于功能扩展。
待办事项
Adapter
- 注册Milvus适配器:根据范围中的“模型”参数,初始化相应的集合并执行加载操作。
嵌入模型与推理
- 推理优化:优化嵌入推理速度,兼容FasterTransformer、TurboTransformers及ByteTransformer等推理引擎。
- 兼容Hugging Face模型和ModelScope模型,提供更多模型加载方法。
标量存储
- 支持MongoDB
- 支持ElasticSearch
向量存储
- 在多模态场景中适配Faiss存储。
排序能力
- 添加排序模型以细化嵌入召回后的数据顺序。
服务
- 支持FastAPI。
- 增加可视化接口提供更直观的用户体验。
致谢
本项目参考了以下开源项目。我们对这些项目及其开发者的贡献和研究表示感谢。
GPTCache
贡献
ModelCache是一个令人着迷且极具价值的项目,无论您是经验丰富的开发者,还是刚刚入门的新手,您的贡献都受到了热烈欢迎。无论是通过提出问题、提供建议、编写代码,还是撰写文档和创建示例,您对该项目的参与将提升项目质量,并对开源社区做出重大贡献。