ChatGLM3-6B和langchain知识库阿里云部署

2023-12-13 17:29:52

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

提示:这里可以添加本文要记录的大概内容:

看了几天chatglm和langchain的部署,经过不断报错,终于试出了可以运行的方案,不过本地知识库搭建还有问题,要再看看。本文主要介绍ChatGLM3-6B的部署和实现效果,和Chatglm2-6b+langchain结合的实现效果。


提示:以下是本篇文章正文内容,下面案例可供参考

一、ChatGLM3-6B部署

搭建环境

用阿里云免费资源进行创建实例,详情可参考
在这里插入图片描述点击试用,OSS那里要勾上,看别人都勾了,不过我没勾,不知道会不会有什么问题,然后授权就行了。

创建完后进入控制台,点击【交互式建模DSW】,进行创建实例,只能选择可抵扣计算时的V100或者A10,只有这两个规格的GPU是免费试用的(页面没有的话,可以过段时间再进去可能就有了,不过用哪个都行不过A10没那么耗资源)。
因为我们的是资源包,所以可以创建n个实例,我创建了一个V100的实例,配置如下:

官方镜像:pytorch2.0.1tensorflow2.13.0-cpu-py38-ubunt(最新的)

部署GLM3

1、点击创建的实例,进入terminal,输入:

apt-get update
apt-get install git-lfs 
git init
git lfs install 

2、首先git clone下载GLM3仓库,并切换到这个文件夹下

git clone https://github.com/THUDM/ChatGLM3
cd ChatGLM3

3、然后使用 pip 安装依赖:

最新版本中,建议在WEBIDE双击打开requirements.txt,然后把其中的“gradio~=3.39”修改成“gradio==3.39”

4、加好保存后,运行下面脚本:

pip install -r requirements.txt

5、git 下载本地模型

从modelscope上git下载模型,一个速度快,而且也不会因为网络问题下载不下来

git clone https://www.modelscope.cn/ZhipuAI/chatglm3-6b.git

6、修改变量路径并启用
有2个文件需要修改变量路径,一个是basic_demo下的“web_demo.py”,另一个是chatgm3-6b下的“config.json”,都是把默认的“THUDM/”修改为“/mnt/workspace/ChatGLM3/”(就是修改为chatglm3-6b所在的本地目录)
这里的修改,可以使用vim,也可以在WEBIDE中直接左边栏双击打开文件修改(推荐)

7、运行下列代码启动web_demo.py

python /mnt/workspace/ChatGLM3/basic_demo/web_demo.py

点击第二个url跳转后就可以进行对话了。如下图所示
在这里插入图片描述

二、Chatglm2-6b+langchain部署本地知识库

借鉴网页1

借鉴网页2
大家也可以用上面部署的Chatglm3-6b模型结合langchain进行搭建,效果差不多。

先创建实例:A10,镜像在官方镜像里面选pytorch-develop:1.12-cpu-py39-ubuntu20.04

之前用镜像url输入地区url和选了官方镜像里面的*modelscope:*相关的镜像都因为版本之类的原因报错了。
更新一下:

apt-get update
apt-get install git-lfs 
git init
git lfs install 

接着下载好相关的模型和源码:

目录结构参考:
在这里插入图片描述
/mnt/workspace目录下安装,测试了一下用embedding模型为:m3e-base,进行初始化知识库的时候不会报错

git clone https://github.com/THUDM/ChatGLM2-6B.git
git clone https://www.modelscope.cn/ZhipuAI/chatglm2-6b.git
#git clone https://github.com/chatchat-space/Langchain-Chatchat.git 这两个是一样的不过下载的文件夹名字不一样
git clone https://github.com/imClumsyPanda/langchain-ChatGLM.git
cd langchain-ChatGLM
git clone https://www.modelscope.cn/xrunda/m3e-base.git
git clone https://www.modelscope.cn/thomas/text2vec-base-chinese.git

该网站有许多模型可以下载,因为现在好像没办法在https://huggingface.co/下载模型了,国内推荐在modelscope里面下载。

