yyhhyy's blog

yyhhyy

Langchain-Chatchat搭建(GPU)

2024-03-04

Langchain-Chatchat搭建(GPU)

1.环境概况:

  • centos7.9

  • CUDA=11.7

  • Chatchat==0.2.10(截至24/3/4 最新master分支)

2.拉库

# 拉取仓库
git clone https://github.com/chatchat-space/Langchain-Chatchat.git

# 进入目录
cd Langchain-Chatchat

3.创建环境、安装依赖

# 本环境以conda为主
conda create -n chatchat python=3.11
# 激活环境
conda activate
# 优先安装CUDA为11.7版本的最新torch 本次查询 torch=2.0.1
# 参考地址:https://pytorch.org/get-started/previous-versions/
conda install pytorch==2.0.1 torchvision==0.15.2 torchaudio==2.0.2 pytorch-cuda=11.7 -c pytorch -c nvidia

到此后需要先检查一系列requirements.txt中的依赖信息

安装依赖过程中,因项目推荐的torch版本为2.1.2,且CUDA版本推荐是>=12.1。但是由于部署环境CUDA版本仅仅只有11.7,因此需要对依赖进行一定的注释。

# 形如指明torch版本信息需要进行优先注释
torch==2.1.2
torchvision==0.16.2
torchaudio==2.1.2
# 其次应该注释某些依赖包 形如 
xformers==0.0.23.post1
sentence_transformers==2.2.2
# 这类高版本的依赖包有些是强制绑定的需要torch=2.1.2版本或者以上的,因此也需要优先注释,后续通过搜索各个版本之间的兼容性,再做安装。

安装依赖:

# 安装全部依赖
pip install -r requirements.txt 
pip install -r requirements_api.txt
pip install -r requirements_webui.txt  

# 默认依赖包括基本运行环境(FAISS向量库)。如果要使用 milvus/pg_vector 等向量库,请将 requirements.txt 中相应依赖取消注释再安装。

因此在安装过程中,需要持续观察pip安装进度,如果遇到需要安装torch=2.1.2或者有nvidia的关键字出现12的需要也需要及时终止安装进程。

3.初始化知识库和配置文件

# 生成配置文件
python copy_config_example.py
# 初始化知识库 这边需要等待一会
python init_database.py --recreate-vs

初始化知识库的过程中应该先删除 knowledge_base/samples/content/llm/img 这个文件夹下的图片

以下原因:

1.还没安装paddlepaddle ocr来识别图片的依赖包

2.当前paddlepaddle与torch存在一定冲突

因此暂时先删除图片,后续如果有需要再做调整。

4.编辑配置文件

进入configs文件夹

cd configs
python startup.py -a

进入config文件夹

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

  2. 模型配置项 model_config.py
    先在项目目录创建models文件夹,后续所有的模型文件都放在该文件夹内

    ## 设置模型根目录 就是刚刚我们在项目目录创建的models文件夹
    MODEL_ROOT_PATH = 'models'
    
    # 选用的 Embedding 名称
    EMBEDDING_MODEL = "bge-large-zh-v1.5"  # 根据需求选择EMBEDDING模型
    # LLM模型  支持本地模型及在线api
    # list的第一个为调用接口默认选用的模型
    LLM_MODELS = ["Qwen1.5-72B-Chat", "zhipu-api", "openai-api"]
    
    # 模型路径
    # Langchain-Chatchat 为根目录 可以使用相对路径或绝对路径来确定模型的位置 (如果本地有模型的话)
    # 例子
    MODEL_PATH = {
        "Qwen1.5-72B-Chat": "Qwen/Qwen1.5-72B-Chat",
    }
  3. 提示词配置项 prompt_config.py
    提示词配置分为三个板块,分别对应三种聊天类型。

    • llm_chat: 基础的对话提示词, 通常来说,直接是用户输入的内容,没有系统提示词。

    • knowledge_base_chat: 与知识库对话的提示词,在模板中,我们为开发者设计了一个系统提示词,开发者可以自行更改。

    • agent_chat: 与Agent对话的提示词,同样,我们为开发者设计了一个系统提示词,开发者可以自行更改。

    prompt模板使用Jinja2语法,简单点就是用双大括号代替f-string的单大括号 请注意,本配置文件支持热加载,修改prompt模板后无需重启服务。

  4. 数据库配置 kb_config.py

  5. 服务和端口配置项 server_config.py

5.启动

  1. 单卡启动

    python startup.py -a
  2. 多卡启动
    编辑 server_config.py

    # 编辑FSCHAT_MODEL_WORKERS
    # 其中default key下的
    "gpus": "4,5,6",  # 更改成你服务器中你想使用的卡
    "num_gpus": 3,  # 使用的GPU的数量
    "max_gpu_memory": "60GiB",  # 每个GPU占用的最大显存  这个根据实际情况而定

    一般服务器使用该命令就能多卡启动

    python startup.py -a

    如果以上命令多卡使用不了,请使用以下指令,使用环境变量而来

    CUDA_VISIBLE_DEVICES=4,5,6 python startup.py -a