0
点赞
收藏
分享

微信扫一扫

github可访问但无法clone问题

Langchain-Chatchat的部署

Langchain-Chatchat

概述

GitHub:https://github.com/chatchat-space/Langchain-Chatchat

实现原理

在这里插入图片描述

开发环境准备

软件要求

使用Ubuntu系统,其他系统可能出现系统兼容性问题

Linux Ubuntu 22.04.5 kernel version 6.7

最低要求

Python 版本: >= 3.8(很不稳定), < 3.11
CUDA 版本: >= 12.1

推荐要求

Python 版本 == 3.10.12
CUDA 版本: == 12.3

硬件要求

ChatGLM2-6B & LLaMA-7B

最低显存要求: 7GB

推荐显卡: RTX 3060, RTX 2060

LLaMA-13B

最低显存要求: 11GB

推荐显卡: RTX 2060 12GB, RTX 3060 12GB, RTX 3080, RTX A2000

Qwen-14B-Chat

最低显存要求: 13GB

推荐显卡: RTX 3090

LLaMA-30B

最低显存要求: 22GB

推荐显卡: RTX A5000, RTX 3090, RTX 4090, RTX 6000, Tesla V100, RTX Tesla P40

LLaMA-65B

最低显存要求: 40GB

推荐显卡: A100, A40, A6000

注意:

若使用 int8 推理,则显存大致为 int4 推理要求的 1.5 倍

若使用 fp16 推理,则显存大致为 int4 推理要求的 2.5 倍

数据仅为估算,实际情况以 nvidia-smi 占用为准。

同时,Embedding 模型将会占用 1-2G 的显存,历史记录最多会占用数 G 显存,因此,需要多冗余一些显存。

内存最低要求: 内存要求至少应该比模型运行的显存大。

部署

拉取仓库

git clone https://github.com/chatchat-space/Langchain-Chatchat.git

# 进入目录
cd Langchain-Chatchat

创建虚拟环境

创建一个虚拟环境,使项目与项目间进行软件版本隔离

conda create -n chat python=3.10

# 激活使用虚拟环境
conda activate chat 

安装全部依赖

在虚拟环境内安装项目的依赖

pip install -r requirements.txt 
pip install -r requirements_api.txt
pip install -r requirements_webui.txt  

初始化配置文件

python copy_config_example.py

在这里插入图片描述

basic_config.py:基础配置项:配置记录日志的格式和储存路径,通常不需要修改。

kb_config.py:数据库配置:配置分词器、知识库、向量数据库等信息

model_config.py:模型配置项:包含本地LLM模型、本地Embeddings模型、在线LLM模型API的相关配置

prompt_config.py:提示词配置项:提示词配置分为三个板块,分别对应三种聊天类型:基础的对话提示词、与知识库对话的提示词、与Agent对话的提示词。

server_config.py:服务和端口配置项:不需要进行大量的修改,仅需确保对应的端口打开,并不互相冲突即可。server_config.py中的配置优先于startup.py中的默认值,注意避免配置文件覆盖

初始化知识库

python init_database.py --recreate-vs
$ python init_database.py --create-tables

第一次使用时,会自动下载BAAI/bge-large-zh模型,用于知识库的初始化构建

recreating all vector stores
2023-12-06 11:31:27,108 - faiss_cache.py[line:80] - INFO: loading vector store in 'samples/vector_store/bge-large-zh' from disk.
2023-12-06 11:31:28,013 - SentenceTransformer.py[line:66] - INFO: Load pretrained SentenceTransformer: BAAI/bge-large-zh
.gitattributes: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 1.52k/1.52k [00:00<?, ?B/s]
1_Pooling/config.json: 100%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 191/191 [00:00<?, ?B/s]
README.md: 100%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 27.9k/27.9k [00:00<00:00, 1.78MB/s]
config.json: 100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 941/941 [00:00<?, ?B/s]
config_sentence_transformers.json: 100%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 124/124 [00:00<?, ?B/s]
model.safetensors: 100%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 1.30G/1.30G [03:50<00:00, 5.66MB/s]
pytorch_model.bin: 100%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 1.30G/1.30G [04:09<00:00, 5.22MB/s]
sentence_bert_config.json: 100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 52.0/52.0 [00:00<?, ?B/s]
special_tokens_map.json: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 125/125 [00:00<00:00, 223kB/s]
tokenizer.json: 100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 439k/439k [00:00<00:00, 463kB/s]
tokenizer_config.json: 100%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 366/366 [00:00<?, ?B/s]
vocab.txt: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 110k/110k [00:00<00:00, 331kB/s]
modules.json: 100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 349/349 [00:00<?, ?B/s]
Batches: 100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 1/1 [00:02<00:00,  2.13s/it]
2023-12-06 11:42:08,536 - loader.py[line:54] - INFO: Loading faiss with AVX2 support.
2023-12-06 11:42:08,537 - loader.py[line:58] - INFO: Could not load library with AVX2 support due to:
ModuleNotFoundError("No module named 'faiss.swigfaiss_avx2'")
2023-12-06 11:42:08,537 - loader.py[line:64] - INFO: Loading faiss.
2023-12-06 11:42:08,946 - loader.py[line:66] - INFO: Successfully loaded faiss.
2023-12-06 11:42:09,301 - faiss_cache.py[line:80] - INFO: loading vector store in 'samples/vector_store/bge-large-zh' from disk.
Batches: 100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 1/1 [00:00<00:00,  6.13it/s]

