基于LangChain+ChatGLM2

编程入门 行业动态 更新时间:2024-10-21 07:54:05

基于<a href=https://www.elefans.com/category/jswz/34/1763561.html style=LangChain+ChatGLM2"/>

基于LangChain+ChatGLM2

目的:最近在探索大模型本地化部署+知识库实现行业解决方案,安装过程记录,分享给需要的同学,安装前确定好各组件的版本非常重要,避免重复安装走老路。

经过查阅大量资料,目前可以分为以下两种方案

方案一:使用开源LLM本地部署和微调

优点:数据最安全,因为不管是模型还是训练数据都在本地

缺点:要调教出一个足够出色的模型,需要耗费较多的人力物力(当然相比于预训练已经好太多了)

具体实施:(LLAMA、ChatGLM2)+(Lora、P-Tuningv2、promote-tunning等)

方案二:基于LLM+向量数据库

优点:成本相对低,更简单,无需训练甚至无需微调

缺点:如果使用选择ChatGPT等云端大模型,则需牺牲掉一些隐私性

具体实施:LangChain+pinecone+(ChatGPT、ChatGLM2) 现成开源方案:Quivr、PrivateGPT

本文使用第二种方案,具体实施:

  1. LangChain+向量数据库+ChatGLM2
  2. LLM+向量数据库方案核心
  3. 三步走实现私有知识库

          *将私有知识库内容经过 embedding 存入向量知识库

          *用户每一次提问,把问题也 embedding,并利用向量相关性算法(例如余弦算法)找到向量知识库最匹配的几个片段

          *将这些片段,与用户问题一起作为 promt 提交给 LLM 回答

知识点:

    1. Embedding,在某种程度上,就是用来降维的,降维的原理就是矩阵乘法

    一个简单的例子,可以用地图来理解Embedding,现实的地理地形的信息其实远远超过三维,但是地图通过颜色和等高线等来最大化表现现实的地理信息(二维),所以地图就是现实地理的Embedding

    2. 而向量知识库是保存Embedding向量的地方

    3. LangChain 可以轻松管理Embedding向量知识库与LLM的交互,将多个组件链接在一起,是个很火的大语言模型开发框架

核心流程图解

一、部署环境

开通有GPU的服务器 CPU2核、内存24G或32G、显存24G或32G,低一些的配置页可以试试。
安装特别注意事项:版本问题
ChatGLM2-6B版本要装PYTORCH2.0,而且要2.0.1 ,就是这么精确,大家先试试用下面的命令安装一下行不行。CUDA不能用12.0 ,也不能用10.0,只能用11.x 版本。Python必须使用3.9的版本。

CentOS7.9

PYTORCH2.0.1

CUDA11.8

Python3.9

pip3 install torch=2.0.1 torchvision torchaudio --index-url 

CUDA:11.8版本。我上次装 Tensforflow用了10.0CUDA,只能卸载以后重新安装CUDA 11,但是幸运的是CUDA安装程序非常智能,我的电脑上CUDA 12、CUDA11.8和CUDA 10能共存得很好,PATH里放的是最新的路径,没有压力。
CUDA换了,CUDNN也换成和CUDA11.8匹配的版本就行。装完检查一下(进命令行)

nvcc --version
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2022 NVIDIA Corporation
Built on Wed_Sep_21_10:41:10_Pacific_Daylight_Time_2022
Cuda compilation tools, release 11.8, V11.8.89
Build cuda_11.8.r11.8/compiler.31833905_0

继续走:

在anaconda里建立一个环境,比如叫chatglm2-6b, 然后用activate 激活即可。

虚拟环境
 

conda create -n chatglm2-6b python=3.9
conda activate chatglm2-6b

如果你前面没有装 CUDA11,那就没办法装 pytorch2.0,系统就会提示。请乖乖回去装 CUDA11和CUDNN。

二、安装部署

下载源码

git clone .git

安装依赖

cd langchain-ChatGLM
pip install -r requirements.txt

 (可能会影响现有PYTORCH和CUDA的版本,需要注意)

