Windows环境下搭建chatGLM-6B-int4量化版模型(图文详解-成果案例)

目录

一、ChatGLM-6B介绍

二、环境准备

1. 硬件环境

2. TDM-GCC安装

3.git安装

4.Anaconda安装

三、模型安装

1.下载ChatGLM-6b和环境准备

方式一:git命令

方式二:手动下载

2.下载预训练模型

方式一:在Hugging Face HUb下载(挂VPN访问,建议)

(1)git命令行下载:

 (2)手动下载

方式二:在魔塔社区下载(亲测速度快,不建议)

git命令行下载

 3.模型使用

1.命令行版:cli_demo.py

2.Web版本:(web_demo.py)

 3.API版本:api.py

四、遇到的问题

五、成果展示


一、ChatGLM-6B介绍

ChatGLM3 是智谱AI和清华大学 KEG 实验室联合发布的对话预训练模型。ChatGLM-6B 是一个开源的、支持中英双语的对话语言模型,基于 General Language Model (GLM) 架构,具有 62 亿参数。结合模型量化技术,用户可以在消费级的显卡上进行本地部署(INT4 量化级别下最低只需 6GB 显存)。 ChatGLM-6B 使用了和 ChatGPT 相似的技术,针对中文问答和对话进行了优化。经过约 1T 标识符的中英双语训练,辅以监督微调、反馈自助、人类反馈强化学习等技术的加持,62 亿参数的 ChatGLM-6B 已经能生成相当符合人类偏好的回答,更多信息请参考我们的博客。欢迎通过 chatglm.cn 体验更大规模的 ChatGLM 模型。

为了方便下游开发者针对自己的应用场景定制模型,同时实现了基于 P-Tuning v2 的高效参数微调方法 (使用指南) ,INT4 量化级别下最低只需 7GB 显存即可启动微调。

二、环境准备

1. 硬件环境

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

2. TDM-GCC安装

参考博客:Windows安装tdm-gcc并勾选openMP(详细图文)-CSDN博客

3.git安装

百度安装

4.Anaconda安装

超详细Anaconda安装教程-CSDN博客

三、模型安装

1.下载ChatGLM-6b和环境准备

下载地址:https://github.com/THUDM/chatglm-6B

从 Github 下载 ChatGLM-6B 仓库,然后进入仓库目录使用 pip 安装依赖,

其中 transformers 库版本推荐为 4.27.1,但理论上不低于 4.23.1 即可。

方式一:git命令

(1)在D盘打开命令提示窗口,默认下载到当前目录

git clone https://github.com/THUDM/ChatGLM3

(2)切换到chatGLM3目录

cd ChatGLM3

(3)创建conda的虚拟环境,指定Python的版本

conda create -n torch python=3.10

(4)激活环境

conda activate torch

(5)下载依赖包

pip install -r requirements.txt

方式二:手动下载

(1)在github地址:https://github.com/THUDM/chatglm-6B

 解压到你自己的目录

(2)切换到ChatGLM-6B目录

cd ChatGLM-6B

(3)创建conda的虚拟环境,指定Python的版本

conda create -n torch python=3.10

(4)激活环境

conda activate torch

(5)下载依赖包

pip install -r requirements.txt

2.下载预训练模型

方式一:在Hugging Face HUb下载(挂VPN访问,建议)
(1)git命令行下载:

从 Hugging Face Hub 下载模型需要先安装Git LFS ,若安装了Git LFS可在windows命令提示符中运行如下命令检查版本 git lfs --version

若存在Git LFS,则运行:

git lfs install 
git clone https://huggingface.co/THUDM/chatglm-6b
 (2)手动下载

访问地址:https://huggingface.co/THUDM/chatglm-6b-int4/tree/main

把下图中所有的文件下载之后,放在ChatGLM-6B的新建的model目录下。

方式二:在魔塔社区下载(亲测速度快,不建议)

注意:亲测不建议使用,因为它的目录文件不能及时和Hugging Face上的目录文件一致,会出现各种报错,因此后续作者在遇到问题的时候更换了下载方式。

git命令行下载

访问地址:魔搭社区

