本文期望通过本地化部署一个基于LLM模型的应用,能让大家对构建一个完整的应用有一个基本认知。包括基本的软硬环境依赖、底层的LLM模型、中间的基础框架及最上层的展示组件,最终能达到在本地零编码体验的目的。

一、ChatGLM-6B模型介绍

https://github.com/THUDM/ChatGLM-6B [Star 27.6k]

一个清华开源的、支持中英双语的对话语言模型,基于GLM架构,62亿参数。可以本地安装部署运行在消费级的显卡上做模型的推理和训练。

  • 开源10天10000stars

  • 当天在GitHub的趋势排行第一

  • Huggingface下载超过100万

  • 开源的训练数据量达到1万亿字符的模型

1、能力

  • 自我认知

  • 文案写作

  • 提纲写作

  • 信息抽取

2、缺点

  • 模型容量小导致回答存在偏见内容,推理能力较弱

3、场景

  • 垂直领域知识

  • 基于私有数据的问答

二、部署体验

1、环境依赖:

硬件:

  • 基于GPU,建议16GB起步,建议24GB+体验,否则多轮容易爆显存;

  • 无GPU可以仅用CPU,大约需要25GB内存,CPU会慢一点,本次不使用。

软件:

  • CUDA 11.7+

  • Python3.10.8+

  • pip3

  • git

2、钞能力-算力市场:

强烈不建议本地部署,一整套硬件价值不菲,费时耗力,按需购买算力对于体验来说最划算,建议使用京东Ku+平台即可,目前都有配额,可直接申请使用,本次演示流程基于autodl算力平台搭建:

http://kuplus.jd.com [Ku+]

https://www.autodl.com [AutoDL]

3、下载demo:

# 下载项目源代码
git clone https://github.com/THUDM/ChatGLM-6B
# 切换到项目根目录
cd ChatGLM-6B
# 安装依赖
pip install -r requirements.txt
# 安装回老版本gradio,解决输出内容未渲染html标签问题
pip install gradio==3.28.3 # 如果pip下载有问题,修改其他源,比例douban或aliyun,没有pip.conf需新建
mkdir ~/.pip && touch ~/.pip/pip.conf && vim ~/.pip/pip.conf [global]
index-url=http://pypi.douban.com/simple/
[install]
trusted-host=pypi.douban.com

4、下载模型:

# 直接git下载模型,大约需要13G空间
git clone https://huggingface.co/THUDM/chatglm-6b # 或者部分地区可能无法下载,可以使用镜像单独下载,新建url.txt, 拷贝以下镜像地址保存
https://cloud.tsinghua.edu.cn/seafhttp/files/08ff8050-912c-47b8-ad5c-56bcd231df71/ice_text.model
https://cloud.tsinghua.edu.cn/seafhttp/files/88a7978c-8eda-498d-85e8-0671294a4c47/pytorch_model-00001-of-00008.bin
https://cloud.tsinghua.edu.cn/seafhttp/files/de998e41-7093-41b3-84f1-59e32361e703/pytorch_model-00002-of-00008.bin
https://cloud.tsinghua.edu.cn/seafhttp/files/077b5058-5ebd-4930-9470-8e873c01f47c/pytorch_model-00003-of-00008.bin
https://cloud.tsinghua.edu.cn/seafhttp/files/728f7324-ce96-44bc-a08f-5c7222727ca5/pytorch_model-00004-of-00008.bin
https://cloud.tsinghua.edu.cn/seafhttp/files/932b40ac-d195-4ba4-8d06-7946b8e6d0d8/pytorch_model-00005-of-00008.bin
https://cloud.tsinghua.edu.cn/seafhttp/files/d763678e-c438-416b-a4b9-5594c52cb3f6/pytorch_model-00006-of-00008.bin
https://cloud.tsinghua.edu.cn/seafhttp/files/59da96fd-8eb9-42d4-992e-03e1d0637a01/pytorch_model-00007-of-00008.bin
https://cloud.tsinghua.edu.cn/seafhttp/files/849d7de4-9253-487a-bc37-9a43418e3c0c/pytorch_model-00008-of-00008.bin
# 此处文件夹名称使用THUDM/chatglm-6b
mkdir -p THUDM/chatglm-6b && cd THUDM/chatglm-6b && touch url.txt
# 保存批量下载地址
vim url.txt
# 执行wget批量下载到当前文件夹
wget -i url.txt

