事先说一下,我本地的显卡4070只有12G显存,无法运行本地知识库,我把自己折腾的过程和遇到的坑先记录一下吧,后续如果有算力的话就再跑一遍试试。后续来了:【AI】使用阿里云免费服务器搭建Langchain-Chatchat本地知识库
Langchain-Chatchat曾用名Langchain-ChatGLM,是智谱AI的本地知识库项目,其官方介绍如下:️ 一种利用 langchain 思想实现的基于本地知识库的问答应用,目标期望建立一套对中文场景与开源模型支持友好、可离线运行的知识库问答解决方案。
项目地址:https://github.com/chatchat-space/Langchain-Chatchat
之前有看过使用ChatGLM结合Langchain构建本地知识库的内容,随着ChatGLM3-6B模型的发布,我发现官方竟然也出了本地知识库的项目,试想肯定还是官方对项目的了解最深入,所以还是适用一下吧。官方wiki上推荐是Linux系统,但是由于我没有Linux的环境,所以还是尝试在Windows环境上跑一下吧。
wiki中环境的要求如下:
最低要求
该要求仅针对标准模式,轻量模式使用在线模型,不需要安装torch等库,也不需要显卡即可运行。
Python 版本: >= 3.8(很不稳定), < 3.12
CUDA 版本: >= 12.1
推荐要求
开发者在以下环境下进行代码调试,在该环境下能够避免最多环境问题。
Python 版本 == 3.11.7
CUDA 版本: == 12.1
根据上述要求,适用Anaconda创建虚拟环境,我这边选择的python版本是3.10
conda create -n chatchat python=3.10
然后去下载whl文件安装cuda版本的torch、torchvision、torchaudio;下载地址:https://download.pytorch.org/whl/torch_stable.html,根据自己需求下载即可
然后使用pip install直接安装即可。
可以去github上拉取代码,也可以去官方文档的分享里去下载懒人包,我比较懒,所以选择了后者。
https://pan.baidu.com/s/1fHElFanrdK9Y-pTpeY_azg?pwd=glut
解压chatchat和model,两者放在同级目录下面。
进入chatchat目录下面,可以看到官方给出了快速体验的bat启动文件,按照顺序启动1和2即可
懒人包中提供了虚拟环境等可供直接运行,我们之前准备的环境看样子也用不上,事情本来应该是很顺利的,但是很多情况事与愿违。
由于项目在启动时需要联网加载Embedding 模型 BAAI/bge-large-zh ;如果运行环境不能魔法联网,就最好先去huggingface上把模型下载下来。
下载好之后,我把模型和ChatGLM3-6B放在一起
然后需要去修改一下模型加载的路径,这里可以参考chatglm的配置,配置在model_config.py文件中
修改如下:
由于本地显存限制,加载ChatGLM3-6B需要13G的显存,直接运行fp16的模型显存直接爆掉了,所以我想着退而求其次,实施8Bit量化的模型能不能跑,启动程序其实最后是运行了python startup.py -a的启动命令,所以先去startup.py中找一下有没有配置8bit量化的地方。
看样子把这里改成True
就好了,但是感觉直接在代码中改有点不够优雅,于是去看看配置文件,发现在server_config.py中存在开启的参数,于是修改,然后运行
解决了模型的问题之后,点击第二个bat文件运行,发现能够正常启动了,API文档页也可以直接打开了,但是重要的webui页面却怎么也打不开,于是查看日志,发现了问题,原来是运行webui的环境变量出现了问题,导致启动webui进程的命令找不到python。于是还是去startup.py中找解决方法:
这里用subprocess的方式运行webui,又遇到知识盲点了,麻爪了,不知道在哪里设置python的路径了。
不能耽误到这里吧,然后我就想,反正程序里面也是单独运行的api和webui,我能不能开两个窗口去分别运行这两个东西呢。
你别说,还真可以,官方wiki下是这样描述一键启动的
那我就使用–all-api参数来运行吧
由于没有用懒人包中的虚拟环境,我们还需要将我们之前准备的环境装上依赖,这简单,我们直接去pip install -r requirements.txt好了。
不过需要注意的是,为了在Windows环境安装cuda版本的torch不出错,我们使用whl文件安装了torch相关的依赖,所以需要在requirements.txt中将这三个依赖注释掉,以防安装过程中冲突或又被不合时宜的版本覆盖了。
然后就可以愉快的运行api服务了
然后再使用streamlit运行webui
streamlit run webui.py --server.address 127.0.0.1 --server.port 5678 --theme.base light --theme.primaryColor #165dff --theme.secondaryBackgroundColor #f5f5f5" --theme.textColor #000000
事情变得顺利了,webui界面出来了,测试对话也能够正常使用了。
本来因为都可以了,但是在创建文档知识库的时候报错了,报错是数据类型不适合,盲猜因为int8量化导致的模型参数值错误,所以应该是不能使用量化后的模型进行embedding操作之类的。后续看看能不能再找个大显存的环境测试一下。