GPT实战系列-ChatGLM3本地部署CUDA11+1080Ti+显卡24G实战方案

2023-11-07 02:44

本文主要是介绍GPT实战系列-ChatGLM3本地部署CUDA11+1080Ti+显卡24G实战方案,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

一、ChatGLM3 模型

二、资源需求

三、部署安装

配置环境

安装过程

低成本配置部署方案

四、启动 ChatGLM3

五、功能测试


新鲜出炉,国产 GPT 版本迭代更新啦~清华团队刚刚发布ChatGLM3,恰逢云栖大会前百川也发布Baichuan2-192K,一时间掀起的国产AI大模型又一阵热浪来袭。

随着两个公司融资到位,国内大模型研究和开源活动,进展更加如火如荼。目前有越来越多的公司和研究机构开始将他们的大模型开源,国内比较知名的就有阿里巴巴的通义大模型系列、华为的盘古大模型系列、腾讯的混元大模型系列等多家。但由于这些开源的大模型具有极高的参数量和计算量,需要大量的数据和算力支持,所以只有少数的大型科技公司和研究机构能够开发和维护这些大模型。

当然,大模型如何在小显存部署和使用也是非常重要,让AI的价值应用并延伸到更广泛的领域。本实战专栏继续关注小而美的大模型,将评估一系列的开源模型,尤其关注国产大模型,重点在于可私有化、轻量化部署,比如推理所需的GPU资源控制在24G显存内,2张Titan XP,或1080 Ti。

一、ChatGLM3 模型

10 月 27 日,智谱 AI 在 2023 中国计算机大会(CNCC)上发布自研第三代对话大模型 ChatGLM3,这是智谱 AI 在今年内第三次发布 ChatGLM 基座模型。智谱 AI 宣布为了进一步推动开源生态,将对包括 ChatGLM3-6B、ChatGLM3-6B-32K 以及 CogVLM-17B 和 AgentLM 在内的多个模型进行开源。

ChatGLM3-6B 是开源中英双语对话模型 ChatGLM-6B 的第三代版本,一经推出就迅速受到行业内的关注。基于最新的高效动态推理和显存优化技术,ChatGLM3-6B 依然是:

  1. 更强大:与 ChatGLM 二代模型相比,ChatGLM3 在 44 个中英文公开数据集测试中表现优异,在国内同尺寸模型中排名首位。评测结果显示,ChatGLM3 在 MMLU、CEval、GSM8K 和 BBH 等基准测试中均取得了显著的性能提升,分别提升了 36%、33%、179% 和 126%。得益于其独创的多阶段增强预训练方法,以及更丰富的训练数据以及更优的训练方案。

  2. 更完整: ChatGLM3-6B 采用了全新设计的 Prompt 格式,除正常的多轮对话外。同时原生支持工具调用(Function Call)、代码执行(Code Interpreter)和 Agent 任务等复杂场景。

  3. 更高效:ChatGLM3 还可手机部署的端侧模型 ChatGLM3-1.5B 和 3B,支持包括 vivo、小米、三星在内的多种手机以及车载平台,甚至支持移动平台上 CPU 芯片的推理,速度可达 20tokens/s。在精度方面,1.5B 和 3B 模型在公开 benchmark 上与 ChatGLM2-6B 模型性能接近。这一创新为自然语言处理应用在移动设备上的部署提供了便捷的方式,进一步拓展了自然语言处理技术的应用范围。

ChatGLM3 的语义和逻辑等各方面能力都得到大大增强:

  • 最引人注目的就是多模态理解能力的 CogVLM- 看图识语义功能,该功能在 10 余个国际标准图文评测数据集上取得 SOTA。

  • 代码增强模块 Code Interpreter 根据用户需求生成代码并执行,自动完成数据分析、文件处理等复杂任务;

  • 网络搜索增强 WebGLM- 接入搜索增强,能自动根据问题在互联网上查找相关资料并在回答时提供参考相关文献或文章链接。

  • ChatGLM3 目前已经具有了全新的 Agent 智能体能力,其集成了自研的 AgentTuning 技术,激活了模型智能代理能力。

  • 在智能规划和执行方面,ChatGLM3 相比 ChatGLM 二代提升了 1000%,这一技术开启了一种全新的模型智能体能力,使 ChatGLM3 能够在更多复杂场景中发挥出色表现。例如,ChatGLM3 能够原生支持工具调用、代码执行、游戏、数据库操作、知识图谱搜索与推理以及操作系统等复杂场景。

  • CogVLM 模型则提高了智谱清言的中文图文理解能力,取得了接近 GPT-4V 的图片理解能力。它可以回答各种类型的视觉问题,并且可以完成复杂的目标检测,并打上标签,完成自动数据标注。

  • 具有搜索增强能力,它可以帮助用户整理出相关问题的网上文献或文章链接,并整理出答案,这意味着智谱清言将为用户提供更好的自然语言处理服务。

