
每度过一个坎坷,记得留下哪怕微小的指引,也许能帮到后面的人

调用在线模型API不仅依赖网络,对其拓展、定制、二开的空间都比较有限,于是很多人走上了本地部署开源大模型的路线,上一篇文章我对模型的选择进行了大致讲解

总结来说,对比体验多个开源模型后,通义千问(Qwen)1.5是我觉得目前中文语境下综合表现最好的开源模型,根据你的显卡能力,它有0.5/1.8/4/7/14/72b多个参数规模可选,其中14b参数表现出的理解力可以媲美甚至部分场景超越GPT3.5;而且千问的量化损失非常小,14b量化到Int4后,最低3000多元的16G显存显卡就能流畅推理,是一个非常好的选择。Qwen的GitHub主页:https://github.com/QwenLM
这是一个由国内开发者基于当下流行的LangChain进一步开发的推理框架,它同时支持多种国内外本地大语言模型和在线模型API,除了基础LLM对话,还集成了文档阅读、本地向量知识库、在线搜索引擎API、Agent等。是我用过的几个框架中目前最推荐的

GitHub已有2.7w⭐️
那么本文就使用它,来部署阿里的通义千问大语言模型,帮你实现自己的本地GPT和问答知识库。想了解更多特性可以直接前往GitHub查看该项目
主页:https://github.com/chatchat-space/Langchain-Chatchat
或者跟随本文,直接带你走完整个过程 (前提:Windows或Linux系统、科学上网)
这是最复杂的一个环节,也使我耗费了很多时间在反复卸载重装上,概括来说,你一共需要装7个库:
Git、CUDA、Pytorch、Transformers、AutoGPTQ(如果需要量化)、Optimum
但问题是,除了Git以外,这6个库之间的版本、与你的显卡型号、框架和模型,都有匹配关系,这一点非常重要,并不是直接安装最新版就行了,版本高了或低了都可能出错
首先是Langchain-chatchat框架的要求:
1. Python版本推荐3.11.7,但我实测3.10.11~3.11.9都是没问题的,下载:
https://www.python.org/downloads/ 2. Git,这个没有要求,最新版即可,下载:
https://git-scm.com/download/win
其次是你的显卡支持哪个CUDA版本(只有N卡支持CUDA,A卡玩家请另寻高明),一般来说30系以后的新显卡都支持12.1以上,参考如下方法检查:
https://blog.csdn.net/CheCacao/article/details/131611424 若确定支持12.1以上,请选择12.1或12.1.1,不要选更高的版本哪怕你的显卡支持;如果支持11.8以上但不到12.1的话,则选择11.8;如果支持不到11.8的话请另行咨询,我也没试过了
确定版本后,从这里找到你的版本并下载安装:
https://developer.nvidia.com/cuda-toolkit-archive
下一个是Transformers,取决于你使用的模型,以Qwen为例,目前开源了1.0和1.5两个版本(推荐1.5)
Qwen1.0要求Transformers版本≥4.35.0
Qwen1.5要求Transformers版本≥4.37.0 (建议4.37.2)
可在PyPI中找到对应版本:https://pypi.org/project/transformers/#history 并使用pi下载
例如4.37.2,在CMD中使用如下命令:
pip install transformers==4.37.2
模型选好后,你是否需要量化?
量化是将模型的参数从高精度转为低精度,好处是可以减少模型大小,同时保持模型的性能,大致原理如下
参考:https://blog.csdn.net/penriver/article/details/136411485
简而言之,原本显卡跑不动的参数版本,量化后就能跑了,这张表列出了Qwen的各参数在不同精度下对显存的需求和平均推理速度,你可以根据你的硬件情况选择合适的版本

以13G显存为例,原本只够7b的模型,但将14b模型量化到Int4后,13G显存也能跑了;量化也有缺点,由于牺牲了参数精度,理论上可能会让语言流畅度下降和语义理解减弱,但这个要看实际情况,至少Qwen的14b量化到Int4我没发现有什么问题,官方给出的分数对比也表明影响很微小,所以取决于你的要求和硬件条件
如果要量化,那么目前有3种主流方法:AWQ、GPTQ、GGUF
参考:https://zhuanlan.zhihu.com/p/688736901
我用的是GPTQ,这个相对成熟,有一个能直接用的库:Auto-GPTQ
版本List:https://github.com/AutoGPTQ/AutoGPTQ/blob/main/docs/INSTALLATION.md
在Qwen的官方文档中要求Auto-GPTQ版本≥0.51,我实测0.60也是可以的,但再高的版本就开始卡了,因此建议0.6.0

