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

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

文章目录

  • 前言
  • 一、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.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上。

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

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

相关文章

深度学习基本概念

1.全连接层 全连接层就是该层的所有节点与输入节点全部相连,如图所 示。假设输入节点为X1, X 2, X 3,输出节点为 Y 1, Y 2, Y 3, Y 4。令 矩阵 W 代表全连接层的权重, W 12也就代表 …

如何在 1 天内将网站打造为手机app

为您的网站提供移动应用程序的重要性怎么强调都不为过。随着用户越来越依赖智能手机和平板电脑进行在线活动,将您的网站转变为移动手机app可以显着增强用户体验、提高参与度并扩大您的在线影响力。在这篇博客中,我们将探讨如何快速有效地将网站制作成移动…

【广州华锐视点】物流数字孪生三维可视化系统打造更高效、智能的物流管理体验

在当今快速发展的物流行业中,传统的管理和监控方法往往难以满足复杂运营的需求。为了解决这个问题,广州华锐互动提供物流数字孪生三维可视化系统定制开发服务,打造更为高效、智能的物流管理体验。 物流数字孪生三维可视化系统是一种基于虚拟现…

Java_mybatis-结果集映射-ResultTypeResultMap

Mybatis返回值接收 可以使用两种方式进行参数的接收 resultTyperesultMap 这两种分别都是需要在Mapper.xml文件中去设置的 当结果是一个简单的对象或者list或者map,对象中没有嵌套对象,或者集合时,就可以直接使用resultType 反之如果需要…

记账本选择标签选择时间,计算器---记录一下

html部分 <template><view class"pages-main"><!-- 标题栏 --><!-- #ifndef MP-TOUTIAO --><view class"" :style"height:barHeight px;"></view><!-- #endif --><!-- #ifdef MP-TOUTIAO -->&…

node.js安装和配置

软件介绍 Node.js是一个免费的、开源的、跨平台的JavaScript运行时环境&#xff0c;允许开发人员在浏览器之外编写命令行工具和服务器端脚本。 Node.js是一个基于Chrome JavaScript运行时建立的一个平台。 Node.js是一个事件驱动I/O服务端JavaScript环境&#xff0c;基于Googl…

Java连接数据库的各种细节错误(细节篇)

目录 前后端联调&#xff08;传输文件&#xff09; ClassNotFoundException: SQLException: SQL语法错误: 数据库连接问题: 驱动问题: 资源泄露: 并发问题: 超时问题: 其他库冲突: 配置问题: 网络问题: SSL/TLS问题: 数据库权限问题: 驱动不兼容: 其他未知错误…

祝贺!2023美丽汉字小达人市级比赛和区级自由报名获奖名单发布

昨天&#xff0c;汉字小达人的主办方《中文自修》杂志社在官网发布了两个公示&#xff1a;《“中文自修杯”第十届上海市小学生“美丽汉字小达人”市级活动获奖名单公示》、《“中文自修杯”第十届上海市小学生“美丽汉字小达人”区级活动“自由报名”获奖名单公示》。 这两份名…

在虚拟机的Windows操作系统中:通过Jar方式若依项目,以及在外部的访问!

&#x1f4da;&#x1f4da; &#x1f3c5;我是默&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; ​​ &#x1f31f;在这里&#xff0c;我要推荐给大家我的专栏《Windows》。&#x1f3af;&#x1f3af; &#x1f680;无论你是编程小白&#xff0c;还是有…

SCA面面观 | 五大维度提升,让SCA产品走向成熟

随着开源软件的迅速崛起&#xff0c;特别是在2021年SolarWinds和Log4j漏洞事件引发全球关注后&#xff0c;软件成分分析&#xff08;Software Composition Analysis&#xff0c;简称SCA&#xff09;越来越受到业界的重视。SCA产品已经逐渐成为企业软件供应链资产管理、漏洞管理…

【UE 材质】切换颜色、纹理时的过渡效果

