前言#
本文簡單記錄一下 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保持同步。