提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 前言
- 一、ChatGLM3-6B部署
- 搭建环境
- 部署GLM3
- 二、Chatglm2-6b+langchain部署本地知识库
- 三、Tips
- 四、总结
前言
提示:这里可以添加本文要记录的大概内容:
看了几天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.py
和web_demo2.py
中都把tokenizer
和model
的路径修改为本地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
点击执行后的网址就出来了:
可以点击【知识库管理】,上传文件,然后切换到知识库对话,如下图所示:
知识库问答例子:
问题:什么是RAGassistant avatar
RAG(Retrieval Augmented Generation)是一种结合了检索和生成技术的语言模型,旨在为自然语言处理任务提供更好的性能和可解释性。它通过从大规模文本数据集中检索有关的信息,并利用这些信息来生成更具体的回答,从而实现更好的检索性和更丰富的生成性。RAG 通常由数据提取、数据清洗、索引创建、检索、自动排序和 LLM 归纳生成等组成。其中,数据提取包括从文本、语音、图像等多模态场景中提取数据,数据清洗包括去除标点符号、停用词等,索引创建用于快速检索,检索包括在原始数据上进行查询并返回相关的答案,自动排序是对查询结果进行排序,LLM 归纳生成则是由语言模型生成更加详细的回答。RAG 的主要优点是在自然语言处理任务中提高了检索和生成任务的性能,同时提供了更好的可解释性。它适用于多种自然语言处理任务,如问答系统、对话系统等。知识库匹配结果出处 [1] RAG大模型.docxRAG不仅仅面向文本,它还可以面向语音、视频和图像等多模态场景,只要可以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大模型.docxhttps://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上。