banner
hughie

hughie

热爱技术的小菜鸟, 记录一下所学所感

wenda-一個輸出效果不亞於大模型的有趣開源自然語言模型

前言#

​ 本文簡單記錄一下 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文件中增加兩行:

4-glm6bformac.png

  • 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 的模型策略有如下選擇:

4-RWKVstrategy.jpg

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文件了,在裡面配置模型加載路徑和知識庫模式等參數。

知識庫模式#

知識庫原理是生成一些提示信息,會插入到對話裡面。

項目中的模式有如下幾種:

  1. bing 模式,cn.bing 搜索,僅國內可用
  2. bingxs 模式,cn.bing 學術搜索,僅國內可用
  3. bingsite 模式,bing 站內搜索,需設置網址
  4. st 模式,sentence_transformers+faiss 進行索引
  5. mix 模式,融合
  6. fess 模式,本地部署的fess 搜索,並進行關鍵詞提取

可以分為在線和本地兩類,在線則是使用 bing 搜索聯網查詢信息,本地則是使用個人知識補充。

具體可以參考官方模式介紹

都配置好後執行python wenda.py即可訪問 url 使用。

以下是使用 RWKV 模型時的測試效果:

4-rwkv-1.png

寫論文的時候支持自動完成子目標的提問回答:

4-rwkv-2.png

另一個話題的效果:

4-rwkv-3.png

使用 ChatGLM-6B-int4 的測試效果:

4-chatglm6b-1.png

4-chatglm6b-2.png

感覺上 ChatGLM-6B 的效果要好,速度沒看出什麼差異。

至於 llama 系的測試結果太差,還是不要用了。

四、總結#

​ 使用下來體驗還是不錯的,要知道包括 ChatGLM、RWKV、LLaMa、gpt4all 還有 LLaVa 等模型,我都有試用過,這些模型相比 ChatGPT 在直接使用上的效果都差了那麼些意思,而使用 wenda 進行測試的效果卻讓我驚訝,達到了四兩撥千斤的效果,其中 ChatGLM-6B 的效果最好,同時在使用 OpenAI API 時還能得到更好的效果。

​ 但是即使加了知識庫的功能,在生成準確性上還是難以保證的,這個即使在 ChatGPT 上也會出現胡言亂語,所以使用時還是要仔細甄別內容有效性。

​ 總體而言,在使用 wenda 時,模型選擇不同時,這些模型都能夠讓我感受到自然而流暢的對話體驗,對於想本地部署的人而言是非常棒的項目。

最後#

參考文章:

wenda 官方項目

wenda 整合包

ChatGLM6B 官方項目

RWKV 官方項目

1.5G 顯存就能運行的 RNN 14B 的開源模型


聲明#

本文僅作為個人學習記錄。

本文與HBlog保持同步。

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。