效果 步骤 1. 新建一个工程&#xff0c;创建Basic关卡 2. 创建一个材质&#xff0c;这里命名为“M_Plane”&#xff0c;打开这个材质&#xff0c;在材质图表中添加如下节点 注意“Noise”节点中的函数选择“Voronoi” 3. 对材质“M_Plane”创建材质实例 4. 在场景中放置一个平…

Java_Mybatis_缓存

缓存 1.概述 Mybatis 缓存&#xff1a;MyBatis 内置了一个强大的事务性查询缓存机制&#xff0c;它可以非常方便地配置和定制 2.会话缓存&#xff08;一级缓存&#xff09; sqlSession 级别的&#xff0c;也就是说&#xff0c;使用同一个 sqlSession 查询同一 sql 时&#x…

Impala4.x源码阅读笔记(二)——Impala如何高效读取Iceberg表

前言 本文为笔者个人阅读Apache Impala源码时的笔记&#xff0c;仅代表我个人对代码的理解&#xff0c;个人水平有限&#xff0c;文章可能存在理解错误、遗漏或者过时之处。如果有任何错误或者有更好的见解&#xff0c;欢迎指正。 Iceberg表是一种用于存储大规模结构化数据的…

Vue指令之v-on

v-on指令用于注册事件&#xff0c;作用是添加监听与提供事件触发后对应的处理函数。 v-on有两种语法&#xff0c;在提供处理函数的时候既可以直接使用内联语句&#xff0c;也可以提供函数的名字。 第一种语法是直接提供内联语句&#xff0c;如下 v-on:事件名 "内联语句…

外贸SOHO建站教程?海洋建站推广如何做?

外贸SOHO建站推广的步骤&#xff1f;国际贸易网站建设方法&#xff1f; 随着互联网的普及和发展&#xff0c;越来越多的外贸SOHO从业者选择通过建立自己的网站来拓展业务。那么&#xff0c;如何搭建一个专业、高效的外贸网站呢&#xff1f;海洋建站将为您提供一份详细的外贸SO…

Java - Bean的生命周期

Bean的生命周期之5步 Bean生命周期的管理&#xff0c;可以参考Spring的源码&#xff1a;AbstractAutowireCapableBeanFactory类的doCreateBean()方法。 Bean生命周期可以粗略的划分为五大步&#xff1a; 第一步&#xff1a;实例化Bean 第二步&#xff1a;Bean属性赋值 第三…

扫描电镜(SEM)样品在进行扫描电镜观察前需要进行哪些处理

对于扫描电镜&#xff08;Scanning Electron Microscope&#xff0c;SEM&#xff09;样品的制备&#xff0c;需要经过一系列处理步骤以确保样品表面的干净、导电性好&#xff0c;并且能够提供高质量的显微图像。以下是一些常见的处理步骤&#xff1a; 1. 固定样品&#xff08;…

Vue 学习随笔系列七 -- 表单动态生成

表单动态生成 文章目录 表单动态生成1、动态表单组件封装2、组件引用3、实现效果 1、动态表单组件封装 <!-- 动态生成下拉框&#xff0c;可同理生成input框等 --> <template><el-dialogcustom-class"custom-dialog":title"dialogTitle":vi…

Linux 使用定时任务

在Linux中&#xff0c;你可以使用cron&#xff08;定时任务管理器&#xff09;来设置和管理定时任务。以下是使用cron的基本步骤 编辑定时任务列表 打开终端&#xff0c;输入以下命令来编辑当前用户的定时任务列表 crontab -e如果是要编辑系统范围的定时任务&#xff0c;可以…

如何在忘记密码的情况下恢复解锁 iPhone

您忘记了 iPhone 密码吗&#xff1f;Apple 官方通常建议将 iPhone 恢复至出厂设置以将其删除。这种修复很不方便&#xff0c;甚至可能比问题本身更麻烦。 如果您也经历过同样的情况&#xff0c;并且想知道忘记了 iPhone 密码并且不想恢复它该怎么办&#xff0c;我们的终极指南…