清华 ChatGLM-6B 中文对话模型部署简易教程

本文目录

  • 一、前言
  • 二、下载
  • 三、部署
    • 3.1 配置环境
    • 3.2 启动 demo 程序
      • 3.2.1 启动 cli_demo.py
      • 3.2.2 启动 web_demo.py
  • 四、【最新】ChatGLM-6B-int4 版本教程
    • 4.1 下载
    • 4.2 配置环境
    • 4.3 启动 demo 程序
  • 五、华为 CodeLab 免费 GPU 平台部署 ChatGLM-6B-int4(CPU版)
    • 5.1 前言
    • 5.2 在 CodeLab 上使用 CPU 部署
    • 5.3 提示
  • 六、小结

一、前言

近期,清华开源了其中文对话大模型的小参数量版本 ChatGLM-6B(GitHub地址:https://github.com/THUDM/ChatGLM-6B)。其不仅可以单卡部署在个人电脑上,甚至 INT4 量化还可以最低部署到 6G 显存的电脑上,当然 CPU 也可以。
随着大语言模型的通用对话热潮展开,庞大的参数量也使得这些模型只能在大公司自己平台上在线部署或者提供 api 接口。所以 ChatGLM-6B 的开源和部署在个人电脑上,都具有重要的意义。
博主测试后发现,对比 huggingface 上其他同参数量的模型来说,ChatGLM-6B 的效果已经是很好的了,更何况它还有 130B 的版本,官网说明(官方博客:https://chatglm.cn/blog)是优于 GPT-3.5 效果的(130B 版本正在内测,博主没有拿到测试资格,所以无法确认)。所以把 ChatGLM-6B 部署在个人电脑或者服务器上还是很好玩的,这个参数量还要什么自行车。

【最新更新】ChatGLM-6B 在 2023/03/19 更新增加了量化后的 INT4 模型,官方直接针对性的量化模型后提供下载。对比原版自己设置量化效果好一些,而且模型大小只有 4G,极大地加快了下载速度。 对于只有 CPU 或者只有 6G 显存的同学,可以直接选择量化后的模型下载和部署,本文单独更新了 ChatGLM-6B-int4 版本的部署教程,在第四章,需要部署的可以直接跳转到第四章,忽略前面的内容。huggingface 地址:https://huggingface.co/THUDM/chatglm-6b-int4

二、下载

  1. 模型文件需要在 huggingface 上进行下载:https://huggingface.co/THUDM/chatglm-6b
    点击【Files and versions】即可下载文件。建议下载到一个新建文件夹中,如大文件夹是 ChatGLM,把模型文件放到 model 文件夹里,整体结构就是 … /ChatGLM/model
  2. 如果模型文件(大于 1G 的)下载速度慢,可以在国内源中单独下载这几个模型文件(其他这个源没有的文件还是需要在 huggingface 上下载):https://cloud.tsinghua.edu.cn/d/fb9f16d6dc8f482596c2/
  3. 下载完成之后确保下图这些文件都在模型文件夹下(例如存放在 … /ChatGLM/model 下):在这里插入图片描述
  4. 到 GitHub 中下载其他环境配置文件和 demo 程序代码。GitHub 地址:https://github.com/THUDM/ChatGLM-6B。下载到 …/ChatGLM/ 这个目录下即可。

三、部署

把模型部署在本地,需要在 Python 环境下安装影响的库,此外还需要针对 GPU 安装相应版本的 cuda 和对应的 Pytorch。之后修改 demo 文件就可以启动运行了。

3.1 配置环境

  1. 安装自己 GPU 对应的 cuda,这个网上教程很多,不再赘述。(如果只有 cpu,则跳过该步骤)
  2. 根据上一步安装的 cuda 版本,下载安装对应版本的 pytorch,网上也有很多教程。(如果只有 cpu,也需要安装 cpu 版的 pytorch)
  3. 上述两步完成后,在 …/ChatGLM/ 目录下打开命令行终端,输入
    pip install -r requirements.txt
    按回车后,pip 就自动下载和安装相关依赖库了。

上述三个步骤完成后,部署的环境就搭建完成了。下面仅需要稍微修改 demo 的代码,或者自己根据 demo 编写程序,就可以开始使用 ChatGLM-6B 了!

3.2 启动 demo 程序

…/ChatGLM/ 目录下有两个 demo 代码:(1)cli_demo.py,直接在命令行中输入进行问答;(2)web_demo.py,利用 gradio 库生成问答网页。

第一个 demo 方便,还可以清除历史记录,但是在命令行(尤其是 Linux 命令行)中容易输入一些奇怪的字符,这会使得程序意外停止;第二个 demo 界面简单,但是不能清除记录,而且如果在没有图形界面的 Linux 系统服务器中使用,需要端口映射到本地电脑,再打开浏览器访问。个人建议,如果有能力,可以自己综合二者的有点自己编写,比如使用 jupyter 就可以很好结合二者,还可以以 markdown 渲染输出,使得代码或者公式更好看。

3.2.1 启动 cli_demo.py

  1. 修改模型路径。编辑 cli_demo.py 代码,修改 5、6 行的模型文件夹路径,将原始的 “THUDM/ChatGLM-6B” 替换为 “model” 即可。
  2. 修改量化版本。如果你的显存大于 14G,则无需量化可以跳过此步骤。如果你的显存只有 6G 或 10G,则需要在第 6 行代码上添加 quantize(4)quantize(8) ,如下:
# 6G 显存可以 4 bit 量化
model = AutoModel.from_pretrained("model", trust_remote_code=True).half().quantize(4).cuda()

# 10G 显存可以 8 bit 量化
model = AutoModel.from_pretrained("model", trust_remote_code=True).half().quantize(8).cuda()
  1. 执行 python 文件即可,可以在命令行终端输入:
    python cli_demo.py
    即可启动 demo,开始使用了!

3.2.2 启动 web_demo.py

  1. 安装 gradio 库,在 ChatGLM 目录下打开命令行终端,输入:
    pip install gradio
    即可安装 demo 所需要的库。
  2. 修改模型路径。编辑 web_demo.py 代码,修改 4、5 行的模型文件夹路径,将原始的 “THUDM/ChatGLM-6B” 替换为 “model” 即可。
  3. 修改量化版本。如果你的显存大于 14G,则无需量化可以跳过此步骤。如果你的显存只有 6G 或 10G,则需要在第 5 行代码上添加 quantize(4)quantize(8) ,如下:
# 6G 显存可以 4 bit 量化
model = AutoModel.from_pretrained("model", trust_remote_code=True).half().quantize(4).cuda()

# 10G 显存可以 8 bit 量化
model = AutoModel.from_pretrained("model", trust_remote_code=True).half().quantize(8).cuda()
  1. 执行 python 文件即可,可以在命令行终端输入:
    python web_demo.py
    即可启动 demo,开始使用了!

四、【最新】ChatGLM-6B-int4 版本教程

ChatGLM-6B-INT4 是 ChatGLM-6B 量化后的模型权重。具体的,ChatGLM-6B-INT4 对 ChatGLM-6B 中的 28 个 GLM Block 进行了 INT4 量化,没有对 Embedding 和 LM Head 进行量化。量化后的模型理论上 6G 显存(使用 CPU 即内存) 即可推理,具有在 嵌入式设备(如树莓派)上运行的可能。

4.1 下载

  1. 打开 ChatGLM-6B 的 GitHub 页面(https://github.com/THUDM/ChatGLM-6B),下载所有文件到文件夹 …/ChatGLM/ 下。
  2. …/ChatGLM/ 下新建文件夹 …/ChatGLM/model 。打开 huggingface 页面(https://huggingface.co/THUDM/chatglm-6b-int4/tree/main),下载 ChatGLM-6B-int4 的 int4 量化过的模型,把所有模型文件下载到 …/model 目录下。
  3. 至此所有文件下载完毕,大文件夹 …/ChatGLM/ 下有 demo 和配置环境的相关代码,且包含小文件夹 …/ChatGLM/modelmodel 文件夹内存放模型相关文件。

4.2 配置环境

  1. 如果没有 6G 显存,需要使用 CPU 运行,模型会根据硬件自动编译 CPU Kernel ,请确保已安装 GCC 和 OpenMP (Linux一般已安装,对于Windows则需手动安装),以获得最佳并行计算能力。
  2. 如果有 6G 显存,则需要安装与显卡版本对应的 cuda,之后再安装与 cuda 版本对应的 pytorch。网上有很多安装 cuda 和 pytorch 的教程,这里不在赘述。(使用 CPU 运行的同学跳过步骤 2)
  3. 安装相关依赖,在 …/ChatGLM/ 目录下打开命令行终端,输入
    pip install -r requirements.txt
    按回车后,pip 就自动下载和安装相关依赖库了。

4.3 启动 demo 程序

本节内容与 3.2 节内容基本相同,参考 3.2 节的部分内容即可,这里不再赘述。请注意:↓↓↓
与 3.2 节不同的是,3.2.1 的步骤 2 和 3.2.2 的步骤 3 直接忽略即可,因为模型已经量化过,不需要重复量化。

五、华为 CodeLab 免费 GPU 平台部署 ChatGLM-6B-int4(CPU版)

5.1 前言

虽然 ChatGLM-6B-int4 模型只需要 6G 内存或显存,但是可能对一些想尝试的同学还是有一定困难。所以这里推荐华为云 ModelArts 平台下的 CodeLab,类似于谷歌的 colab,提供免费的最高 64G 内存 + 16G 显存。在这里插入图片描述

5.2 在 CodeLab 上使用 CPU 部署

  1. 打开 ModelArts 控制台页面,注册账号并登陆。网址:https://console.huaweicloud.com/modelarts/?region=cn-north-4#/dashboard

  2. 找到控制台页面【总览】下方的【开发工具】,点击 CodeLab 下方的【立即体验】。随后会跳转到 CodeLab 页面并开始加载资源。在这里插入图片描述

  3. 导入 ChatGLM-6B 相关代码文件:在加载好的 CodeLab 上方点击【Git】-【Clone a Repository】,在弹出的窗口中输入 https://github.com/THUDM/ChatGLM-6B.git,则 demo 等代码文件就克隆到 CodeLab 了。可以看到在左侧文件管理中多出了 ChatGLM-6B 的文件夹。

  4. 下载 ChatGLM-6B-int4 模型:打开 Huggingface 模型文件页面(https://huggingface.co/THUDM/chatglm-6b-int4/tree/main),分别复制每个文件的下载地址,在 ChatGLM-6B 文件夹下新建 model 文件夹,利用 wget 下载地址 在命令行终端分别把模型文件下载到 model 文件夹中。

  5. 安装相关依赖:命令行中输入指令 pip install protobuf==3.20.0 transformers==4.26.1 icetk cpm_kernels ,即可完成安装。

  6. 运行 demo 代码:双击打开编辑 ChatGLM-6B 文件夹下的 cli_demo.py 文件,把第 5、6 行改为如下形式:

tokenizer = AutoTokenizer.from_pretrained("model", trust_remote_code=True)
model = AutoModel.from_pretrained("model", trust_remote_code=True).float()

随后,在 ChatGLM-6B 下命令行输入 python cli_demo.py 即可运行 demo 程序。

5.3 提示

  1. CodeLab 每过一个小时需要确认一次,否则会停止运行;
  2. CodeLab 每三天需要使用一次,否则资源会被回收,需要重新部署;
  3. 本案例为部署 CPU 进行模型推理,生成速度较慢;大家可以尝试安装 GPU 版 pytorch 进行部署,我尝试的 GPU 版本多多少少有各种问题,所以只出了 CPU 版教程。也希望有 GPU 部署成功的可以留言讨论学习一下;
  4. 上一节步骤 4 下载模型文件可以进一步优化,比如直接在 demo 代码默认 HuggingFace 下载,但是博主这里失败了;
  5. CodeLab 还有其他要求或者文件的重置说明,请自行查阅。

六、小结

经过一段时间对 ChatGLM-6B、文心一言和 ChatGPT 的使用后,前二者在文字对话上与 ChatGPT 差距已经不大了,在代码生成能力上还有一定差距,但是都好过 GPT-3.5。
文心一言在大部分情况下比 ChatGLM-6B 好一些,不过要注意 ChatGLM-6B 只有 60 亿参数,而且可以单卡部署,这已经是很大的进步了,所以我对 ChatGLM 的发展还是非常看好的,官方也说过除了 int4 量化,还会进一步压缩模型。
总的来说,ChatGLM-6B 在同参数量下可以碾压其他对话模型,而且可以部署到个人电脑上,或者用华为的免费 GPU。通过几天的体验,ChatGLM-6B 是对话模型里非常让人惊喜的了,所以推荐大家可以部署玩玩。甚至可以考虑给嵌入式设备部署一波,也期待官方的进一步极致压缩!
最后也祝 ChatGLM 和 文心一言可以进一步加油,最近的体验也感受到官方每天的更新和进步了,说明态度还是非常积极的。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

RabbitMQ消息的可靠性

RabbitMQ消息的可靠性 一 生产者的可靠性 生产者重试 有时候由于网络问题,会出现连接MQ失败的情况,可以配置重连机制 注意:SpringAMQP的重试机制是阻塞式的,重试等待的时候,当前线程会等待。 spring:rabbitmq:conne…

Blowfish在线加密解密调试校验工具

具体请前往:在线Blowfish加密解密工具

java游戏制作-拼图游戏

一.制作主界面 首先创建一个Java项目命名为puzzlegame。 再在src中创建一个包,用来制作主界面 代码: 结果: 二.设置界面 代码: 三.初始化界面 代码: 优化代码: 结果: 四.添加图片 先在Java项…

二叉搜索树的最近公共祖先

235. 二叉搜索树的最近公共祖先 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大&…

网络协议入门 笔记一

一、服务器和客户端及java的概念 JVM (Java Virtual Machine) : Java虚拟机,Java的跨平台:一次编译,到处运行,编译生成跟平台无关的字节码文件 (class文件),由对应平台的JVM解析字节码为机器指令 (010101)。 如下图所示&#xff0…

lv11 嵌入式开发 ARM指令集中(汇编指令集) 6

目录 1.指令 1.1 数据处理指令:数学运算、逻辑运算 1.1.1数据搬移指令MOV 、MVN 1.1.2立即数 1.1.3 加法指令 1.1.4 减法指令 1.1.5 逆向减法指令 1.1.6 乘法指令 1.1.7 与、或、非、异或、左移、右移指令 1.1.8 位清零指令 1.1.9 格式扩展 1.1.10 数据运算指令对条件位…

Ubuntu20.0中安装Gradle

下载Gradle到temp文件夹 wget https://services.gradle.org/distributions/gradle-8.3-bin.zip -P /tmp 然后解压文件到/opt/gradle目录 sudo unzip -d /opt/gradle /tmp/gradle-8.3.zip 配置Gradle环境变量 接下来我们会创建一个gradle.sh文件来保存Gradle的环境变量 sudo…

文心一言 VS 讯飞星火 VS chatgpt (138)-- 算法导论11.4 2题

二、用go语言,试写出HASH-DELETE 的伪代码;修改 HASH-INSERT,使之能处理特殊值DELETED。 文心一言: 首先,让我们定义一个基本的哈希表数据结构。这个结构将包括一个存储键值对的哈希表和一个存储已删除键值对的队列。我们可以用…

RobotFramework进阶之自定义的python模块(十四)

引言 RobotFramework自动化框架(以下简称RF)之前文章我们讲了通过import第三方的library(RequestsLibrary等),在实际项目中第三方的包并不能满足我们的需要,此时我们可自己编写python模块(.py文…

穷举法、回溯法、分支界限法解决旅行商(TSP)问题

文章目录 一、问题描述二、穷举法解决2.1 介绍2.2 代码 三、回溯法解决四、分支界限法4.1 介绍4.2 代码 一、问题描述 有一个旅行商由某城市出发,经过所有给定的 n n n 个城市后,再回到出发的城市。除了出发的城市外,其它城市只经过一回。这…

2018年计网408

第33题 下列 TCP/P应用层协议中, 可以使用传输层无连接服务的是()A. FTPB. DNSC. SMTPD. HTTP 本题考察TCP/IP体系结构中,应用层常用协议所使用的运输层服务。 如图所示。这是TCP/IP体系结构中常见应用层协议各自所使用的运输层端口,。在这些应用层协议中&#x…

Java Web 实战 20 - HTTP PK HTTPS ? HTTPS 大获全胜 ?

HTTP VS HTTPS 一 . HTTPS1.1 臭名昭著的运营商劫持1.2 加密是什么 ?1.3 HTTPS 的加密过程对称加密非对称加密引入 "证书" 机制 1.4 HTTP VS HTTPS Hello , 大家好 , 好久没有更新 JavaWeb 模块的内容了 . 博主这篇文章主要给大家讲解一下 HTTPS 以及与 HTTP 的区别…

吐血整理,金融银行测试的“火“到底在哪里?银行测试真正实施...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 银行里的软件测试…

许多网友可能还不知道,升级到Windows 11其实没那么复杂,只要符合几个条件可以了

如果你的Windows 10电脑可以升级Windows 11,现在怎么办?有几种方法可以免费安装新的操作系统。以下是你的选择。 如果你想升级到Windows 11,你可以随时购买一台已经安装了操作系统的新电脑。然而,如果你目前的Windows 10 PC满足所有必要的升级要求,那么在Windows 11免费的…

3.6-Dockerfile语法梳理及最佳实践

WORKDIR是设置当前docker的工作目录 ADD 和 COPY 为了将本地的一些文件添加到docker image里面,ADD 和 COPY的作用特别像,但是ADD 和 COPY还有一些区别,ADD不仅可以添加本地文件到docker里面,还可以将文件在添加到docker image里面…

AIRLOOK与商汤科技强强联合,打造“实景三维与AI大模型”结合的全新盛宴

实景三维中国建设作为数字中国建设的重要内容之一,是一项涉及多方面技术支撑的综合性工程,同时作为AI技术在其中发挥着至关重要的作用,AI大模型的发展也将进一步推动实景三维建模技术的创新和发展。在此背景下,AIRLOOK与商汤科技携…

七、文件包含漏洞

一、文件包含漏洞 解释:文件包含漏洞是一种注入型漏洞,其本质就是输入一段用户能够控制的脚本或者代码,并让服务端执行;其还能够使得服务器上的源代码被读取,在PHP里面我们把可重复使用的函数写入到单个文件中&#x…

Java Swing商品信息查询系统

内容要求 1) 本次程序设计是专门针对 Java 课程的,要求使用 Java 语言进行具有一定代码量的程序开发。程序的设计要结合一定的算法,在进行代码编写前要能够设计好自己的算法。 2)本次程序设计涉及到 Java 的基本语法,即课堂上所…

宠物信息服务预约小程序的效果如何

宠物的作用越来越重要,因此铲屎官们对自己爱宠的照顾也是加倍提升,而市场围绕宠物展开的细分服务近些年来逐渐增多,且市场规模快速增长。涉及之广,涵盖宠物衣食住行、医疗、美容、婚丧嫁娶等,各品牌争相抢夺客户及抢占…

Mysql之单行函数

Mysql之单行函数 单行函数数值类型函数字符串类型的函数日期和时间函数加密与解密函数信息函数 单行函数 函数的定义 函数在计算机语言的使用中贯穿始终,函数的作用是什么呢?它可以把我们经常使用的代码封装起来, 需要的时候直接调用即可。这…