ChatGLM在国产芯片支持方面也做了很多工作,自 2022 年初,ChatGLM 系列模型已支持在昇腾、神威超算、海光 DCU 架构上进行大规模预训练和推理,截至目前已支持 10 余种国产硬件生态,包括昇腾、神威超算、海光 DCU、海飞科、沐曦曦云、算能科技、天数智芯、寒武纪、摩尔线程、百度昆仑芯、灵汐科技、长城超云等。通过与国产芯片企业的联合创新,ChatGLM 系列模型性能不断优化,国产硬件生态也得到了大模型国产化的闭环。

二、资源需求

代码下载链接:

Github地址 git clone https://github.com/THUDM/ChatGLM3

模型文件类型及获取

ChatGLM3的6B中英对话模型,两个分为6B,6B-Base, 上下文长度8K。

ChatGLM3的6B-32k,上下文长度32K。

一共3种类型,可根据自身情况选择。模型获取途径见表格。

ModelSeq LengthDownload
ChatGLM3-6B8kHuggingFace | ModelScope
ChatGLM3-6B-Base8kHuggingFace | ModelScope
ChatGLM3-6B-32K32kHuggingFace | ModelScope

推理的GPU资源要求

简单测试样例的实际测试数据

量化等级生成 8192 长度的最小显存
FP1615.9 GB
INT811.1 GB
INT48.5 GB

对 ChatGLM3 进行加速的开源项目:

  • chatglm.cpp: 类似 llama.cpp 的量化加速推理方案,实现笔记本上实时对话

三、部署安装

配置环境

项目在本地普通设备,部署非量化版本。

显卡双显卡Nivdia Titan XP,每块12G, 共24G显卡

操作系统:ubuntu 20.04

python 3.10版本,推荐3.8以上版本

pytorch 2.01,推荐2.0及以上版本。

CUDA 12.0,驱动525,建议使用11.4及以上版本。

安装过程
创建虚拟环境
conda create -n chatglm3 python==3.10.6 -y
conda activate chatglm3
安装ChatGLM3 依赖配套软件
git clone https://github.com/THUDM/ChatGLM3
cd ChatGLM3
pip install -r requirements.txt -i https://mirror.sjtu.edu.cn/pypi/web/simple

其中 transformers 库版本推荐为 4.30.2torch 推荐使用 2.0 及以上的版本,以获得最佳的推理性能。

下载模型文件

推理所需的模型权重、源码、配置已发布在ModleScope 和 Hugging Face,见上面的下载链接。

代码会由 transformers 自动下载模型实现和参数。完整的模型实现在 Hugging Face Hub。

另外,模型权重比较大,如果你的网络环境较差,下载模型参数可能会花费较长时间甚至失败。国外网络不佳的,建议从国内的ModelScope下载,或者清华云下载手动下载。并将下载的文件替换到本地的 THUDM/ChatGLM3 目录下。加载本地模型时需要修改为模型的本地目录,如将以上代码中的 THUDM/ChatGLM3 替换为你本地的 ChatGLM3 文件夹的路径,即可从本地加载模型。

低成本配置部署方案
量化模型加载

默认情况下,模型以 FP16 精度加载,运行上述代码需要大概 16 GB 显存。

如果显存不足:

torch.cuda.OutOfMemoryError: CUDA out of memory.

如果 GPU 显存有限,可以尝试以量化方式加载模型,如INT8量化,使用方法如下:

model = AutoModel.from_pretrained("THUDM/chatglm3-6b",load_in_8bit=True,trust_remote_code=True).cuda()

模型量化会带来一定的性能损失,经过测试,ChatGLM2-6B 在 8-bit 量化下仍然能够进行自然流畅的生成。

多卡部署加载

如果有多张 GPU,但是每张 GPU 的显存大小都不足以容纳完整的模型,那么可以将模型切分在多张GPU上。首先安装 accelerate: pip install accelerate,然后通过如下方法加载模型:

from utils import load_model_on_gpus
model = load_model_on_gpus("THUDM/chatglm3-6b", num_gpus=2)

即可将模型部署到两张 GPU 上进行推理。你可以将 num_gpus 改为你希望使用的 GPU 数。默认是均匀切分的,你也可以传入 device_map 参数来自己指定。

CPU部署

