背景
ChatGLM2-6B 是开源中英双语对话模型 ChatGLM-6B的第二代版本,提升了性能和推理能力,可结合Langchain-Chatchat和Embedding 可实现基于本地知识库的推理能力
准备环境
由于需要构建强大的知识库而非通过prompt组装问答方式,故需要更大的显存和内存,此处直接使用阿里云提供的A10显卡,可免费试用3个月
申请机器
创建工作空间
创建实例
启动机器后进入工作台
部署ChatGLM2-6B
下载仓库
参考官方仓库的部署指南
$ git clone https://github.com/THUDM/ChatGLM2-6B
$ cd ChatGLM2-6B
然后使用 pip 安装依赖:
$ pip install -r requirements.txt
安装git lfs
阿里云的git源直接安装lfs会存在问题,需要安装前置依赖
$ apt -y install build-essential nghttp2 libnghttp2-dev libssl-dev
$ git lfs install --skip-smudge
下载模型
$ git clone https://huggingface.co/THUDM/chatglm2-6b /mnt/workspace/model/chatglm2-6b
$ git lfs fetch
$ git lfs checkout
修改启动配置
此处只使用webUI模式验证,修改 web_demo.py
tokenizer= AutoTokenizer.from_pretrained("/mnt/workspace/model/chatglm2-6b", trust_remote_code=True)
model= AutoModel.from_pretrained("/mnt/workspace/model/chatglm2-6b", trust_remote_code=True).half().cuda()
# 要暴露在公网上
demo.queue().launch(share=True, inbrowser=True, server_name='0.0.0.0', server_port=7860)
安装启动依赖
$ pip install gradio
启动WebUI
$ python web_demo.py
启动成功
使用非量化模型,显存占用12G
问答验证
基于A10显卡推理,运算速度非常快,对问题的理解能力也比之前体验的chatglm-6b更加准确,但依然有不少文字错误
部署Langchain知识库应用
介绍
Langchain-Chatchat是一种利用 langchain 思想实现的基于本地知识库的问答应用,目标期望建立一套对中文场景与开源模型支持友好、可离线运行的知识库问答解决方案。
原理示意图
更多介绍参考官方仓库
下载仓库
Langchain依赖的python包有些许差别,需要先升级python依赖版本
$ pip3 install --upgrade pip
$ pip uninstall accelerate
$ pip install accelerate>=0.20.3
# 拉取仓库
$ git clone https://github.com/chatchat-space/Langchain-Chatchat.git
# 进入目录
$ cd Langchain-Chatchat
# 安装全部依赖
$ pip install -r requirements.txt
下载Embedding模型
此处使用官方推荐的m3e-base
模型为例
$ git clone https://huggingface.co/moka-ai/m3e-base
$ git lfs fetch
$ git lfs checkout
修改配置
修改Langchain模型引用配置
$ cd Langchain-Chatchat
复制样例文件,创建新配置configs/model_config.py
和 configs/server_config.py
本地的 LLM 模型本地存储路径写在 llm_model_dict
对应模型的 local_model_path
属性中
llm_model_dict={
"chatglm2-6b": {
"local_model_path": "/mnt/workspace/model/chatglm2-6b",
"api_base_url": "http://127.0.0.1:9090/v1", # "name"修改为 FastChat 服务中的"api_base_url"
"api_key": "EMPTY"
},
}
本地的 Embedding 模型本地存储路径写在 embedding_model_dict
对应模型位置
embedding_model_dict = {
"m3e-base": "/mnt/workspace/model/m3e-base",
}
重建知识库
首次使用模型需要重建知识库
$ python init_database.py --recreate-vs
启动知识库
一键启动所有 Fastchat 服务、API 服务、WebUI 服务
$ python startup.py -a
问答验证
LLM模型验证,连接本地ChatGLM2-6B成功
工程自带样例知识库,可以使用内置知识库验证,此处跳过,直接使用个人知识库验证
构建知识库
基金研报知识库
从天天基金拉取研报:中信证券:把握宏观政策接连发力下电商板块估值修复机会_天天基金网 (eastmoney.com)
将内容存储为txt上传到知识库
基于基金研报知识库问答,总结准确,速度非常快
推理过程日志,显存占用14G
个人面试知识库
将Java并发知识点转为txt类型知识库上传并创建新的知识库空间
不使用知识库情况下回答
使用知识库情况下回答
显然使用知识库回答更加准确