分别在/ChatGLM2-6B 和/langchain-ChatGLM目录下执行pip install –r requirements.txt

安装依赖。

修改模型对应路径:

1.chatglm2-6b:

chatglm2-6b模型在目录的config.json文件中修改"_name_or_path"

在这里插入图片描述

2.ChatGLM2-6B:

web_demo.pyweb_demo2.py中都把tokenizermodel的路径修改为本地chatlm2-6b的路径

在这里插入图片描述

3.langchain-ChatGLM:

  • 修改configs目录下的文件后面的.example都去掉

在这里插入图片描述

  • 修改model_config.py
# 01.仅指定 chatglm2-6b
LLM_MODELS = ["chatglm2-6b", ]

# 02.指定为 空
ONLINE_LLM_MODEL = { }

# 03.仅指定 text2vec-base-chinese chatglm2-6b
MODEL_PATH = {
"embed_model": {
        # 我们使用的embedding模型为:m3e-base
        "m3e-base":"/mnt/workspace/langchain-ChatGLM/m3e-base",
        "text2vec-base-chinese": "/mnt/workspace/langchain-ChatGLM/text2vec-base-chinese",
    },

    "llm_model": {
        # 仅指定 这一个
        "chatglm2-6b": "/mnt/workspace/chatglm2-6b",
    },
}


# 04.仅指定 chatglm2
SUPPORT_AGENT_MODEL = [
    "chatglm2",
]
  • 修改server_config.py
FSCHAT_MODEL_WORKERS = {
    # 所有模型共用的默认配置,可在模型专项配置中进行覆盖。
    "default": {
        "host": DEFAULT_BIND_HOST,
        "port": 20002,
        "device": LLM_DEVICE,
        "infer_turbo": False,
    }
}

安装需要的包
在这里插入图片描述

在这里插入图片描述

pip install jq
pip install streamlit_modal

创建知识库

python init_database.py --recreate-vs

等待几分钟出来下图,表示知识库创建成功,后面才能成功上传文件,之前有几次都是没创建成功,报错了,然后在网上查了一下,可能是因为之前在modelscope上面下载的embedding模型不全之类的,所以换成m3e-base就出来下面的各种进度条了。
在这里插入图片描述

执行私有库模型

python startup.py -a

点击执行后的网址就出来了:

在这里插入图片描述
可以点击【知识库管理】,上传文件,然后切换到知识库对话,如下图所示:
在这里插入图片描述
在这里插入图片描述
知识库问答例子:

问题:什么是RAG

assistant avatar
RAG(Retrieval Augmented Generation)是一种结合了检索和生成技术的语言模型,旨在为自然语言处理任务提供更好的性能和可解释性。它通过从大规模文本数据集中检索有关的信息,并利用这些信息来生成更具体的回答,从而实现更好的检索性和更丰富的生成性。

RAG 通常由数据提取、数据清洗、索引创建、检索、自动排序和 LLM 归纳生成等组成。其中,数据提取包括从文本、语音、图像等多模态场景中提取数据,数据清洗包括去除标点符号、停用词等,索引创建用于快速检索,检索包括在原始数据上进行查询并返回相关的答案,自动排序是对查询结果进行排序,LLM 归纳生成则是由语言模型生成更加详细的回答。

RAG 的主要优点是在自然语言处理任务中提高了检索和生成任务的性能,同时提供了更好的可解释性。它适用于多种自然语言处理任务,如问答系统、对话系统等。

知识库匹配结果

出处 [1] RAG大模型.docx

RAG不仅仅面向文本,它还可以面向语音、视频和图像等多模态场景,只要可以embedding的内容就可以 RAG架构 我喜欢把RAG——Retrieval Augmented Generation理解为Retrieval And Generation,也就是检索与生成,在加上一个数据向量和索引的工作,我们对RAG就可以总概方式地理解为“索引、检索和生成”。 以下就是RAG的主要组成,依次是数据提取——embedding(向量化)——创建索引——检索——自动排序(Rerank)——LLM归纳生成。当然这里少了使用环节,我们暂时先忽略用户提问的环节。 RAG技术细节概览 在技术细节上,我们还可以分成更细的组成。 一、数据索引 数据提取 数据清洗:包括数据Loader,提取PDF、word、markdown以及数据库和API等;