如果没有 GPU 硬件的话,也可以在 CPU 上进行推理,但是推理速度会更慢。使用方法如下(需要大概 32GB 内存,及以上的内存)

model = AutoModel.from_pretrained("THUDM/chatglm3-6b", trust_remote_code=True).float()

如果内存不足的话,也可以使用量化后的模型

model = AutoModel.from_pretrained("THUDM/chatglm2-6b",load_in_8bit=True,trust_remote_code=True).float()

对 ChatGLM3 进行加速的开源项目:

chatglm.cpp: 类似 llama.cpp 的量化加速推理方案,实现笔记本上实时对话

在 cpu 上运行量化后的模型需要安装 gccopenmp。多数 Linux 发行版默认已安装。对于 Windows ,可在安装 TDM-GCC 时勾选 openmp。 Windows 测试环境 gcc 版本为 TDM-GCC 10.3.0, Linux 为 gcc 11.3.0

四、启动 ChatGLM3

命令行对话界面
python cli_demo.py

程序会在命令行中进行交互式的对话,在命令行中输入指示并回车即可生成回复,输入 clear 可以清空对话历史,输入 stop 终止程序。

网页demo
python web_demo.py

可以通过命令启动基于 Gradio 的网页版 demo,会在本地启动一个 web 服务,把控制台给出的地址放入浏览器即可访问。

还可以通过以下命令启动基于 Streamlit 的网页版 demo:

streamlit run web_demo2.py

网页版 demo 会运行一个 Web Server,并输出地址。在浏览器中打开输出的地址即可使用。 经测试,基于 Streamlit 的网页版 Demo 会更流畅。

API 部署

实现的 OpenAI 格式的流式 API 部署,可以作为任意基于 ChatGPT 的应用的后端。可以通过运行仓库中的openai_api.py 进行部署:

python openai_api.py

进行 API 调用的示例代码为

import openai
if __name__ == "__main__":openai.api_base = "http://localhost:8000/v1"openai.api_key = "none"for chunk in openai.ChatCompletion.create(model="chatglm3-6b",messages=[{"role": "user", "content": "你好"}],stream=True):if hasattr(chunk.choices[0].delta, "content"):print(chunk.choices[0].delta.content, end="", flush=True)

五、功能测试

认识自己问题:你是谁

User: 你好

ChatGLM: 你好👋!我是人工智能助手 ChatGLM3-6B,很高兴见到你,欢迎问我任何问题。 ​

User: 欧洲有哪些好玩的地方

ChatGLM: 欧洲地域辽阔,有很多好玩的地方。以下是一些建议你参观的欧洲旅游景点:

1. 法国:巴黎、艾菲尔铁塔、卢浮宫、里昂、马赛、香槟酒产区等。

2. 意大利:罗马、古罗马斗兽场、梵蒂冈、佛罗伦萨、威尼斯、那不勒斯等。

3. 英国:伦敦、大本钟、伦敦塔桥、泰晤士河、曼彻斯特、爱丁堡等。

4. 德国:柏林、柏林墙、柏林大教堂、科隆、慕尼黑等。

5. 西班牙:巴塞罗那、塞纳河、加泰罗尼亚平原、马德里、格拉纳达等。

6. 葡萄牙:里斯本、 Belem 热空气城堡、辛特拉等。

7. 荷兰:阿姆斯特丹、风车、哈莱姆、阿姆斯特丹市中心的运河等。

8. 挪威:奥斯陆、布里特维克、特罗姆瑟、尼德罗得等。

9. 瑞典:斯德哥尔摩、卡罗林斯卡AI、瑞典哥德堡等。

10. 芬兰:赫尔辛基、北极圈、芬兰湖、凯米等地。

以上只是欧洲众多旅游景点中的一部分,你还可以根据自己的兴趣和时间来选择其他地方进行旅行。 ​

User: 查查巴黎的天气怎么样

ChatGLM: 我无法实时查询天气,建议你查询当地的天气预报或者使用天气应用来获取最新的巴黎天气信息。

欣赏一下,让不同量化程度的ChatGLM写诗,看看各自能力如何


默认版本写的诗歌

默认,不加量化参数。