下载模型
# 安装 git lfs

yum install git-lfs

# 安装完成后,您可以运行以下命令来验证Git LFS是否已成功安装:

git lfs version

# 下载 LLM 模型(比较大的数据13G)

git clone  $PWD/chatglm2-6b


# 下载 Embedding 模型(比较大的数据2.6G)

git clone  $PWD/text2vec


修改配置参数
在 configs/model_config.py 文件中,对embedding_model_dict和llm_model_dict参数进行修改。
 

cd configs
cp model_config.py.example model_config.py
vim model_config.py
"text2vec": "/root/llm/langchain-ChatGLM/text2vec",
"chatglm2-6b": "/root/llm/chatglm2-6b",

知识库初始化与迁移

当前项目的知识库信息存储在数据库中,在正式运行项目之前请先初始化数据库(我们强烈建议您在执行操作前备份您的知识文件)。

    如果您是从 0.1.x 版本升级过来的用户,针对已建立的知识库,请确认知识库的向量库类型、Embedding 模型与 configs/model_config.py 中默认设置一致,如无变化只需以下命令将现有知识库信息添加到数据库即可:

    python init_database.py

    如果您是第一次运行本项目,知识库尚未建立,或者配置文件中的知识库类型、嵌入模型发生变化,或者之前的向量库没有开启 normalize_L2,需要以下命令初始化或重建知识库:

    python init_database.py --recreate-vs

三、一键启动API 服务或 Web UI

1、一键启用默认模型

一键启动脚本 startup.py,一键启动所有 Fastchat 服务、API 服务、WebUI 服务,示例代码:

python startup.py -a

自动跳转到web页面,若不能跳转记得在代码末尾按一下Enter键,即可一键启动web页面。

服务器设置允许访问8501端口

http://43.156.*.*:8501/


自动跳转到web页面,若不能跳转记得在代码末尾按一下Enter键,即可一键启动web页面。

(对话输出文字比较慢,因为现在使用的是CPU,后边有设置成GPU的方法,就快很多。)

 

并可使用 Ctrl + C 直接关闭所有运行服务。如果一次结束不了,可以多按几次。

可选参数包括 -a (或--all-webui), --all-api, --llm-api, -c (或--controller), --openai-api, -m (或--model-worker), --api, --webui,其中:

    --all-webui 为一键启动 WebUI 所有依赖服务;--all-api 为一键启动 API 所有依赖服务;--llm-api 为一键启动 Fastchat 所有依赖的 LLM 服务;--openai-api 为仅启动 FastChat 的 controller 和 openai-api-server 服务;其他为单独服务启动选项。

2. 启用非默认模型

若想指定非默认模型,需要用 --model-name 选项,示例:

python startup.py --all-webui --model-name Qwen-7B-Chat

更多信息可通过 python startup.py -h查看。

添加个人知识库

如果当前回答结果并不理想,如下图所示,可添加知识库,对知识进行优化

本地添加知识库

将文档添加到knowledge_base——samples——content目录下:

 通过web页面添加知识库

重新微调模型

知识库添加完成之后,按照3.5-3.6重新运行程序,即可实现本地知识库更新。如下图所示,添加完《天龙八部》电子书之后,回答结果变得精准。


提升回答速度,把CPU改为GPU:

model_config.py文件中,修改

    # Embedding 模型运行设备。设为"auto"会自动检测,也可手动设定为"cuda","mps","cpu"其中之一。
    EMBEDDING_DEVICE = "auto"

为:

    # Embedding 模型运行设备。设为"auto"会自动检测,也可手动设定为"cuda","mps","cpu"其中之一。
    EMBEDDING_DEVICE = "cuda"

修改

    # LLM 运行设备。设为"auto"会自动检测,也可手动设定为"cuda","mps","cpu"其中之一。
    LLM_DEVICE = "auto"

为:

    # LLM 运行设备。设为"auto"会自动检测,也可手动设定为"cuda","mps","cpu"其中之一。
    LLM_DEVICE = "cuda"

如果对话模型选择"知识库对话"方式:


四、安装过程中问题解决:

1、组件版本的问题,Torch版本不支持CUDA,需要组件的匹配
 

(base) [root@VM-0-9-centos langchain-ChatGLM]#  pythonPython 3.11.5 (main, Sep 11 2023, 13:54:46) [GCC 11.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import torch>>> print(torch.__version__)
2.1.0+cu121>>> torch.cuda.is_available()
/root/miniconda3/lib/python3.11/site-packages/torch/cuda/__init__.py:138: UserWarning: CUDA initialization: The NVIDIA driver on your system is too old (found version 11000). Please update your GPU driver by downloading and installing a new version from the URL: .aspx Alternatively, go to:  to install a PyTorch version that has been compiled with your version of the CUDA driver. (Triggered internally at ../c10/cuda/CUDAFunctions.cpp:108.)return torch._C._cuda_getDeviceCount() > 0
False

2、重新安装pytorch匹配版本

1)命令行输入

conda uninstall pytorch

2)命令行接着输入

conda uninstall pytorch-cuda

(这一步许多教程中没有,导致还有十多个包没删除)
3)可以看到卸载完后

查看包的命令:conda list安装pytorch=2.0.1
conda update --force conda
conda install pytorch=2.0.1 torchvision torchaudio pytorch-cuda=11.8 -c pytorch -c nvidia
conda install cchardet

3、Linux Centos7安装cuda 11.8命令

wget .8.0/local_installers/cuda-repo-rhel7-11-8-local-11.8.0_520.61.05-1.x86_64.rpm
sudo rpm -i cuda-repo-rhel7-11-8-local-11.8.0_520.61.05-1.x86_64.rpm
sudo yum clean all
sudo yum -y install nvidia-driver-latest-dkms
sudo yum -y install cuda-toolkit-11-8

4、配置CUDA环境

sudo vim ~/.bashrc在bashrc文件最下方,添加下入代码(ps:这边需要注意cuda的版本,版本不同,路径的命名需修改)export PATH=$PATH:/usr/local/cuda-11.8/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-11.8/lib64


    更新环境

source ~/.bashrc


    测试CUDA是否安装成功

nvcc -V

安装完成之后

执行nvidia-smi如果出现 Failed to initialize NVML: Driver/library version mismatch
(就是和原有驱动不兼容问题)
4.1 重启即可
4.2 不重启方案 (服务端不能轻易重启情况)
4.2.1 杀死使用GPU相关进程, 看到pid之后杀死

sudo yum install -y lsof
sudo lsof -n -w  /dev/nvidia*


4.2.2 删除已有mod

sudo rmmod nvidia报错 rmmod: ERROR: Module nvidia is in use by: nvidia_modeset nvidia_uvm也就是 nvidia_modeset 和 nvidia_uvm 在使用, 将其也 rmmod同时执行以下命令, 遇到什么模块说 in use, 将其 rmmodsudo rmmod nvidia_modeset
sudo rmmod nvidia_drm
sudo rmmod nvidia_uvm


再运行命令

sudo rmmod nvidia
sudo nvidia-smi


4.2.3此时发现nvidia-smi执行慢, 运行如下命令, 开启维护GPU的一个守护进程

nvidia-persistenced --persistence-mode卸载cuda
yum remove -y cuda

5、页面将文档加入到向量库中,处理中报错:

 解决方法:

pip install -U --force-reinstall charset-normalizer

参考:
AI本地大模型之ChatGLM2-6B安装

linux nvidia 11.8 安装记录

基于embedding+LangChain+ChatGLM2-6B 构建行业知识库

LangChain知识库+Lora微调chatglm2-6b模型+提示词Prompt的使用原则

轻松搭建本地知识库的ChatGLM2-6B

cuda、cuDNN、pytorch、torchvision、torchaudio 详细安装教程(报错解决、安装慢慢慢)

彻底清理CUDA安装(多版本一起清除)

更多推荐

基于LangChain+ChatGLM2

本文发布于:2023-11-15 01:06:22,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1590959.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:LangChain

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!