当前位置:   article > 正文

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

chatglm3 github

目录

一、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及以上版本。

安装过程
创建虚拟环境
  1. conda create -n chatglm3 python==3.10.6 -y
  2. conda activate chatglm3
安装ChatGLM3 依赖配套软件
  1. git clone https://github.com/THUDM/ChatGLM3
  2. cd ChatGLM3
  3. 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,然后通过如下方法加载模型:

  1. from utils import load_model_on_gpus
  2. 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 调用的示例代码为

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

五、功能测试

认识自己问题:你是谁

User: 你好

ChatGLM: 你好

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/260434
推荐阅读
相关标签