正在将 samples/F:\GitHub\Langchain-Chatchat\knowledge_base\samples\content\llm\img\大模型指令对齐训练原理-幕布图片-350029-666381.jpg 添加到向量库,共包含2条文档
Batches: 100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 1/1 [00:02<00:00,  2.01s/it]
正在将 samples/F:\GitHub\Langchain-Chatchat\knowledge_base\samples\content\llm\大模型应用技术原理.md 添加到向量库,共包含7条文档
Batches: 100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 1/1 [00:07<00:00,  7.84s/it]
正在将 samples/F:\GitHub\Langchain-Chatchat\knowledge_base\samples\content\llm\分布式训练技术原理.md 添加到向量库,共包含11条文档
Batches: 100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 1/1 [00:18<00:00, 18.49s/it]
正在将 samples/F:\GitHub\Langchain-Chatchat\knowledge_base\samples\content\llm\img\大模型推理优化策略-幕布图片-699343-219844.jpg 添加到向量库,共包含1条文档
Batches: 100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 1/1 [00:00<00:00,  5.38it/s]
正在将 samples/F:\GitHub\Langchain-Chatchat\knowledge_base\samples\content\llm\大模型技术栈-实战与应用.md 添加到向量库,共包含2条文档

正在将 samples/F:\GitHub\Langchain-Chatchat\knowledge_base\samples\content\test_files\langchain-ChatGLM_open.csv 添加到向量库,共包含323条文档
Batches:  45%|███████████████████████████████████████████████████████████████████████████████████▋                                                                                                    | 5/11 [02:00<02:08, 21.40s/it]

正在将 samples/F:\GitHub\Langchain-Chatchat\knowledge_base\samples\content\test_files\langchain-ChatGLM_closed.xlsx 添加到向量库,共包含86条文档
Batches: 100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [01:35<00:00, 31.86s/it]
正在将 samples/F:\GitHub\Langchain-Chatchat\knowledge_base\samples\content\test_files\langchain-ChatGLM_open.xlsx 添加到向量库,共包含126条文档
Batches: 100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 4/4 [02:14<00:00, 33.64s/it]
正在将 samples/F:\GitHub\Langchain-Chatchat\knowledge_base\samples\content\test_files\langchain.pdf 添加到向量库,共包含52条文档
Batches: 100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 2/2 [00:56<00:00, 28.44s/it]
2023-12-06 11:55:42,220 - faiss_cache.py[line:24] - INFO: 已将向量库 ('samples', 'bge-large-zh') 保存到磁盘
总计用时: 0:24:15.137100

注意:

模型下载

模型下载取决于自己的网络情况,这里需要提前下载THUDM/chatglm2-6bmoka-ai/m3e-base到本地,然后在model_config.py中配置

启动项目

python startup.py -a   

启动时,如果没用在model_config.py中配置配置模型信息,则会自动模型下载THUDM/chatglm2-6b到本地使用

==============================Langchain-Chatchat Configuration==============================
操作系统:Windows-10-10.0.19045-SP0.
python版本:3.10.13 | packaged by Anaconda, Inc. | (main,Sep 11 2023, 12:20:02) [GCC 11.4.0]
项目版本:v0.2.8
langchain版本:0.0.344. fastchat版本:0.2.33


当前使用的分词器:ChineseRecursiveTextSplitter
当前启动的LLM模型:['chatglm3-6b', 'zhipu-api', 'openai-api'] @ cuda
{'device': 'cuda',
 'host': '0.0.0.0',
 'infer_turbo': False,
 'model_path': 'THUDM/chatglm3-6b',
 'port': 20002}
{'api_key': '',
 'device': 'auto',
 'host': '0.0.0.0',
 'infer_turbo': False,
 'online_api': True,
 'port': 21001,
 'provider': 'ChatGLMWorker',
 'version': 'chatglm_turbo',
 'worker_class': <class 'server.model_workers.zhipu.ChatGLMWorker'>}
{'api_base_url': 'https://api.openai.com/v1',
 'api_key': '',
 'device': 'auto',
 'host': '0.0.0.0',
 'infer_turbo': False,
 'model_name': 'gpt-3.5-turbo',
 'online_api': True,
 'openai_proxy': '',
 'port': 20002}
