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

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

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

方案一:使用开源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 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/141105.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【npm 错误】:npm ERR! code ERESOLVE、npm ERR! ERESOLVE could not resolve问题

用过npm的小伙伴都会有这么一个情况出现,就是npm install /npm install xxxx 会出现改一连串的错误,如下: 解决办法: 只要在npm install后面加上--legacy-peer-deps就可以解决问题,安装插件也一样 npm install --legacy-peer-dep…

二、数据运营:B-O价值模型

B - O 价值模型,即 Business - Operation 模型,业务一运营模型。这是一个非常成熟的概念,其变体 BOSS 系统,即 BSS 业务支撑系统和 OSS 运营支撑系统已经在通信运营上使用20多年之久。 B - O 价值模型试图建立起一种通用的业务经…

学习网络编程No.9【应用层协议之HTTPS】

引言: 北京时间:2023/10/29/7:34,好久没有在周末早起了,该有的困意一点不少。伴随着学习内容的深入,知识点越来越多,并且对于爱好刨根问底的我来说,需要了解的知识就像一座大山,压得…

高级运维学习(十六)Prometheus 监控

Prometheus概述 Prometheus是一个开源系统监控和警报工具包,最初由 SoundCloud构建。也是一款监控软件,也是一个时序数据库。Prometheus 将其指标收集并存储为时间序列数据,即指标信息与记录时的时间戳以及称为标签的可选键值对一起存储。主…

python的re正则表达式

华子目录 什么是正则表达式元字符字符集字符集与元字符的综合使用 数量规则指定匹配次数边界处理分组匹配贪婪匹配非贪婪匹配re.S转移字符re.search()re.sub()实例常见的匹配模式 什么是正则表达式 正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串…

SPSS时间序列模型预测

前言: 本专栏参考教材为《SPSS22.0从入门到精通》,由于软件版本原因,部分内容有所改变,为适应软件版本的变化,特此创作此专栏便于大家学习。本专栏使用软件为:SPSS25.0 本专栏所有的数据文件请点击此链接下…

Python 如何实现 Strategy 策略设计模式?什么是 Strategy 策略设计模式?

策略模式(Strategy Design Pattern)是一种对象行为型设计模式,它定义了一系列算法,并使得这些算法可以相互替换,使得客户端代码可以独立于算法的变化而变化。策略模式属于对象行为模式。 主要角色: 策略接口…

抖音小程序定制开发: 解锁创意,打造独特互动体验

随着抖音平台的崛起,抖音小程序定制开发成为数字创新的关键领域之一。本文将探讨如何通过定制开发,实现独特功能和个性化设计,为用户带来全新的互动体验。 1. 环境搭建 在开始抖音小程序的定制开发之前,首先需要搭建开发环境。…

UBoot

uboot是什么? 嵌入式linux系统启动过程 嵌入式系统上电后先执行uboot、然后uboot负责初始化DDR,初始化Flash,然后将OS从Flash中读取到DDR中,然后启动OS(OS启动后uboot就无用了)uboot是什么,ubo…

【LeetCode刷题笔记】二叉树(一)

102. 二叉树的层序遍历 解题思路: 1. BFS广度优先遍历 ,使用队列,按层访问 解题思路: 2. 前序遍历 , 递归 ,在递归方法参数中,将 层索引

网银转账虚拟生成器在线制作,工商农业邮政建设招商,标签+对话框+画板+快照实现

标签对话框画板快照实现就实现了一个虚拟截图生成器,当然我加了水印了,这个图片你根本盗用不了,图片模版的话网上真的太多了,我这个也是网上找的,自己百度图库搜一下,然后标签记得一定用黑月的透明标签&…

Word转PDF简单示例,分别在windows和centos中完成转换

概述 本篇博客以简单的示例代码分别在Windows和Linux环境下完成Word转PDF的文档转换。 文章提供SpringBoot Vue3的示例代码。 文章为什么要分为Windows和Linux环境? 因为在如下提供的Windows后端示例代码中使用documents4j库做转换,此库需要调用命令行…

如何制作一个有吸引力的电商小程序

随着互联网的快速发展,电商行业也在不断壮大,越来越多的商家开始进入电商领域。在这个竞争激烈的市场中,一个有吸引力的电商小程序能够为商家带来巨大的优势。那么,如何制作一个有吸引力的电商小程序呢?下面我们将以乔…

2023nacos源码解读第2集——nacos-server的启动

nacos 是一个典型的server-client中间件,server这里安装最新的nacos-server 2.3.0-BETA版本 1.docker启动nacos-server 镜像详情参考nacos-docker项目的readme ,很方便,但是官方提供的nacos-server镜像往往可能滞后,且不便于后续…

【Git】第一篇:Git安装(centos)

git查看安装版本 以我自己的centos7.6为例,我们可以输入以下指令查看自己是否安装了git. git --version安装了的话就会显示自己安装的版本。 git 安装 安装很简单,一条命令即可 sudo yum install git -ygit 卸载 sudo yum remove git -y

本地生活直播的下个红利期来了!虚拟直播遇上本地生活擦出新火花

近年来,本地生活直播发展迅猛,作为一种全新的线下实体店营销方式,它比电商直播更贴近消费者的生活需求。比如消费者通过直播购买套餐或消费券,并在实体店核销。这种情况就可以归属于本地生活直播的服务范围。因此,对于…

基于SpringBoot+Vue的高校心理教育管理系统

基于SpringBootVue的高校心理教育管理系统的设计与实现~ 开发语言:Java数据库:MySQL技术:SpringBootMyBatisVue工具:IDEA/Ecilpse、Navicat、Maven 系统展示 测试列表 测试结果 用户界面 管理员界面 摘要 本文设计并实现了一款…

【Java 进阶篇】JQuery DOM操作:舞动网页的属性魔法

在前端的舞台上,属性操作是我们与HTML元素进行互动的关键步骤之一。而JQuery,这位前端开发的巫师,通过简洁而强大的语法,为我们提供了便捷的属性操作工具。在这篇博客中,我们将深入研究JQuery DOM操作中的属性操作&…

【时间复杂度和空间复杂度】

文章目录 前言时间复杂度大O的渐进表示法推导大O阶方法练习 空间复杂度练习 前言 衡量算法的效率分为两种情况: 1.时间复杂度 2.空间复杂度 时间复杂度 含义:算法中的基本操作的执行次数,为算法的时间复杂度 大O的渐进表示法 计算时间复…