ChatGPT小型平替之ChatGLM-6B本地化部署、接入本地知识库体验 | 京东云技术团队

本文期望通过本地化部署一个基于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.pyroot@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:6006To 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: dc706ff885da43a8b0e8181bcc72ad1eWARNING: 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:6006To create a public link, set `share=True` in `launch()`.
· 效果对比
LLM回答LLM+知识库知识库来源

四、视图框架

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

1、Gradio:

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

2、Streamlit:

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

作者:京东科技 刘大朋

来源:京东云开发者社区

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IEEE Fellow!前京东高级副总裁入局ChatGPT!招揽合伙人

来源&#xff1a;量子位 又一技术大牛官宣入局ChatGPT。 这一回出手的&#xff0c;是被视作“京东AI开创者”的前京东高级副总裁&#xff0c;周伯文。 就在2月26日晚间&#xff0c;周伯文在朋友圈广发“英雄帖”&#xff0c;称“现不设上限诚招合伙人”&#xff0c;包括研发合伙…

【保姆级教程】如何用Rust编写一个ChatGPT桌面应用 | 京东云技术团队

为什么我们需要一个桌面应用 原因实在太多&#xff0c;我们需要便捷地导出记录&#xff0c;需要在回答长度超长的时候自动加上“继续”&#xff0c;需要收藏一些很酷很实用的prompt… &#xff08;首先我假设你是一名如我一样习惯用IDEA开发的java仔&#xff09; 为什么是用R…

关于ChatGPT前后今生学习笔记

纵观ChatGPT的发展历史&#xff0c;则要从2011年开始&#xff0c;在这一年&#xff0c;谷歌公司的谷歌大脑部门成立。2015年12月&#xff0c;OpenAI公司作为一家非营利组织在美国旧金山成立&#xff0c;以研发对人类社会有益、友好的人工智能技术为使命&#xff0c;特斯拉的创始…

【创作赢红包】ChatGPT引爆全网引发的AI算力思考

文章目录 前言AIGC时代&#xff1a;万物皆可AI生成“大厂”纷纷入局算力各位后面有AI、大数据模型学习做研究需求或购买阿里云、腾讯云、华为云 服务器部署的 可以私信我 &#xff0c;有一定的优惠&#xff01; 前言 随着 ChatGPT的强势推出&#xff0c;智能聊天机器人ChatGPT…

ChatGPT+Mermaid自然语言流程图形化产出小试 | 京东云技术团队

ChatGPTMermaid语言实现技术概念可视化 本文旨在介绍如何使用ChatGPT和Mermaid语言生成流程图的技术。在现代软件开发中&#xff0c;流程图是一种重要的工具&#xff0c;用于可视化和呈现各种流程和结构。结合ChatGPT的自然语言处理能力和Mermaid的简单语法&#xff0c;可以轻…

【AI思维空间】ChatGPT纵横编程世界,点亮智慧火花 | 京东云技术团队

作者&#xff1a;京东零售 王英杰 概述 该文档记录云交易开发小伙伴儿们在开发过程中的实际应用案例&#xff0c;记录典型案例&#xff0c;以解决开发过程中的实际问题为主&#xff0c;涵盖设计方案、编码、测试、集成、部署等等。 目的&#xff1a;贡献最佳实践&#xff0c;…

ChatGPT的原理与前端领域实践 | 京东云技术团队

一、ChatGPT 简介 ChatGPT的火爆 ChatGPT作为一个web应用&#xff0c;自22年12月发布&#xff0c;仅仅不到3个月的时间&#xff0c;月活用户就累积到1亿。在此之前&#xff0c;最快记录的保持者也需要9个月才达到月活1亿。 ChatGPT的反爬 https://chat.openai.com 因为各种政…

什么是人工智能?简单的人工智能发展史

参考资料 维基百科-人工智能史百度百科-炼金术百度百科-图灵图灵机快速入门教程百度百科-第五代计算机野心勃勃的日本第五代计算机&#xff0c;如何一步步走向失败(上)AI缘起-达特茅斯会议人工智能发展史Imagenet官网机器之心——专家系统炼金术与人工智能&#xff1a;休伯特•…

大师激辩:人工智能「性善论」——文艺复兴 or 终结者?

导读 一直以来&#xff0c;学界对于人工智能的生存性风险尚无定论&#xff0c;人工智能「性善论」是否成立&#xff1f;「超级智能」是否会脱离人类控制&#xff0c;产生伤害人类的目标&#xff1f;人类是否会从人工智能手中失去对未来的控制权&#xff1f; 上月&#xff0c;两…

14 张图表还原当前的 AI 地图和资本之争 | AIGC 101