当前Embbedings模型: bge-large-zh @ cuda
==============================Langchain-Chatchat Configuration==============================


2023-12-06 12:20:03,211 - startup.py[line:650] - INFO: 正在启动服务:
2023-12-06 12:20:03,211 - startup.py[line:651] - INFO: 如需查看 llm_api 日志,请前往 F:\GitHub\Langchain-Chatchat\logs
2023-12-06 12:20:30 | ERROR | stderr | INFO:     Started server process [5259]
2023-12-06 12:202:30 | ERROR | stderr | INFO:     Waiting for application startup.
2023-12-06 12:20:30 | ERROR | stderr | INFO:     Application startup complete.
2023-12-06 12:20:30 | ERROR | stderr | INFO:     Uvicorn running on http://0.0.0.0:20000 (Press CTRL+C to quit)
2023-12-06 12:20:30 | INFO | model_worker | Register to controller
2023-12-06 12:20:32 | INFO | model_worker | Loading the model ['chatglm3-6b'] on worker 407a17ca ...
config.json:   0% 0.00/1.32k [00:00<?, ?B/s]
config.json: 100% 1.32k/1.32k [00:00<00:00, 6.39MB/s]
configuration_chatglm.py:   0% 0.00/2.33k [00:00<?, ?B/s]
configuration_chatglm.py: 100% 2.33k/2.33k [00:00<00:00, 8.98MB/s]
modeling_chatglm.py:   0% 0.00/55.6k [00:00<?, ?B/s]
modeling_chatglm.py: 100% 55.6k/55.6k [00:00<00:00, 40.6MB/s]
quantization.py:   0% 0.00/14.7k [00:00<?, ?B/s]
quantization.py: 100% 14.7k/14.7k [00:00<00:00, 27.7MB/s]
pytorch_model.bin.index.json:   0% 0.00/20.4k [00:00<?, ?B/s]
pytorch_model.bin.index.json: 100% 20.4k/20.4k [00:00<00:00, 74.7MB/s]
Downloading shards:   0% 0/7 [00:00<?, ?it/s]
pytorch_model-00001-of-00007.bin:   0% 0.00/1.83G [00:00<?, ?B/s]
pytorch_model-00001-of-00007.bin:   1% 21.0M/1.83G [00:00<00:08, 207MB/s]
pytorch_model-00001-of-00007.bin:   3% 62.9M/1.83G [00:00<00:05, 300MB/s]
pytorch_model-00001-of-00007.bin:   6% 115M/1.83G [00:00<00:04, 382MB/s]
pytorch_model-00001-of-00007.bin:   9% 157M/1.83G [00:00<00:04, 385MB/s]
pytorch_model-00001-of-00007.bin:  11% 199M/1.83G [00:00<00:04, 350MB/s]
pytorch_model-00001-of-00007.bin:  13% 241M/1.83G [00:00<00:04, 364MB/s]



Loading checkpoint shards:   0%|                                                                                                                                                                               | 0/7 [00:00<?, ?it/s]
Loading checkpoint shards:  14%|███████████████████████▊                                                                                                                                               | 1/7 [00:20<02:02, 20.42s/it]
Loading checkpoint shards:  29%|███████████████████████████████████████████████▋                                                                                                                       | 2/7 [00:44<01:51, 22.35s/it]
Loading checkpoint shards:  43%|███████████████████████████████████████████████████████████████████████▌                                                                                               | 3/7 [01:08<01:33, 23.26s/it]
Loading checkpoint shards:  57%|███████████████████████████████████████████████████████████████████████████████████████████████▍                                                                       | 4/7 [01:41<01:21, 27.07s/it]
Loading checkpoint shards:  71%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▎                                               | 5/7 [02:10<00:55, 27.80s/it]
Loading checkpoint shards:  86%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▏                       | 6/7 [02:34<00:26, 26.42s/it]
Loading checkpoint shards: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 7/7 [02:46<00:00, 21.66s/it]
Loading checkpoint shards: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 7/7 [02:46<00:00, 23.73s/it]

启动API服务

创建新终端,进入虚拟环境,启动API服务:

python server/api.py

访问:http://0.0.0.0:7861/docs
在这里插入图片描述

启动Web UI服务

最后启动Web UI服务,创建新终端,进入虚拟环境,

streamlit run webui.py

访问:http://localhost:8501/
在这里插入图片描述

使用

对话功能

在这里插入图片描述

知识库管理

可以新建知识库,上传相关资料信息
在这里插入图片描述
上传后会建立向量数据库
在这里插入图片描述
进行提问,回答基于知识库进行回答
在这里插入图片描述

