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
© 版权声明
文章版权归作者所有,未经允许请勿转载,侵权请联系 admin@trc20.tw 删除。
THE END