前言#
本文简单记录一下 wenda 本地使用情况。
wenda,是一个支持本地知识库的,支持联网搜索的,实现类似 AutoGPT 查询总结输出的,使用小模型达到效果不亚于 ChatGPT 的开源自然语言模型。
正文#
一、wenda 介绍#
闻达是一个 LLM 调用平台,旨在为小模型外挂知识库查找的方式,实现类似于大模型的生成能力。支持 chatGLM-6B、chatRWKV、chatYuan、llama 系列模型,提供自动保存对话历史、知识库扩展模型能力、参数在线调整、局域网、内网部署和多用户同时使用等功能。
二、wenda 安装#
1、安装 wenda#
下载项目文件,安装通用依赖,
git clone https://github.com/l15y/wenda.git
pip install -r requirements.txt
根据要使用的模型分别安装不同的依赖库。
2、下载 LLM 模型#
推荐使用 ChatGLM-6B-int4 和 RWKV-4-Raven-7B-v10 模型,ChatGLM-6B-int4 可以在 6G 显存或内存上运行,RWKV 根据分配策略而定。
- ChatGLM
ChatGLM-6B 是一个开源的、支持中英双语的对话语言模型,基于 General Language Model (GLM) 架构,具有 62 亿参数。用户可以在消费级的显卡上进行本地部署(INT4 量化级别下最低只需 6GB 显存),并使用 P-Tuning v2 的高效参数微调方法定制自己的应用场景。需要注意的是目前该模型具有相当多的局限性,如可能生成有害 / 有偏见内容等。
官方提供了懒人包下载,里面有程序主体和多个模型,也可以在huggingface上寻找更优化的模型版本。
如果要使用 Apple Silicon 的 GPU 运行,需要修改config.xml
文件中的 GLM6B 策略项为mps fp16
,再在plugins/llm_glm6b.py
文件中增加两行:
- RWKV
ChatRWKV 是一个类似于 ChatGPT 但由 RWKV(100% RNN)语言模型功驱动的聊天工具,可扩展性和质量与 transformer 相当,且速度更快且可节约 VRAM。它还提供了 v2 版本,包括流和分离策略以及 INT8。用户应注意在构建 ChatRWKV 聊天机器人时检查状态的文本以防止错误,并使用推荐的格式进行聊天。
目前 RWKV 有大量模型,对应各种场景,各种语言:
- Raven 模型:适合直接聊天,适合 + i 指令。有很多种语言的版本,看清楚用哪个。适合聊天、完成任务、写代码。可以作为任务去写文稿、大纲、故事、诗歌等等,但文笔不如 testNovel 系列模型。
- Novel-ChnEng 模型:中英文小说模型,可以用 + gen 生成世界设定(如果会写 prompt,可以控制下文剧情和人物),可以写科幻奇幻。不适合聊天,不适合 +i 指令。
- Novel-Chn 模型:纯中文网文模型,只能用 + gen 续写网文(不能生成世界设定等等),但是写网文写得更好(也更小白文,适合写男频女频)。不适合聊天,不适合 +i 指令。
- Novel-ChnEng-ChnPro 模型:将 Novel-ChnEng 在高质量作品微调(名著,科幻,奇幻,古典,翻译,等等)。
wenda 里推荐使用RWKV-4-Raven-7B-v10-Eng49%-Chn50%-Other1%-20230420-ctx4096
,可以在huggingfaces上下载各个版本。
RWKV 的模型策略有如下选择:
RWKV-4-Raven-7B-v10 模型有 13G 大小,如果使用cuda fp16
加载需要 15G + 的显存,对于普通消费级显卡不友好,所有可以选择cuda fp16i8 *20+
这种策略,如果显存还是不够就减少层数,比如*18+
,这是流式使用 GPU,在速度上会比全部加载要慢。甚至有人更极限,在 2G 显存跑,可以参考这篇文章,使用cuda fp16i8 *0+ -> cpu fp32 *1
策略。
如果显存足够还是全加载 cuda 吧,RWKV 相比 ChatGLM 在同参数量上速度有很大优势。
编译 RWKV 的 cuda_kernel#
在 RWKV 中还有一个环境变量RWKV_CUDA_ON,可以编译 RWKV 的 cuda_kernel, 进一步加速推理 (虽然我的卡不加速也很快😀),需要 gcc5+,配置 CUDA_HOME,我的测试环境是 Pytorch1.12,cuda 是 11.3,在编译 kernel 时报错 #error You need C++14 to compile PyTorch
,这时候需要修改 rwkv 库中的model.py
文件,将编译选项-std=c++17
修改为-std=c++14
即可完成编译。
- LLaMa
llama 系的模型有很多,推荐 vicuna-13B,选择使用 ggml int4 量化版本,在此处下载。
需要注意的是在安装 llama-cpp-python 时,有些机器编译失败,需要使用 gcc11 可以编译成功,下面是编译 gcc11 和使用 gcc11 编译 llama-cpp-python 的步骤:
编译安装 gcc11
git clone --branch releases/gcc-11.1.0 https://github.com/gcc-mirror/gcc.git
# 进入gcc-11.1.0目录
./contrib/download_prerequisites
./configure --prefix=/usr/local/gcc-11.1.0 --enable-bootstrap --enable-languages=c,c++ --enable-threads=posix --enable-checking=release --enable-multilib --with-system-zlib
安装编译32位C/C++需要的依赖
yum install glibc-devel.i686 libstdc++-devel.i686
#开始编译
make -j$(nproc) && make install
编译安装 llama-cpp-python
export CC=/usr/local/gcc-11.1.0/bin/gcc
export CXX=/usr/local/gcc-11.1.0/bin/g++
pip install llama-cpp-python
- OpenAI API
wenda 里还可以直接使用 OpenAI 的 API,再配合知识库功能,效果会更好。
三、wenda 使用#
安装好项目主体,下载好模型后就可以配置config.xml
文件了,在里面配置模型加载路径和知识库模式等参数。
知识库模式#
知识库原理是生成一些提示信息,会插入到对话里面。
项目中的模式有如下几种:
- bing 模式,cn.bing 搜索,仅国内可用
- bingxs 模式,cn.bing 学术搜索,仅国内可用
- bingsite 模式,bing 站内搜索,需设置网址
- st 模式,sentence_transformers+faiss 进行索引
- mix 模式,融合
- fess 模式,本地部署的fess 搜索,并进行关键词提取
可以分为在线和本地两类,在线则是使用 bing 搜索联网查询信息,本地则是使用个人知识补充。
具体可以参考官方模式介绍。
都配置好后执行python wenda.py
即可访问 url 使用。
以下是使用 RWKV 模型时的测试效果:
写论文的时候支持自动完成子目标的提问回答:
另一个话题的效果:
使用 ChatGLM-6B-int4 的测试效果:
感觉上 ChatGLM-6B 的效果要好,速度没看出什么差异。
至于 llama 系的测试结果太差,还是不要用了。
四、总结#
使用下来体验还是不错的,要知道包括 ChatGLM、RWKV、LLaMa、gpt4all 还有 LLaVa 等模型,我都有试用过,这些模型相比 ChatGPT 在直接使用上的效果都差了那么些意思,而使用 wenda 进行测试的效果却让我惊讶,达到了四两拨千斤的效果,其中 ChatGLM-6B 的效果最好,同时在使用 OpenAI API 时还能得到更好的效果。
但是即使加了知识库的功能,在生成准确性上还是难以保证的,这个即使在 ChatGPT 上也会出现胡言乱语,所以使用时还是要仔细甄别内容有效性。
总体而言,在使用 wenda 时,模型选择不同时,这些模型都能够让我感受到自然而流畅的对话体验,对于想本地部署的人而言是非常棒的项目。
最后#
参考文章:
声明#
本文仅作为个人学习记录。
本文与HBlog保持同步。