出处 [2] RAG大模型.docx

它的主要作用是生成(最终的答案),但是它先做了对现有文档的检索,而不是任由LLM来发挥。下面我提供一个浅显的例子来说明一下RAG: 假设一个工程师需要从厚厚的《业务操作手册》中找到相关的业务知识来帮助他完成工作,那么他有三种方式可以使用: 最原始:他可以去翻阅这么厚厚的《业务操作手册》,或者用去查询这么《业务操作手册》的电子版,然后认真阅读掌握操作方法。当然,如果他碰到的业务知识比较复杂,他就需要自己去综合这本书上面的多个章节的内容,并融会贯通;

出处 [3] RAG大模型.docx

https://blog.csdn.net/weixin_54338498/article/details/133024348

检索增强生成 RAG 在问答和对话的场景下,通常可以通过检索和生成两种方式得到一个回复。检索式回复是在外部知识库中检索出满意的回复,较为可靠和可控,但回复缺乏多样性;而生成式回复则依赖于强大的语言模型中储存的内部知识,不可控,解释性差,但能生成更丰富的回复。把检索和生成结合起来,Facebook AI research 联合 UCL 和纽约大学于 2020 年提出:外部知识检索加持下的生成模型,Retrieval-Augmented Generation (RAG) 检索增强生成。 检索:这是指系统搜索庞大的数据库或存储库以查找相关信息的过程。 生成:检索后,系统生成类似人类的文本,整合获取的数据。

使用的时候内存消耗比较大

在这里插入图片描述

遗留问题:
在执行:
创建知识库

python init_database.py --recreate-vs

的时候有一个error,不过不影响后面的对话过程,目前还没去仔细研究这个问题:

ERROR: RuntimeError: 从文件 samples/Langchain-Chatchat/knowledge_base/samples/content/test_files/langchain-ChatGLM_closed.csv 加载文档时出错:Error loading Langchain-Chatchat/knowledge_base/samples/content/test_files/langchain-ChatGLM_closed.csv

可能是读不了csv文件?


三、Tips

1、该网站有许多模型可以下载,因为现在好像没办法在huggle.co下载模型了,国内推荐在modelscope里面下载。

2、当我们国内的网打不开一些模型网站时,可以先用魔法,download下来到本地,然后上传到gitee再git clone借鉴网站

3、pip install的时候建议后面加清华源,一个是速度快,还有一个是能避免一些错误(虽然不知道为什么)

pip install 安装包名字 -i https://pypi.tuna.tsinghua.edu.cn/simple/ --trusted-host pypi.tuna.tsinghua.edu.cn //清华大学

pip install 安装包名字 -i http://[pypi](https://so.csdn.net/so/search?q=pypi&spm=1001.2101.3001.7020).doubanio.com/simple/ --trusted-host pypi.doubanio.com //豆瓣镜像网站

四、总结

不管怎么样首先还是要自己去多实践,实践出真知,我也创建了好几个实例,用了不同环境,修改方法才慢慢摸索出来,而且试多了也大概知道一些错误怎么修改还有修改原因之类的,所以越到后面越熟练了,我做这个部署也有几天了,每天看不同的网页,阿里云、本地都有尝试(本地可能是电脑太垃了搞不起来,毕竟莫得独显),成功的时候还是比较欣慰的,所以大家一定要坚持,很多东西尤其是没试过的东西很难一蹴而就,往往需要我们不断尝试累积经验。

之后去再看看本地知识库搭建,然后了解transformer相关内容。
更新:完成本地知识库搭建,不过这只是简单上传文件搜索整合,后面具体微调训练还得继续学习其他文章,调试代码,先告一段落吧,本周重心放在Transformer上。

文章来源:https://blog.csdn.net/m0_52695557/article/details/134907862
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。