书生·浦语大模型实战营第三节课堂作业

原视频链接:https://www.bilibili.com/video/BV1Ci4y1z72H/

github教程链接:https://github.com/InternLM/tutorial/blob/main/helloworld/hello_world.md

InternLM模型部署

安装环境

在InternStudio平台上创建开发机,选择A100(1/4)的配置,镜像选择Cuda11.7-conda
进入开发机
安装conda虚拟环境

激活虚拟环境

安装运行 demo 所需要的依赖

 
模型下载

由于课程算力有限,最快捷的方式即为从本地直接拷贝下载模型参数

LangChain 相关环境配置

安装LangChain相关依赖

由于开源词向量模型Sentence Transformer需要下载,因此使用huggingface的huggingface-cli工具来下载

在和 /root/data 目录下新建python文件 download_hf.py,填入以下代码

然后,在 \root\data 目录下执行该脚本即可自动开始下载

下载 NLTK 相关资源

用以下命令下载 nltk 资源并解压到服务器上

 
下载本项目代码

我们在仓库中同步提供了所有脚本,可以查看该教程文件的同级目录的 demo 文件夹。

建议通过以下目录将仓库 clone 到本地,可以直接在本地运行相关代码

知识库搭建
数据收集
我们选择由上海人工智能实验室开源的一系列大模型工具开源仓库作为语料库来源,包括:

OpenCompass:面向大模型评测的一站式平台
IMDeploy:涵盖了 LLM 任务的全套轻量化、部署和服务解决方案的高效推理工具箱
XTuner:轻量级微调大语言模型的工具库
InternLM-XComposer:浦语·灵笔,基于书生·浦语大语言模型研发的视觉-语言大模型
Lagent:一个轻量级、开源的基于大语言模型的智能体(agent)框架
InternLM:一个开源的轻量级训练框架,旨在支持大模型训练而无需大量的依赖
首先我们需要将上述远程开源仓库 Clone 到本地,可以使用以下命令:

为语料处理方便,我们将选用上述仓库中所有的 markdown、txt 文件作为示例语料库。定义一个函数,该函数将递归指定文件夹路径,返回其中所有满足条件(即后缀名为 .md 或者 .txt 的文件)的文件路径:

 
加载数据

得到所有目标文件路径之后,我们可以使用 LangChain 提供的 FileLoader 对象来加载目标文件,得到由目标文件解析出的纯文本内容

使用上文函数,我们得到的 docs 为一个纯文本对象对应的列表

构建向量数据库

LangChain 提供了多种文本分块工具,此处我们使用字符串递归分割器,并选择分块大小为 500,块重叠长度为 150

接着我们选用开源词向量模型 Sentence Transformer 来进行文本向量化

基于上文分块后的文档以及加载的开源向量化模型,将语料加载到指定路径下的向量数据库chroma

InternLM 接入 LangChain

基于本地部署的 InternLM 自定义 LLM 类并不复杂,我们只需从 LangChain.llms.base.LLM 类继承一个子类,并重写构造函数与 _call 函数即可:创建LLM.py文档,

将tutorial中提供的上述代码封装至 LLM.py,后续将直接从该文件中引入自定义的 LLM 类。

 

构建检索问答链
我们可以调用一个 LangChain 提供的 RetrievalQA 对象,通过初始化时填入已构建的数据库和自定义 LLM 作为参数,来简便地完成检索增强问答的全流程,LangChain 会自动完成基于用户提问进行检索、获取相关文档、拼接为合适的 Prompt 并交给 LLM 问答的全部流程。

加载向量数据库
直接通过 Chroma 以及上文定义的词向量模型来加载已构建的数据库

上述代码得到的 vectordb 对象即为我们已构建的向量数据库对象,该对象可以针对用户的 query 进行语义向量检索,得到与用户提问相关的知识片段。

实例化自定义 LLM 与 Prompt Template

实例化一个基于 InternLM 自定义的 LLM 对象

 

还需要构建一个 Prompt Template,该 Template 其实基于一个带变量的字符串,在检索之后,LangChain 会将检索到的相关文档片段填入到 Template 的变量中,从而实现带知识的 Prompt 构建。我们可以基于 LangChain 的 Template 基类来实例化这样一个 Template 对象

构建检索问答链

最后,可以调用 LangChain 提供的检索问答链构造函数,基于我们的自定义 LLM、Prompt Template 和向量知识库来构建一个基于 InternLM 的检索问答链

得到的 qa_chain 对象即可以实现我们的核心功能,即基于 InternLM 模型的专业知识库助手。我们可以对比该检索问答链和纯 LLM 的问答效果

部署 Web Demo
在完成上述核心功能后,我们可以基于 Gradio 框架将其部署到 Web 网页,从而搭建一个小型 Demo,便于测试与使用。

我们首先将上文的代码内容封装为一个返回构建的检索问答链对象的函数,并在启动 Gradio 的第一时间调用该函数得到检索问答链对象,后续直接使用该对象进行问答对话,从而避免重复加载模型


按照 Gradio 的框架使用方法,实例化一个 Web 界面并将点击动作绑定到上述类的回答方法即可

然后对tutorial中提供的代码,封装在 run_gradio.py 脚本中,直接通过 python 命令运行,即可在本地启动知识库助手的 Web Demo,默认会在 7860 端口运行,接下来将服务器端口映射到本地端口即可访问,将服务器端口映射到本地端口的方法也直接参考了tutorial中提供的方法。

run_gradio.py 脚本之后的web demo部署效果

  • 21
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值