推荐语 Newcomer是我一直订阅的付费专栏&#xff0c;作者Eric曾是科技新闻网站The Information的第一位员工&#xff0c;后来为彭博社&#xff08;Bloomberg&#xff09;写了六年关于技术行业的文章。在那段时间里&#xff0c;他大部分时间都在报道创业公司的来龙去脉&#xff…

MySQL 输了,PostgreSQL起航 !

来源&#xff1a;51CTO技术栈 在软件领域&#xff0c;数据库是毫无疑问的中流砥柱。在这片历史悠久、玩家众多的沃土上&#xff0c;流传着着无数技术和商业交织的故事。如今&#xff0c;老一代商业数据库日薄西山&#xff0c;开源数据库步步为营&#xff0c;处在浪潮之巅的我们…

工业机器人及工控系统

一、为什么要发展人形机器人&#xff1f; 中国劳动力人口数量持续下滑&#xff0c;美、德、日等多国具有同样趋势。根据国家统计局发布的数 据显示&#xff0c;2022 年我国人口从年龄构成看&#xff0c;16~59 岁的劳动年龄人口 8.76 亿人&#xff0c;占全国人口的比 重为 62.0…

AIGC令人惊叹,也令人害怕

编&#xff5c;Aeneas 源&#xff5c;新智元 ChatGPT诞生之后&#xff0c;用自己强悍的文本创作能力&#xff0c;不断刷新着我们的认知。AI即将给大学校园带来怎样的爆炸性改变&#xff1f;似乎还没人做好准备。Nature已经发文&#xff0c;担心ChatGPT会成为学生写论文的工具。…

这些你熟知的 app 和服务,都用上了人工智能

从微软在 Microsoft 365 服务中全面整合 GPT-4 能力 &#xff0c;让 PPT、Word 文档、Excel 表格的制作变成了「一句话的事」&#xff0c;到 Adobe 刚刚发布 Adobe Firefly模型集合&#xff0c;让图形设计、字体风格、视频渲染乃至 3D 建模的门槛显著降低——你我熟知的那些工…

CSDN上海城市开发者社区线下活动纪实

引言 5月27号中午&#xff0c;很高兴能和现CSDN副总裁、前微软 Azure 工程团队首席研发经理、技术畅销书《编程之美》及《构建之法》的作者邹欣邹老师&#xff0c;以及CSDN的 “上海城市开发者社区” 的部分成员齐聚一堂&#xff0c;参加CSDN上海城市开发者社区自5月初成立以来…

中国开发者薪酬集中在 20万-34万元、Vite 爆火、Angular 下行,最新 JavaScript 年度报告重磅发布!...

整理 | 苏宓 出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09; 诞生于世纪之交的 JavaScript&#xff0c;经历了 27 年的发展&#xff0c;已成为当今世界上最受开发者欢迎的编程语言之一。 近日&#xff0c;stateofjs.com 网站正式发布了《2022 年 JavaScript 年度调…

Voice Control for ChatGPT 沉浸式的与ChatGPT进行交流学习。

Voice Control for ChatGPT 日常生活中&#xff0c;我们与亲人朋友沟通交流一般都是喜欢语音的形式来完成的&#xff0c;毕竟相对于文字来说语音就不会显的那么的苍白无力&#xff0c;同时最大的好处就是能解放我们的双手吧&#xff0c;能更快实现两者间的对话&#xff0c;沟通…

语音识别之语音控制

接上文&#xff0c;如何实现语音控制呢&#xff1f;比如当我们说天气的时候&#xff0c;界面会自动呈现的天气预报的界面&#xff0c;当我们说UC的时候&#xff0c;会自动跳转到UC浏览器上等等。其实方法很简单&#xff0c;仅仅需要对识别到的字符串进行判断&#xff0c;当它符…

ChatGPT的焦虑蔓延,暴露了企业转型的关键要素

由美国OpenAI公司研发的聊天机器人程序ChatGPT&#xff0c;可以说是火遍了全网。据瑞银集团的报告显示&#xff0c;在ChatGPT推出仅两个月后&#xff0c;它在2023年1月末的月活用户已经突破了1亿&#xff0c;成为史上用户增长速度最快的消费级应用程序。根据Sensor Tower的数据…

如何获取ChatGPT的APIKEY

点击跳转官网&#xff0c;右上角个人中心查看key 进入后查看左侧API keys&#xff0c;点击生成即可 key已生成&#xff0c;即可调用API进行自主调用 API文档&#xff0c;点击查看 ChatGPT的API接口是基于OpenAI的GPT-3.5预训练模型&#xff0c;使用RESTful API架构和JSON格式进…