5、安装运行:

打开 web_demo.py

# 一、如果模型位置不是默认path,修改如下位置:
tokenizer = AutoTokenizer.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True)
model = AutoModel.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True).half().cuda() # 二、找到最后一行或者类似 queue().launch 位置,指定ip、端口方便外网映射用,一般算力市场会默认提供一个映射端口,指定即可:
demo.queue().launch(share=False, inbrowser=True, server_name='0.0.0.0', server_port=6006) # 启动
python web_demo.py root@autodl-container-9494499a62-3e5ab6d1:~/ChatGLM-6B# python web_demo.py
Explicitly passing a `revision` is encouraged when loading a model with custom code to ensure no malicious code has been contributed in a newer revision.
Explicitly passing a `revision` is encouraged when loading a configuration with custom code to ensure no malicious code has been contributed in a newer revision.
Explicitly passing a `revision` is encouraged when loading a model with custom code to ensure no malicious code has been contributed in a newer revision.
Loading checkpoint shards: 100%|█████████████████████████████████████████████████████████████████████| 8/8 [00:10<00:00, 1.36s/it]
Running on local URL: http://0.0.0.0:6006 To create a public link, set `share=True` in `launch()`.

6、实际效果、资源占用:

主机配置 演示效果


7、推理参数含义:

· Maximum length

通常用于限制输入序列的最大长度,因为ChatGLM-6B是2048长度推理的,一般这个保持默认就行, 太大可能会导致性能下降

· Top P

Top P 参数是指在生成文本等任务中,选择可能性最高的前P个词的概率累加和。这个参数被称为Top P,也称为Nucleus Sampling。

例如,如果将Top P参数设置为0.7,那么模型会选择可能性排名超过70%的词进行采样。这样可以保证生成的文本准确性较高,但可能会缺乏多样性。相反,如果将Top P参数设置为0.3,则会选择可能性超过30%的词进行采样,这可能会导致生成文本的准确性下降,但能够更好地增加多样性。

· Temperature

Temperature参数通常用于调整softmax函数的输出,用于增加或减少模型对不同类别的置信度。

具体来说,softmax函数将模型对每个类别的预测转换为概率分布。Temperature参数可以看作是一个缩放因子,它可以增加或减少softmax函数输出中每个类别的置信度。

例如,将Temperature设置为0.05和0.95的主要区别在于,T=0.05会使得模型更加自信,更加倾向于选择概率最大的类别作为输出,而T=0.95会使得模型更加不确定,更加倾向于输出多个类别的概率值较大。

8、其他好玩的:

看图说话,VisualGLM-6B,一个支持图像理解的多模态对话语言模型,语言模型基于ChatGLM-6B。

三、结合LangChain实现本地知识库

1、LangChain:

https://github.com/hwchase17/langchain [Star 45k]

⽤于开发由语⾔模型驱动的应⽤程序的基础框架,是一个链接面向用户程序和LLM之间的中间层,可以理解成是一个lib。

· 简介原理

· 主要功能

1.调⽤语⾔模型;

2.将不同数据源接⼊到语⾔模型的交互中;

3.允许语⾔模型与运⾏环境交互。

· 模块介绍

1.Modules:⽀持的模型类型和集成;

2.Prompt:提示词管理、优化和序列化;

3.Memory:内存是指在链/代理调⽤之间持续存在的状态;

4.Indexes:当语⾔模型与特定于应⽤程序的数据相结合时,会变得更加强⼤-此模块包含⽤于加载、查询和更新外部数据的接⼝和集成;