文件对话

上传一个报销制度文件,然后提问
在这里插入图片描述

搜索引擎问答

在这里插入图片描述

异常集合

异常1

场景:

python init_database.py --recreate-vs

问题:

 cannot import name 'Doc' from 'typing_extensions'

解决:

pip install typing_extensions==4.8.0

异常2

场景:

python startup.py -a

问题:

OMP: Error #15: Initializing libiomp5md.dll, but found libiomp5md.dll already initialized.
OMP: Hint This means that multiple copies of the OpenMP runtime have been linked into the program. That is dangerous, since it can degrade performance or cause incorrect results. The best thing to do is to ensure that only a singl
e OpenMP runtime is linked into the process, e.g. by avoiding static linking of the OpenMP runtime in any library. As an unsafe, unsupported, undocumented workaround you can set the environment variable KMP_DUPLICATE_LIB_OK=TRUE t
o allow the program to continue to execute, but that may cause crashes or silently produce incorrect results. For more information, please see http://www.intel.com/software/products/support/.

解决1:

在这里插入图片描述
解决2:

import os
os.environ['KMP_DUPLICATE_LIB_OK']='True'

异常3

场景:

python startup.py -a

问题:

| OSError: We couldn't connect to 'https://huggingface.co' to load this file, couldn't find it in the cached files and it looks like THUDM/chatglm3-6b is not the path to a directory containing 
a file named config.json.

解决:

下载LLM 模型THUDM/ChatGLM3-6B与Embedding模型BAAI/bge-large-zh

1.访问https://huggingface.co/BAAI/bge-large-zh下载
在这里插入图片描述
2.访问https://huggingface.co/THUDM/chatglm3-6b下载
在这里插入图片描述

# 统一存放模型位置
MODEL_ROOT_PATH = "../../../models"

# 选用的 Embedding 名称
EMBEDDING_MODEL = "bge-large-zh"

# 要运行的LLM名称,可以包括本地模型和在线模型
LLM_MODELS = ["chatglm3-6b", "zhipu-api", "openai-api"]

MODEL_PATH = {
    "embed_model": {
        "ernie-tiny": "nghuyong/ernie-3.0-nano-zh",
        "ernie-base": "nghuyong/ernie-3.0-base-zh",
        "text2vec-base": "shibing624/text2vec-base-chinese",
        "text2vec": "GanymedeNil/text2vec-large-chinese",
        "text2vec-paraphrase": "shibing624/text2vec-base-chinese-paraphrase",
        "text2vec-sentence": "shibing624/text2vec-base-chinese-sentence",
        "text2vec-multilingual": "shibing624/text2vec-base-multilingual",
        "text2vec-bge-large-chinese": "shibing624/text2vec-bge-large-chinese",
        "m3e-small": "moka-ai/m3e-small",
        "m3e-base": "moka-ai/m3e-base",
        "m3e-large": "moka-ai/m3e-large",
        "bge-small-zh": "BAAI/bge-small-zh",
        "bge-base-zh": "BAAI/bge-base-zh",
         # "bge-large-zh": "BAAI/bge-large-zh",
         # 如果模型目录名称和 MODEL_PATH 中的 key 或 value 相同,程序会自动检测加载,无需修改 MODEL_PATH 中的路径。
        "bge-large-zh": "bge-large-zh",
        "bge-large-zh-noinstruct": "BAAI/bge-large-zh-noinstruct",
        "bge-base-zh-v1.5": "BAAI/bge-base-zh-v1.5",
        "bge-large-zh-v1.5": "BAAI/bge-large-zh-v1.5",
        "piccolo-base-zh": "sensenova/piccolo-base-zh",
        "piccolo-large-zh": "sensenova/piccolo-large-zh",
        "nlp_gte_sentence-embedding_chinese-large": "damo/nlp_gte_sentence-embedding_chinese-large",
        "text-embedding-ada-002": "your OPENAI_API_KEY",
    },

    "llm_model": {
        # 以下部分模型并未完全测试,仅根据fastchat和vllm模型的模型列表推定支持 
        # "chatglm2-6b": "THUDM/chatglm2-6b",
        # 如果模型目录名称和 MODEL_PATH 中的 key 或 value 相同,程序会自动检测加载,无需修改 MODEL_PATH 中的路径。
        "chatglm2-6b": "chatglm2-6b",
        "chatglm2-6b-32k": "THUDM/chatglm2-6b-32k",

        "chatglm3-6b": "THUDM/chatglm3-6b",
        "chatglm3-6b-32k": "THUDM/chatglm3-6b-32k",
        "chatglm3-6b-base": "THUDM/chatglm3-6b-base",
    },
举报

相关推荐

0 条评论