运行命令:

git clone https://www.modelscope.cn/ZhipuAI/chatglm-6b-int4.git

下载截图如下:

 3.模型使用

ChatGLM-6B 提供了三种使用方式:命令行 Demo,网页版 Demo 和 API 部署;在启动模型之前,需要找到对应启动方式的 python 源码文件,命令行模式(cli_demo.py),网页版(web_demo.py),API部署(api.py) 中修改代码。

ChatGLM-6B目录用到的文件:

1.命令行版:cli_demo.py

(1)修改cli_demo.py的代码,根据自己目录结构修改。

(2)运行

python cli_demo.py

注意:如果你没有 GPU 硬件的话,也可以在 CPU 上进行推理,但是推理速度会更慢。改加载模型为CPU部署,如果你的内存不足,可以直接加载量化后的模型:

# INT8 量化的模型将"THUDM/chatglm-6b-int4"改为"THUDM/chatglm-6b-int8"
model = AutoModel.from_pretrained("THUDM/chatglm-6b-int4",trust_remote_code=True).float()
2.Web版本:(web_demo.py

(1)安装 Gradio:

pip install gradio

(2)修改web_demo.py的代码

根据自己的训练模型位置更改代码。

(3)启动基于 Gradio 的网页版 demo

python web_demo.py

说明:程序会运行一个 Web Server,并输出地址。在浏览器中打开输出的地址即可使用。最新版 Demo 实现了打字机效果,速度体验大大提升。注意,由于国内 Gradio 的网络访问较为缓慢,启用 demo.queue().launch(share=True, inbrowser=True) 时所有网络会经过 Gradio 服务器转发,导致打字机体验大幅下降,现在默认启动方式已经改为 share=False,如有需要公网访问的需求,可以重新修改为 share=True 启动。

 3.API版本:api.py

开源模型 API 部署代码,可以作为任意基于 ChatGPT 的应用的后端。 目前,可以通过运行仓库中的 api_server.py 进行部署.

(1)安装额外的依赖 

pip install fastapi uvicorn

(2)修改api.py的代码

根据自己的训练模型位置更改代码

(3)启动API模型

python api.py

四、遇到的问题

问题一:在启动cli_demo的时候报错 No module named 'readline'

解决方法:下载pyreadline3

  1. pip: pip install pyreadline3 or python -m pip install pyreadline
  2. mamba: mamba install -c conda-forge pyreadline3
  3. conda: conda install -c conda-forge pyreadline3

作者采用的是pip install pyreadline3

问题二:

 not found in your environment: configuration_chatglm. Run `pip install configuration_chatglm`

 解决方法:重新下载预训练模型,不通过命令从modelScope下载,直接到hugging face找到对应chatglm-6b-int4手动下载全部文件。手动下载之后放到新建的model。之后记得修改web_demo.py、api.py、cli_demo.py对应的它们代码如图所示:

 后续在运行各个web_demo.、api.py、cli_demo.py,虽然有报错但是不影响运行。

问题三:FileNotFoundError: Could not find module 'nvcuda.dll' (or one of its dependencies). Try using the full path with constructor syntax.

解决方法:目前不影响程序正常运行,网上的方式:在下载好的chatglm-6B-int4中找到quantization.py,修改如下:

仍然报错:

Message: 'Failed to load cpm_kernels:'

Arguments: (NameError("name 'CPUKernel' is not defined"),)

 也不影响程序继续运行。

问题四:

FileNotFoundError: Could not find module 'C:\...\model\quantization_kernels_parallel.so' (or one of its dependencies). Try using the full path with constructor syntax.

解决方法:无影响可以运行 。

问题五:在运行web_demo.py的时候报错如下:

Traceback (most recent call last):
  File "D:\ChatGLM-6B\web_demo.py", line 85, in <module>
    user_input = gr.Textbox(show_label=False, placeholder="Input...", lines=10).style(
AttributeError: 'Textbox' object has no attribute 'style'. Did you mean: 'scale'?

解决方法:pip默认安装最新版本,降低版本即可。

卸载gradio

pip uninstall gradio

安装指定版本
pip install gradio==3.50.0

五、成果展示

1.命令行版:cli_demo.py

亲测:回复时间比较久,可能是与电脑的CPU硬件环境有关。

2.Web版:web_demo.py

3.API版:api.py

到此,部署ChatGLM-6B-int4结束。

参考:本地部署清华大模型 ChatGLM3-CSDN博客

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

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

相关文章

关于并发编程和并行

目录 前言: 并发编程: 1.并发编程的定义: 2. 并发编程的目的 2.1提高性能&#xff1a; 2.2增强响应性&#xff1a; 2.3资源利用&#xff1a; 3. 并发编程的实现方式 3.1多线程&#xff1a; 3.2多进程&#xff1a; 3.3异步编程&#xff1a; 3.4协程&#xff1a; 4. …

计算矩阵特征值和特征向量 numpy.linalg.eig()

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 计算矩阵特征值和特征向量 numpy.linalg.eig() [太阳]选择题 请问根据以下程序说法正确的是&#xff1a; import numpy as np A np.array([[1,2], [2,1]]) print("【显示】A:\n",A…

buuctf EasyBypass --不会编程的崽

buu后边的题有些确实难&#xff0c;有些其实也没那么复杂。昨天做一道异或绕过的题&#xff0c;现在还没看懂QAQ 先来一题简单的吧。哎&#xff0c;随缘更新吧 <?phphighlight_file(__FILE__);$comm1 $_GET[comm1]; $comm2 $_GET[comm2];if(preg_match("/\|\|\\|\…

lanqiao:合根植物

题目描述&#xff1a; 代码实现&#xff1a;

Matlab|【免费】基于合作博弈的综合能源系统利益分配优化调度

目录 主要内容 部分代码 结果一览 下载链接 主要内容 该程序实现的模型为综合能源系统利益分配优化调度&#xff0c;采用合作博弈方法&#xff0c;模型针对IES系统的P2G、电解槽、甲烷反应器、储氢罐、CHP和燃气锅炉等设备进行建模&#xff0c;实现基于合作博弈的…

【机器学习300问】28、什么是决策树?

〇、两个预测任务 &#xff08;1&#xff09;任务一&#xff1a;银行预测偿还能力 当前&#xff0c;某银行正致力于发掘潜在的放贷用户。他们掌握了每位用户的三个关键特征&#xff1a;房产状况、婚姻状况以及年收入。此外&#xff0c;银行还拥有过往这些用户的债务偿还能力的…

C++ 特殊的类设计

目录 1.请设计一个类&#xff0c;不能被拷贝 2. 请设计一个类&#xff0c;只能在堆上创建对象 3. 请设计一个类&#xff0c;只能在栈上创建对象 4. 请设计一个类&#xff0c;不能被继承 5. 请设计一个类&#xff0c;只能创建一个对象(单例模式) 1.请设计一个类&#xff0c;…

如何转行成为产品经理?

转行NPDP也是很合适的一条发展路径&#xff0c;之后从事新产品开发相关工作~ 一、什么是NPDP&#xff1f; NPDP 是产品经理国际资格认证&#xff0c;美国产品开发与管理协会&#xff08;PDMA&#xff09;发起的&#xff0c;是目前国际公认的唯一的新产品开发专业认证&#xff…

学术神器ChatGPT在论文分析中的妙用!

话语分析是一个广泛的研究领域&#xff0c;它关注的是人们在实际社会交际场景中使用的语言单位。话语分析旨在揭示语言、社会和文化之间的互动关系&#xff0c;以及话诺在构建意义、传递信息、维护社会关系和表达权力等方面的作用。话语分析包括对话分析、批判性话语分析、语篇…

AI安全白皮书 | “深度伪造”产业链调查以及四类防御措施

以下内容&#xff0c;摘编自顶象防御云业务安全情报中心正在制作的《“深度伪造”视频识别与防御白皮书》&#xff0c;对“深度伪造”感兴趣的网友&#xff0c;可在文章留言中写下邮箱&#xff0c;在该白皮书完成后&#xff0c;会为您免费寄送一份电子版。 “深度伪造”就是创建…

基于亚马逊云科技新功能:Amazon SageMaker Canvas 无代码机器学习—以构建货物的交付状态检测模型实战为例深度剖析以突显其特性

授权说明&#xff1a;本篇文章授权活动官方亚马逊云科技文章转发、改写权&#xff0c;包括不限于在亚马逊云科技开发者社区、 知乎、自媒体平台、第三方开发者媒体等亚马逊云科技官方渠道。 亚马逊云科技 2023 re:Invent 全球大会是亚马逊云科技举办的一场技术盛会&#xff0c;…

基于FPGA的PSRAM接口设计与实现

一 PSRAM与HyperRAM 1、概述 2、异同 待完善 二 PSRAM分析 1、特性 1、关键点 待完善 三 PSRAM方案设计与验证 待完善 1、整体方案设计 2、验证 仿真工具采用VCSVerdi&#xff0c;PSRAM接口控制IPAPS6408L model进行验证。 四 结论 备注&#xff1a;以AP公司的APS6408L…

深入理解与应用Keepalive机制

目录 引言 一、VRRP协议 &#xff08;一&#xff09;VRRP概述 1.诞生背景 2.基本理论 &#xff08;二&#xff09;VRRP工作原理 &#xff08;三&#xff09;VRRP相关术语 二、keepalive基本理论 &#xff08;一&#xff09;基本性能 &#xff08;二&#xff09;实现原…

异地组网需要几个固定IP?

异地组网指的是在不同地区的终端设备之间建立起稳定的网络连接&#xff0c;以实现信息的远程传输和通信。在进行异地组网时&#xff0c;需要固定IP地址来确保网络连接的稳定性和可靠性。本文将介绍异地组网的基本概念和必要性&#xff0c;并探讨在这一过程中需要使用的固定IP的…

16-Java命令模式 ( Command Pattern )

Java命令模式 摘要实现范例 命令模式&#xff08;Command Pattern&#xff09;中请求以命令的形式包裹在对象中&#xff0c;并传给调用对象 调用对象寻找可以处理该命令的合适的对象&#xff0c;并把该命令传给相应的对象&#xff0c;该对象执行命令 命令模式是行为型模式&…

接收端编程、UDP编程练习、wireshrak抓包工具、UDP包头

我要成为嵌入式高手之3月6日Linux高编第十六天&#xff01;&#xff01; ———————————————————————————— 学习笔记 接收端 recvfrom #include <sys/types.h> #include <sys/socket.h> ssize_t recvfrom(int sockfd, void *buf, si…

java SSM流浪宠物救助与领养myeclipse开发mysql数据库springMVC模式java编程计算机网页设计

一、源码特点 java SSM流浪宠物救助与领养管理系统是一套完善的web设计系统&#xff08;系统采用SSM框架进行设计开发&#xff0c;springspringMVCmybatis&#xff09;&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系…

Python 过滤函数filter()详解

一、过滤函数定义 它用于对容器中的元素进行过滤处理。 二、 过滤函数语法 filter(function,iterable) 参数function&#xff1a;提供过滤条件的函数&#xff0c;返回布尔型 参数iterable: 容器类型数据 三、过滤函数的应用场景 1、筛选符合条件的元素 需求&#xff1a;在列表…

【MySQL】not in遇上null的坑

今天遇到一个问题&#xff1a; 1、当 in 内的字段包含 null 的时候&#xff0c;正常过滤&#xff1b; 2、当 not in 内的字段包含 null 的时候&#xff0c;不能正常过滤&#xff0c;即使满足条件&#xff0c;最终结果也为 空。 测试如下&#xff1a; select * from emp e;当…

根据标签出现的频次渲染不同大小的圆和文字,圆随机摆放且相互之间不重叠

效果图&#xff1a; 按每个标签出现的频次大小渲染出不同比例大小的圆&#xff0c;渲染的圆的宽度区间为 [40, 160] &#xff0c;其中的文字的大小区间为 [12, 30] &#xff0c;圆的位置随机摆放且不重叠。 根据已知条件可得出&#xff0c;标签中频次最高的对应圆的宽度(直径…