5.Chain:链是结构化的调⽤序列(对LLM或其他实⽤程序);

6.Agents:代理是⼀个链,其中LLM在给定⾼级指令和⼀组⼯具的情况下,反复决定操作,执⾏操作并观察结果,直到⾼级指令执行完成;

7.Callbacks:回调允许您记录和流式传输任何链的中间步骤,从⽽轻松观察、调试和评估应⽤程序的内部。

2、LangChain-ChatGLM

https://github.com/imClumsyPanda/langchain-ChatGLM [Star 8k]

一种利用langchain实现的基于本地知识库的问答应用,目标期望建立一套对中文场景与开源模型支持友好、可离线运行的知识库问答解决方案。

实现过程:包括加载文件 -> 读取文本 -> 文本分割 -> 文本向量化 -> 问句向量化 -> 在文本向量中匹配出与问句向量最相似的top k个 -> 匹配出的文本作为上下文和问题一起添加到prompt中 -> 提交给LLM生成回答。

· 项⽬特点

1.依托ChatGLM等开源模型实现,可离线部署;

2.基于langchain实现,可快速实现接⼊多种数据源;

3.在分句、⽂档读取等⽅⾯,针对中⽂使⽤场景优化;

4.⽀持pdf、txt、md、docx等⽂件类型接⼊,具备命令⾏demo、webui和vue前端。

· 项⽬结构

1.models:llm的接⼝类与实现类,针对开源模型提供流式输出⽀持;

2.loader:⽂档加载器的实现类;

3.textsplitter:⽂本切分的实现类;

4.chains:⼯作链路实现,如chains/local_doc_qa实现了基于本地⽂档的问答实现;

5.content:⽤于存储上传的原始⽂件;

6.vector_store:⽤于存储向量库⽂件,即本地知识库本体;

7.configs:配置⽂件存储。

· 安装部署

与ChatGLM安装基本类似,git clone之后修改模型地址到本地chartglm-6b的path启动即可,如果使用AutoDL平台,可用镜像一键拉起,镜像保持最新master版本,可体验最新功能。

最新镜像地址,已包含离线llm model: chatglm-6b 和 embedding: text2vec-large-chinese: https://www.codewithgpu.com/i/Liudapeng/langchain-ChatGLM/langchain-chatglm-master

# 新增一步,下载离线 embedding model
sudo apt-get install git-lfs
git lfs install
git clone https://huggingface.co/GanymedeNil/text2vec-large-chinese # 启用本地离线模型
vim ~/langchain-ChatGLM/configs/model_config.py # 1、修改 embedding path
embedding_model_dict = {
"text2vec": "/root/GanymedeNil/text2vec-large-chinese",
} # 2、修改 llm path, 直接指向为第一章节的 chatglm-6b path即可
"chatglm-6b": {
"name": "chatglm-6b",
"pretrained_model_name": "THUDM/chatglm-6b",
"local_model_path": "/root/ChatGLM-6B/THUDM/chatglm-6b",
"provides": "ChatGLM"
} # 3、启用本地模型
NO_REMOTE_MODEL = True # 运行Gradio web demo
cd ~/langchain-ChatGLM/ root@autodl-container-95b111aeb0-c6fdac9f:~/langchain-ChatGLM# python webui.py
INFO 2023-06-08 14:10:58,531-1d:
loading model config
llm device: cuda
embedding device: cuda
dir: /root/langchain-ChatGLM
flagging username: dc706ff885da43a8b0e8181bcc72ad1e WARNING: OMP_NUM_THREADS set to 14, not 1. The computation speed will not be optimized if you use data parallel. It will fail if this PaddlePaddle binary is
compiled with OpenBlas since OpenBlas does not support multi-threads.
PLEASE USE OMP_NUM_THREADS WISELY.
Loading chatglm-6b...
Loading checkpoint shards: 100%|██████████████████████████████████████████████████████████████████████████████| 8/8 [00:13<00:00, 1.66s/it]
Loaded the model in 23.48 seconds.
INFO 2023-06-08 14:11:26,780-1d: Load pretrained SentenceTransformer: /root/GanymedeNil/text2vec-large-chinese
{'answer': '你好!我是人工智能助手 ChatGLM-6B,很高兴见到你,欢迎问我任何问题。'}
INFO 2023-06-08 14:11:33,694-1d: 模型已成功加载,可以开始对话,或从右侧选择模式后开始对话
Running on local URL: http://0.0.0.0:6006 To create a public link, set `share=True` in `launch()`.
· 效果对比
LLM回答 LLM+知识库 知识库来源