User:  帮忙写一篇散文诗,主题为扎根,终有一天,我们会变成参天大树
​
ChatGLM: 扎根大地,汲取营养,
在岁月的洗礼中,我们成长。
从嫩芽到枝干,从细弱到坚韧,
我们慢慢变成一棵参天大树。
​
我们的根深植土壤,
脉络纵横,吸收大地的养分。
我们的枝叶繁茂,
绿意盎然,为大地增添色彩。
​
风雨来了,我们挺住,
地震来了,我们屹立不倒。
我们就像一座山,
坚定地站立着,支撑着大地的重量。
​
终有一天,我们会变成参天大树,
我们的枝干粗壮,叶茂根深。
我们会成为大地的守护者,
为我们所热爱的土地提供庇护。
​
扎根,是一种信仰,
是一种坚持,是一种责任。
我们会不断地成长,
在时间的流逝中,变得更为坚定。
​
终有一天,我们会变成参天大树,
我们的影响力和价值,
将会被后人所铭记。
我们将永远根植于大地,
为大地带来生命的希望。

BF16量化版本

User:  帮忙写一篇散文诗,主题为扎根,终有一天,我们会变成参天大树
​
ChatGLM: 扎根大地,汲取养分,
岁月沧桑,时光荏苒,
我们的身躯,逐渐茁壮,
如同大地反抗风沙,顽强生命。
​
从小到大,我们陪伴着成长,
从嫩芽到枝干,从童真到成熟,
在生活的风雨中,我们坚毅前行,
无论多艰难,我们从不屈服。
​
终有一天,我们将变成参天大树,
我们的根系,深入土壤,
我们的枝叶,繁茂昌盛,
我们的力量,支持天空。
​
我们会陪伴着下一代成长,
我们的种子,传承着希望,
我们的根,始终扎根在大地,
我们的魂,始终连接着天空。
​
扎根,是一种信仰,是一种坚持,
是一种力量,是一种勇气,
我们会变成参天大树,坚定而伟岸,
我们的生命,将永远扎根在大地。

INT8量化版本写的诗**

User:  帮忙写一篇散文诗,主题为扎根,终有一天,我们会变成参天大树
​
ChatGLM: 扎根大地,汲取营养,
在岁月的长河里,我们成长。
从小到大,我们经历风雨,
从未退缩,从未畏惧,因为我们知道,
终有一天,我们会变成参天大树。
​
我们的根深扎大地,
吸收着阳光和雨露,
在肥沃的土壤里,茁壮成长。
我们努力地生长,
直到长成直冲云霄的大树,
为大地增添一抹绿色的生机。
​
参天大树,我们不仅仅是自然的奇迹,
更是生命的伟大见证。
我们的根深扎大地,
承载着无数的故事和希望,
如同大地的守护者,
永远屹立不倒。
​
我们会变成参天大树,
为我们所热爱的土地,
为我们所珍视的生活,
为我们所奋斗的目标,
提供坚定的支持和庇护。
​
终有一天,我们会变成参天大树,
成为大地上最耀眼的风景,
我们的根,我们的枝,
将共同构建一个美好的未来。

INT4版本写的诗

User:  帮忙写一篇散文诗,主题为扎根,终有一天,我们会变成参天大树
​
ChatGLM: 扎根 deep in the earth,
我们的根系 strong and steady.
像一棵大树,我们也要成长,
枝繁叶茂,成为栋梁之材。
​
在生活的土壤中,我们吸收营养,
在岁月的阳光里,我们茁壮成长。
风雨中,我们坚定地立定脚跟,
无论多高的天空,我们都能触及。
​
我们的根系,深入大地的深处,
吸收着生命的养分,一天天茁壮。
终有一天,我们会变成参天大树,
为这个世界,为人类,提供庇护和支撑。
​
像一棵大树,我们也要成长,
成为生活的见证,成为美好的象征。
我们的根系,深入大地的深处,
吸收着生命的养分,一天天茁壮。
​
终有一天,我们会变成参天大树,
为这个世界,为人类,提供庇护和支撑。

写诗可能还是比较简单,但也可以看出来量化后句子语义失真的情况

你喜欢哪个版本诗歌呢?喜欢打 1,不喜欢 打2

觉得有用 点个赞 + 收藏 吧

End


专栏文章:

GPT实战系列-ChatGLM2模型的微调训练参数解读

GPT实战系列-如何用自己数据微调ChatGLM2模型训练

GPT实战系列-ChatGLM2部署Ubuntu+Cuda11+显存24G实战方案

GPT实战系列-Baichuan2本地化部署实战方案

这篇关于GPT实战系列-ChatGLM3本地部署CUDA11+1080Ti+显卡24G实战方案的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/360728

相关文章

网页解析 lxml 库--实战

lxml库使用流程 lxml 是 Python 的第三方解析库,完全使用 Python 语言编写,它对 XPath表达式提供了良好的支 持,因此能够了高效地解析 HTML/XML 文档。本节讲解如何通过 lxml 库解析 HTML 文档。 pip install lxml lxm| 库提供了一个 etree 模块,该模块专门用来解析 HTML/XML 文档,下面来介绍一下 lxml 库

