目的:最近在探索大模型本地化部署+知识库实现行业解决方案,安装过程记录,分享给需要的同学,安装前确定好各组件的版本非常重要,避免重复安装走老路。
经过查阅大量资料,目前可以分为以下两种方案
方案一:使用开源LLM本地部署和微调
优点:数据最安全,因为不管是模型还是训练数据都在本地
缺点:要调教出一个足够出色的模型,需要耗费较多的人力物力(当然相比于预训练已经好太多了)
具体实施:(LLAMA、ChatGLM2)+(Lora、P-Tuningv2、promote-tunning等)
方案二:基于LLM+向量数据库
优点:成本相对低,更简单,无需训练甚至无需微调
缺点:如果使用选择ChatGPT等云端大模型,则需牺牲掉一些隐私性
具体实施:LangChain+pinecone+(ChatGPT、ChatGLM2) 现成开源方案:Quivr、PrivateGPT
本文使用第二种方案,具体实施:
- LangChain+向量数据库+ChatGLM2
- LLM+向量数据库方案核心
- 三步走实现私有知识库
*将私有知识库内容经过 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 https://download.pytorch.org/whl/cu118
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 https://github.com/imClumsyPanda/langchain-ChatGLM.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 https://huggingface.co/THUDM/chatglm2-6b $PWD/chatglm2-6b
# 下载 Embedding 模型(比较大的数据2.6G)
git clone https://huggingface.co/GanymedeNil/text2vec-large-chinese $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]# python
Python 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: http://www.nvidia.com/Download/index.aspx Alternatively, go to: https://pytorch.org 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 https://developer.download.nvidia.com/compute/cuda/11.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, 将其 rmmod
sudo 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安装
https://zhuanlan.zhihu.com/p/643824521
linux nvidia 11.8 安装记录
https://blog.csdn.net/private_void_main/article/details/128014317
基于embedding+LangChain+ChatGLM2-6B 构建行业知识库
https://zhuanlan.zhihu.com/p/646405424
LangChain知识库+Lora微调chatglm2-6b模型+提示词Prompt的使用原则
https://blog.csdn.net/wxfighting/article/details/132087078
轻松搭建本地知识库的ChatGLM2-6B
https://blog.csdn.net/weixin_43734080/article/details/132756808
cuda、cuDNN、pytorch、torchvision、torchaudio 详细安装教程(报错解决、安装慢慢慢)
https://blog.csdn.net/qq_51392112/article/details/133588860
彻底清理CUDA安装(多版本一起清除)
https://blog.csdn.net/qq_53937391/article/details/131501801