四、视图框架

快速构建针对人工智能的python的webApp库,封装前端页面+后端接口+AI算法模型推理,方便AI算法工程师快速展示成果,常用的两个展示层框架:

1、Gradio:

优势在于易用性,代码结构相比Streamlit简单,只需简单定义输入和输出接口即可快速构建简单的交互页面,更轻松部署模型。适合场景相对简单,想要快速部署应用的开发者;

2、Streamlit:

优势在于可扩展性,相比Gradio复杂。适合场景相对复杂,想要构建丰富多样交互页面的开发者。

作者:京东科技 刘大朋

来源:京东云开发者社区

ChatGPT小型平替之ChatGLM-6B本地化部署、接入本地知识库体验的更多相关文章

  1. 与众不同 windows phone (28) - Feature(特性)之手机方向, 本地化, 应用程序的试用体验, 系统主题资源, 本地数据的加密解密

    原文:与众不同 windows phone (28) - Feature(特性)之手机方向, 本地化, 应用程序的试用体验, 系统主题资源, 本地数据的加密解密 [索引页][源码下载] 与众不同 wi ...

  2. .Net Core 集成ExceptionLess分布式日志框架之本地化部署

    前言 公司目前使用的项目中关于日志记录这块,之前一直都是使用的Log4net 存放于后台文件中的,对于异常错误啊,或者需要查看一些详情错误的时候感觉很不方便,要到服务器上去打开日志文件检索错误,降低了 ...

  3. ArcGis API JS 4.X本地化部署与地图的基础使用

    准备工作 首先下载ArcGIS API for JavaScript4.x,这里下载的是4.19. 官方下载地址:https://developers.arcgis.com/downloads/ ar ...

  4. MobSF移动安全扫描平台本地化部署与简单汉化

    在之前的文章MobSF移动安全扫描平台环境搭建与试用中,我们用docker进行了搭建,那么我们如何在本地直接搭建呢,其实也是很简单的. 本地化部署 我们在本地安装 其实是很简单的,里面有两个文件,在不 ...

  5. 集成RocketChat至现有的.Net项目中,为ChatGPT铺路

    @ 目录 前言 项目搭建 后端 前端 代理账号 鉴权方式介绍 登录校验模块 前端鉴权方式 后端鉴权方式 登录委托 使用登录委托 处理聊天消息 前端鉴权方式 后端校验方式 项目地址 前言 今天我们来聊一 ...

  6. 一文讲透产品经理如何用好ChatGPT

    作者:京东零售 何雨航 "4.0版本的ChatGPT可以有效提升产品经理工作效率,但并无法替代产品经理的角色." 一.引言 3月15日,OpenAI发布了最新的基于GPT-4的Ch ...

  7. 本地化 NSLocal

    本地化封装了关于语言,文化以及技术约定和规范的信息.用于提供于用户所处地域相关的定制化信息和首选项信息的设置.通过获取用户的本地化信息设置,我们可以为用户提供更加友好人性化的界面设置,包括更改更改应用 ...

  8. JIRA、Confluence等产品明年2月停售本地化版本,将影响中国近90%的客户!

    作为目前应用最为广泛的软件开发管理软件,JIRA.Confluence等产品几乎被所有的科技型公司所应用.我们的每天的任务管理.文档编写等工作几乎都在这些软件的帮助下进行和管理.当然我也不例外,在读书 ...

  9. JavaFX+SpringBoot+验证码功能的小型薪酬管理系统

    2020.07.22更新 1 概述 1.1 简介 一个简单的小型薪酬管理系统,前端JavaFX+后端Spring Boot,功能倒没多少,主要精力放在了UI和前端的一些逻辑上面,后端其实做得很简单. ...

  10. 简悦+Logseq 搭建本地化个人知识库

    最近在少数派上看到了 简悦 +Logseq 个人知识库搭建 | 从零开始完全指南 - 少数派, 一时间感觉打开了新世界,其实我很早就买了简悦 2.0,但由于一直没有很好的使用场景,外加配置实在过于复杂 ...

