Langchian-ChatGLM装置布置

介绍

Langchain-ChatGLM项目是一种利用 langchain 思维完成的根据本地知识库的问答应用,目标希望建立一套对中文场景与开源模型支持友爱、可离线运行的知识库问答解决方案.

本项目完成原理如下图所示,进程包含加载文件 -> 读取文本 -> 文本分割 -> 文本向量化 -> 问句向量化 -> 在文本向量中匹配出与问句向量最相似的top k个 -> 匹配出的文本作为上下文和问题一起添加到prompt中 -> 提交给LLM生成答复。

Langchian-ChatGLM安装部署

从文档处理视点来看,完成流程如下:

Langchian-ChatGLM安装部署

布置要求

  • 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