从下载页可以看到,它的每个版本都对应了CUDA12.1和11.8两种类型,根据你的CUDA版本选择即可,例如我用的是0.6.0 CUDA12.1版本,使用CMD下载,命令如下:
pip install auto-gptq==0.6.0
接着是Pytorch,上面的AutoGPTQ版本最右侧,还列出了对torch的版本要求,0.6.0对应torch2.1.1、0.5.1对应torch2.1.0,而且每个版本同样分CUDA12.1和11.8,版本List:
https://pytorch.org/get-started/previous-versions/ 那么我使用的是2.1.1 CUDA12.1版本,命令:
pip install torch==2.1.1 torchvision==0.16.1 torchaudio==2.1.1 --index-url https://download.pytorch.org/whl/cu121
最后是Optimum,GitHub主页:https://github.com/huggingface/optimum
在Qwen的官方文档中要求版本≥1.14.0,这里直接和我一样使用1.14.1即可,命令:
pip install optimum==1.14.1 到这,你已经准备好了这个项目所需的全部环境
先下载原版的LangChain,在Langchain-Chatchat的文档中,当前最新稳定版2.10,它要求LangChain版本≤0.0.354,那我们就用这个版本,命令:
pip install langchain==0.0.354 然后拉取Langchain-Chatchat项目,同样使用CMD下载,命令:
git clone https://github.com/chatchat-space/Langchain-Chatchat.git 下载完进入项目目录:
cd Langchain-Chatchat 依次安装全部的依赖:
pip install -r requirements.txt
pip install -r requirements_api.txt
pip install -r requirements_webui.txt 然后依次下载模型,这里我使用的是Qwen1.5 14b GPTQ Int4量化版,你可以根据你的显卡情况,在魔塔:https://modelscope.cn/organization/qwen 上选择适合你的版本,并替换下方第二条命令
git lfs install
git clone https://www.modelscope.cn/qwen/Qwen1.5-14B-Chat-GPTQ-Int4.git
git clone https://www.modelscope.cn/AI-ModelScope/bge-large-zh-v1.5.git 现在整个项目都下载完了,我们开始安装
首先展开配置文件
python copy_config_example.py 由于这个项目默认使用的是模型是清华的ChatGLM3-6b,并非Qwen,因此我们需要对model_config.py这个文件进行修改,它在项目的configs目录下,默认目录:C:\Users\你的用户名\Langchain-Chatchat\configs

找到以后使用编辑器或记事本打开它,找到第29行,LLM_MODELS里,把原本的"chatglm3-6b"替换为你下载的模型名称,例如"Qwen1.5-14B-Chat-GPTQ-Int4"

然后找到第33行,LLM_DEVICE里,把原本的"auto"改为"cuda"

还需要在第140行MODEL_PATH下面的一大堆模型里确认下有没你使用的模型名称,若找不到则手动添加上去,例如:"Qwen1.5-14B-Chat-GPTQ-Int4": "Qwen/Qwen1.5-14B-Chat-GPTQ-Int4", (注意加逗号)

如果你是Windows,那么第251行NLTK_DATA_PATH解析的路径可能会错误,需要手动设置为configs文件夹在你电脑里的绝对目录,例如将其替换为:r"C:\Users\你的用户名\Langchain-Chatchat\configs"

最后保存model_config.py
如果你是Windows,还需要检查你的Python安装目录下有没有一个名为pwd.py的文件,目录通常为:C:\Users\你的用户名\AppData\Local\Programs\Python\Python311(311是你当前使用的版本,也可能是310等)

如果没找到,则在此位置手动创建一个,文件内容如下:
from os import *
from pwd import *
def get_username():
return getpwuid(getuid())[0] 然后保存为pwd.py
如果你和我一样使用了量化版本的模型,还需要到你的项目目录下,找到你安装的模型的目录,在里面找到config.json这个文件,例如我的目录是:C:\Users\用户名\Langchain-Chatchat\Qwen1.5-14B-Chat-GPTQ-Int4

打开这个文件,将第40行"use_exllama": true替换为"disable_exllama":true并保存

注意没有逗号😅
好了,需要修改的配置都改完了
继续使用命令:
python startup.py -a 并大喊:原神,启动!(🤪此步骤可降低报错概率)

启动过程
启动成功会自动打开浏览器,进入WebUI,你也可以手动访问默认端口:
http://127.0.0.1:8501 这是对话界面

来一组挖坑提问3连,反应还不错
如果你想调用这个本地服务的API,可查看接口文档,默认端口:
http://127.0.0.1:7861 这是接口界面

接口十分丰富
这两个服务的端口在Langchain-Chatchat\configs\server_config.py这个文件里可以改
后续,我还会把这个框架的拓展功能,如在线模型API、搜索引擎API、本地知识库搭建等的配置过程写下来,可以关注我。如果这篇文章帮到你了,😉也鼓励你写下你的踩坑经验,以帮助更多人~