闲置电脑也能活出第二春?鲁大师AiNAS让你动动手指就能轻松部署

对于大多数人而言,在这个“数据爆炸”的时代或多或少都遇到过存储告急的情况,这使得“存储焦虑”不再是个别现象,而将会是随着软件的不断臃肿而越来越普遍的情况。从不少手机厂商都开始将存储上限提升至1TB可以见得,我们似乎正处在互联网信息飞速增长的阶段,对于存储的需求也将会不断扩大。对于苹果用户而言,这一问题愈发严峻,毕竟512GB和1TB版本的iPhone可不是人人都消费得起的,因此成熟的外置存储方案开

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

无人叉车3d激光slam多房间建图定位异常处理方案-墙体画线地图切分方案

墙体画线地图切分方案 针对问题:墙体两侧特征混淆误匹配,导致建图和定位偏差,表现为过门跳变、外月台走歪等 ·解决思路:预期的根治方案IGICP需要较长时间完成上线,先使用切分地图的工程化方案,即墙体两侧切分为不同地图,在某一侧只使用该侧地图进行定位 方案思路 切分原理:切分地图基于关键帧位置,而非点云。 理论基础:光照是直线的,一帧点云必定只能照射到墙的一侧,无法同时照到两侧实践考虑:关

性能分析之MySQL索引实战案例

文章目录 一、前言二、准备三、MySQL索引优化四、MySQL 索引知识回顾五、总结 一、前言 在上一讲性能工具之 JProfiler 简单登录案例分析实战中已经发现SQL没有建立索引问题,本文将一起从代码层去分析为什么没有建立索引? 开源ERP项目地址:https://gitee.com/jishenghua/JSH_ERP 二、准备 打开IDEA找到登录请求资源路径位置

高效+灵活,万博智云全球发布AWS无代理跨云容灾方案!

摘要 近日,万博智云推出了基于AWS的无代理跨云容灾解决方案,并与拉丁美洲,中东,亚洲的合作伙伴面向全球开展了联合发布。这一方案以AWS应用环境为基础,将HyperBDR平台的高效、灵活和成本效益优势与无代理功能相结合,为全球企业带来实现了更便捷、经济的数据保护。 一、全球联合发布 9月2日,万博智云CEO Michael Wong在线上平台发布AWS无代理跨云容灾解决方案的阐述视频,介绍了

阿里开源语音识别SenseVoiceWindows环境部署

SenseVoice介绍 SenseVoice 专注于高精度多语言语音识别、情感辨识和音频事件检测多语言识别: 采用超过 40 万小时数据训练,支持超过 50 种语言,识别效果上优于 Whisper 模型。富文本识别:具备优秀的情感识别,能够在测试数据上达到和超过目前最佳情感识别模型的效果。支持声音事件检测能力,支持音乐、掌声、笑声、哭声、咳嗽、喷嚏等多种常见人机交互事件进行检测。高效推

C#实战|大乐透选号器[6]:实现实时显示已选择的红蓝球数量

哈喽,你好啊,我是雷工。 关于大乐透选号器在前面已经记录了5篇笔记,这是第6篇; 接下来实现实时显示当前选中红球数量,蓝球数量; 以下为练习笔记。 01 效果演示 当选择和取消选择红球或蓝球时,在对应的位置显示实时已选择的红球、蓝球的数量; 02 标签名称 分别设置Label标签名称为:lblRedCount、lblBlueCount

Android平台播放RTSP流的几种方案探究(VLC VS ExoPlayer VS SmartPlayer)

技术背景 好多开发者需要遴选Android平台RTSP直播播放器的时候,不知道如何选的好,本文针对常用的方案,做个大概的说明: 1. 使用VLC for Android VLC Media Player(VLC多媒体播放器),最初命名为VideoLAN客户端,是VideoLAN品牌产品,是VideoLAN计划的多媒体播放器。它支持众多音频与视频解码器及文件格式,并支持DVD影音光盘,VCD影

科研绘图系列:R语言扩展物种堆积图(Extended Stacked Barplot)

介绍 R语言的扩展物种堆积图是一种数据可视化工具,它不仅展示了物种的堆积结果,还整合了不同样本分组之间的差异性分析结果。这种图形表示方法能够直观地比较不同物种在各个分组中的显著性差异,为研究者提供了一种有效的数据解读方式。 加载R包 knitr::opts_chunk$set(warning = F, message = F)library(tidyverse)library(phyl