Langchian-ChatGLM装置布置
介绍
Langchain-ChatGLM
项目是一种利用 langchain 思维完成的根据本地知识库的问答应用,目标希望建立一套对中文场景与开源模型支持友爱、可离线运行的知识库问答解决方案.
本项目完成原理如下图所示,进程包含加载文件 -> 读取文本 -> 文本分割 -> 文本向量化 -> 问句向量化 -> 在文本向量中匹配出与问句向量最相似的top k
个 -> 匹配出的文本作为上下文和问题一起添加到prompt
中 -> 提交给LLM
生成答复。
从文档处理视点来看,完成流程如下:
布置要求
- ChatGLM-6B模型
量化等级 | 最低 GPU 显存(推理) | 最低 GPU 显存(高效参数微调) |
---|---|---|
FP16(无量化) | 13 GB | 14 GB |
INT8 | 8 GB | 9 GB |
INT4 | 6 GB | 7 GB |
-
Embedding
本项目中默认选用的 Embedding 模型 GanymedeNil/text2vec-large-chinese 约占用显存 3GB,也可修正为在 CPU 中运行。
布置过程
环境查看
# 首先,坚信你的机器装置了 Python 3.8 及以上版别
$ python --version
Python 3.8.13
# 假如低于这个版别,可运用conda装置环境
$ conda create -p /your_path/env_name python=3.8
# 激活环境
$ source activate /your_path/env_name
$ pip3 install --upgrade pip
# 封闭环境
$ source deactivate /your_path/env_name
# 删除环境
$ conda env remove -p /your_path/env_name
项目依靠
# 拉取仓库
$ git clone https://github.com/imClumsyPanda/langchain-ChatGLM.git
# 进入目录
$ cd langchain-ChatGLM
# 项目中 pdf 加载由从前的 detectron2 替换为运用 paddleocr,假如之前有装置过 detectron2 需求先完成卸载防止引发 tools 冲突
$ pip uninstall detectron2
# 查看paddleocr依靠,linux环境下paddleocr依靠libX11,libXext
$ yum install libX11
$ yum install libXext
# 装置依靠,这里要注意python版别,假如某些依靠下不下来,可以换个镜像源下载
$ pip install -r requirements.txt
# 验证paddleocr是否成功,首次运行会下载约18M模型到~/.paddleocr
# 这一步最新版别会报错,但如同不影响运用
$ python loader/image_loader.py
下载本地模型
作者在QA中提供了模型的百度云盘地址,便利国内下载
- ernie-3.0-base-zh.zip 链接: pan.baidu.com/s/1CIvKnD3q…
- ernie-3.0-nano-zh.zip 链接: pan.baidu.com/s/1Fh8fgzVd…
- text2vec-large-chinese.zip 链接: pan.baidu.com/s/1sMyPzBIX…
- chatglm-6b-int4-qe.zip 链接: pan.baidu.com/s/1DDKMOMHt…
- chatglm-6b-int4.zip 链接: pan.baidu.com/s/1pvZ6pMzo…
- chatglm-6b.zip 链接: pan.baidu.com/s/1B-MpsVVs…
这里下载到linux服务器引荐运用百度网盘linux客户端bypy
,需先将模型文件保存到百度网盘的/我的应用数据/bypy
目录下,具体的bypy登录流程见bypy文档
# 下载模型
$ mv bypy/* workspace/models/
装备本地模型途径
修正config/model_config.py
文件
embedding_model_dict = {
# 本地途径
"ernie-tiny": "/root/workspace/models/ernie-3.0-nano-zh",
# 本地途径
"ernie-base": "/root/workspace/models/ernie-3.0-base-zh",
"text2vec-base": "shibing624/text2vec-base-chinese",
# 本地途径
"text2vec": "/root/workspace/models/text2vec-large-chinese",
"m3e-small": "moka-ai/m3e-small",
"m3e-base": "moka-ai/m3e-base",
}
# supported LLM models
# llm_model_dict 处理了loader的一些预设行为,如加载方位,模型称号,模型处理器实例
# 在以下字典中修正属性值,以指定本地 LLM 模型存储方位
# 如将 "chatglm-6b" 的 "local_model_path" 由 None 修正为 "User/Downloads/chatglm-6b"
# 此处请写绝对途径
llm_model_dict = {
"chatglm-6b-int4-qe": {
"name": "chatglm-6b-int4-qe",
"pretrained_model_name": "THUDM/chatglm-6b-int4-qe",
"local_model_path": "/root/workspace/models/chatglm-6b-int4-qe",
"provides": "ChatGLM"
},
"chatglm-6b-int4": {
"name": "chatglm-6b-int4",
"pretrained_model_name": "THUDM/chatglm-6b-int4",
"local_model_path": "/root/workspace/models/chatglm-6b-int4",
"provides": "ChatGLM"
},
"chatglm-6b-int8": {
"name": "chatglm-6b-int8",
"pretrained_model_name": "THUDM/chatglm-6b-int8",
"local_model_path": None,
"provides": "ChatGLM"
},
"chatglm-6b": {
"name": "chatglm-6b",
"pretrained_model_name": "THUDM/chatglm-6b",
"local_model_path": "/root/workspace/models/chatglm-6b",
"provides": "ChatGLM"
},
"chatyuan": {
"name": "chatyuan",
"pretrained_model_name": "ClueAI/ChatYuan-large-v2",
"local_model_path": None,
"provides": None
},
"moss": {
"name": "moss",
"pretrained_model_name": "fnlp/moss-moon-003-sft",
"local_model_path": None,
"provides": "MOSSLLM"
},
"vicuna-13b-hf": {
"name": "vicuna-13b-hf",
"pretrained_model_name": "vicuna-13b-hf",
"local_model_path": "/media/checkpoint/vicuna-13b-hf",
"provides": "LLamaLLM"
},
# 经过 fastchat 调用的模型请参阅如下格局
"fastchat-chatglm-6b": {
"name": "chatglm-6b", # "name"修正为fastchat服务中的"model_name"
"pretrained_model_name": "chatglm-6b",
"local_model_path": None,
"provides": "FastChatOpenAILLM", # 运用fastchat api时,需确保"provides"为"FastChatOpenAILLM"
"api_base_url": "http://localhost:8000/v1" # "name"修正为fastchat服务中的"api_base_url"
},
# 经过 fastchat 调用的模型请参阅如下格局
"fastchat-vicuna-13b-hf": {
"name": "vicuna-13b-hf", # "name"修正为fastchat服务中的"model_name"
"pretrained_model_name": "vicuna-13b-hf",
"local_model_path": None,
"provides": "FastChatOpenAILLM", # 运用fastchat api时,需确保"provides"为"FastChatOpenAILLM"
"api_base_url": "http://localhost:8000/v1" # "name"修正为fastchat服务中的"api_base_url"
},
}
启动项目
gradio webui启动
$ python webui.py
运用本地的向量模型会导致正告,这个不需求处理
WARNING 2023-06-12 23:29:00,381-1d: No sentence-transformers model found with name /root/workspace/models/text2vec-large-chinese. Creating a new one with MEAN pooling.
启动后访问7860端口即可,假如需求调整端口,需求调整webui.py
文件中的端口
(demo
.queue(concurrency_count=3)
.launch(server_name='0.0.0.0',
# 替换端口
server_port=7862,
show_api=False,
share=False,
inbrowser=False))
api启动
$ python api.py
前端项目启动
需装置nodejs版别>=18.15.0
$ cd views/
$ pnpm install
$ npm run dev