随机推荐

  1. 随机服务系统模拟—R实现(二)

    M/M/1随机服务系统的模拟 M/M/1模型是一种出生-死亡过程,此随机过程中的每一个状态代表模型中人数的数目.因为模型的队列长度无限且参与人数亦无限,故此状态数目亦为无限.例如状态0表示模型闲置.状 ...

  2. [操作系统/Linux]磁盘分区

    0 基本概念1: 盘片/盘面/磁头/扇区/磁道/柱面 本小节摘自: 硬盘基本知识(磁头.磁道.扇区.柱面) - 博客园 一张磁盘并不是拿过来直接用,需要先分区. 磁盘本身有很多sector(扇区).c ...

  3. 四月二十四号java基础知识

    1.输入输出是指程序与外部设备或其他计算机进行交互的操作2.流(stream)是指计算机各部件之间的数据流动流的内容上划分:流分为字节流和字符流3.输入流:将数据从外设或外存(如键盘.鼠标.文件等)传 ...

  4. Hyperledger Fabric 使用 CouchDB 和复杂智能合约开发

    前言 在上个实验中,我们已经实现了简单智能合约实现及客户端开发,但该实验中智能合约只有基础的增删改查功能,且其中的数据管理功能与传统 MySQL 比相差甚远.本文将在前面实验的基础上,将 Hyperl ...

  5. 帝国cms将没有搜索到结果的关键字存入到数据库的方法

    在帝国cms网站前台搜索一个关键字,如果在网站中查询到了,这个关键字会被记录入搜索关键字表中,但是如果在网站中没有搜索到,就不会记录入搜索关键字表中,那怎么把没有搜索结果的关键字才能记录到数据库中,方 ...

  6. [操作系统] - 进程切换&进程控制

    2.1.6 进程切换 名称解析 进程的上下文(Context) 当一个进程在执行时,CPU的所有寄存器的值.进程的状态以及堆栈中的内容被称为进程的上下文Context 进程的切换(switch) 当内 ...

  7. MQTT-发布与订阅的报文

    MQTT发布订阅流程 在MQTT发布/订阅模式中,一个客户端既可以是发布者,也可以是订阅者,也可以同时具备这两个身份.当客户端发布一条消息时,它会被发送到代理,然后代理将消息路由到该主题的所有订阅者. ...

  8. 这是一篇记录——django-xadmin重新开发记录

    利用下面的代码把django的版本换成和xadmin2适配的版本,注意xadmin最新版本出了3.0但是就是一个纯前端的框架,和之前的版本差异较大. 因为此时距离ddl不到24小时,所以使用旧的版本. ...

  9. springboot整合cas回调地址使用nginx配置出错

    nginx配置后台为 location /apis springboot基础cas回调时访问地址为nginx域名+apis回调.为什么没有成功.页面只回调域名+登录方法路径,而不是域名+apis+登录 ...

  10. [Tensorflow]模型持久化的原理,将CKPT转为pb文件,使用pb模型预测

    文章目录 [Tensorflow]模型持久化的原理,将CKPT转为pb文件,使用pb模型预测 一.模型持久化 1.持久化代码实现 convert_variables_to_constants固化模型结 ...