Windows PC上从零开始部署ChatGML-6B-int4量化模型

embedded/2024/9/24 16:44:15/

引言

ChatGLM-6B是清华大学知识工程和数据挖掘小组(Knowledge Engineering Group (KEG) & Data Mining at Tsinghua University)发布的一个开源的对话机器人。6B表示这是ChatGLM模型的60亿参数的小规模版本,约60亿参数。

ChatGML-6B-int4量化模型是针对ChatGML-6B做的优化版本,占用更少的资源,以便个人电脑进行部署测试和使用。

大模型的部署一般需要GPU资源,而个人电脑一般都是Windows操作系统,且没有独立的GPU。那么大模型如何部署在只有CPU的Windows机器上呢?需要额外安装一个叫TDM-GCC的软件。

下面详细阐述ChatGML-6B-int4量化模型在Windows PC上的操作过程:

环境准备

ChatGML-6B-int4量化模型部署需要提供python运行环境、安装好Git版本管理工具和TDM-GCC软件。

1. 安装Anaconda

Anaconda是可以便捷获取包且对包能够进行管理,同时对环境可以统一管理的发行版本。Anaconda包含了conda、Python在内的超过180个科学包及其依赖项。

下载安装

Anaconda官方下载地址:https://www.anaconda.com/download/
下载之后,一路点击【next】,即可安装完成。

配置环境变量

在PC电脑的环境变量Path中增加Anaconda相关的环境变量。

E:\Anaconda 
E:\Anaconda\Scripts 
E:\Anaconda\Library\mingw-w64\bin
E:\Anaconda\Library\usr\bin 
E:\Anaconda\Library\bin

注意,其中E:\Anaconda改为Anaconda自己的安装根目录。

修改pip镜像源

修改pip安装软件的镜像源,可以加速依赖下载速度。

# 阿里源
pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/

2. 安装Git

Git Windows版本下载地址:https://git-scm.com/download/win
下载之后可以一路点击【next】即完成安装,通过如下命令查看版本信息:

git version

3. 安装TDM-GCC

TDM-GCC主要对模型一些C代码提供编译环境,下载地址:https://jmeubank.github.io/tdm-gcc/
下载之后可以一路点击【next】即完成安装。

模型部署

1. 下载模型源码并安装依赖

(1)在你的工作目录打开命令提示窗口,默认下载到当前目录

git clone https://github.com/THUDM/ChatGLM-6B

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

cd ChatGLM-6B

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

conda create -n VENV310 python=3.10

(4)激活环境

conda activate VENV310

(5)下载依赖包

pip install -r requirements.txt

本节指定的版本非常重要,否则会在下载依赖包环节出现各种问题。
本节操作目的主要是为下面的量化模型提供运行脚本和运行环境。

2. 下载量化模型

ChatGML-6B-int4量化模型下载比较麻烦,需要到huggingface网站下载,需要用到科学上网。网上说国内魔搭社区下载的模型代码不完整。

在huggingface上下载又有两种方式:通过Git下载和浏览器下载。

(1)Git下载方式:

git lfs install 
git clone https://huggingface.co/THUDM/chatglm-6b-int4

可以将该工程下载到chatGLM-6B目录下面。

(2)浏览器下载:
在浏览器打开https://huggingface.co/THUDM/chatglm-6b-int4/tree/main,将目录下的文件全部下载到如下目录:

chatGLM-6B/chatglm-6b-int4  #如果没有该目录则新建

3. 运行量化模型

模型运行脚本文件为:ChatGLM-6B\cli_demo.py,修改该文件的模型加载代码,改为加载chatglm-6b-int4量化模型。修改内容如下:

# tokenizer = AutoTokenizer.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True)
# model = AutoModel.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True).half().cuda()
tokenizer = AutoTokenizer.from_pretrained("chatglm-6b-int4", trust_remote_code=True)
model = AutoModel.from_pretrained("chatglm-6b-int4",trust_remote_code=True).float()

注意,量化模型目录chatglm-6b-int4一定要保证与当前文件在同一个父目录下。

运行出现的问题:

(1)在启动cli_demo的时候报错:No module named ‘readline’
解决方案:下载pyreadline3,在当前激活的虚拟环境中执行如下命令:

python -m pip install pyreadline

(2)在启动cli_demo的时候报错:AttributeError: module ‘collections’ has no attribute ‘Callable’
解决方案:这是pyreadline依赖包的文件py3k_compat.py有问题,需要修改依赖包的代码,把return isinstance(x, collections.Callable)改为 return isinstance(x, collections.abc.Callable)即可正常使用。

处理完上述问题之后,ChatGLM-6B\cli_demo.py该脚本可以正常运行,控制台会输出脚本内置问题的答案,由于电脑配置的问题,结果输出非常缓慢,且我的CPU使用率一直是100%,爆了!


http://www.ppmy.cn/embedded/40198.html

相关文章

各种行业里的副业项目,你适合哪一类

你希望在周末能够请自己吃一顿豪华大餐嘛?哈哈,但问题来了,自己的收入勉强够支付生活开销,不足以让自己有额外的消费,这样的生活小调调怎么满足呢,那就一起通过副业来实现吧! 面对五花八门的副业…

flask 模拟简单的登录功能(2)

通过设置 app.secret_key 进行用户登录验证 通过使用app.secret_key,可以对会话数据进行加密和解密,以确保会话数据的安全性。会话数据包括用户的登录状态、表单数据等敏感信息,通过设置 app.secret_key,可以防止会话被恶意篡改或…

如何设计一个可扩展、可维护、高性能的分布式系统?

设计一个可扩展、可维护、高性能的分布式系统是一个复杂的任务,需要考虑多个方面。以下是一些关键步骤和策略,可以帮助你设计一个满足这些需求的分布式系统: 需求分析: 明确系统的业务需求,包括吞吐量、响应时间、可用…

【JavaWeb】Day74.Spring——AOP进阶(连接点)

连接点 连接点可以简单理解为可以被AOP控制的方法。我们目标对象当中所有的方法不是都是可以被AOP控制的方法。而在SpringAOP当中,连接点又特指方法的执行。 在Spring中用JoinPoint抽象了连接点,用它可以获得方法执行时的相关信息,如目标类名…

安装Nox夜神模拟器关闭了HyperV后Docker运行不了怎么办?

1.背景 为了模拟真机,尝试安装了Nox夜神模拟器, 安装过程要求关闭Hyper-V。当时只是在程序安装卸载中关闭了系统服务。以为到时勾选上就好了。操作路径:控制面板\所有控制面板项\程序和功能\启用或关闭Windows功能\Hyper-V。 后来卸载掉了夜神…

【已解决】chrome/其他浏览器:你的连接不是私密连接

一、问题原因 这个问题一般是https的网址会有,它是安全的访问连接,在原来的基础上SSL/TLS协议进行加密和身份验证。 这里可能是证书过期了,其实 二、解决方法【亲测有效】 方法1:点击高级,如果有继续访问对应的http…

【qt】核心机制信号槽(下)

这里写目录标题 自定义的信号自定义的槽自定义的信号和槽的结合使用信号和槽的断开总结: 自定义的信号 信号就是一个函数声明 前面咱们都用的qt组件自带的信号,接下来我们自己写一个信号。 信号只需要在前面加一个signals即可 这个函数不需要实现 参数传…

.net 6.0 框架集成ef实战,步骤详解

一、代码框架搭建 搭建如下代码架构: 重点含EntityFrameworkCore工程,该工程中包含AppDbContext.cs和数据表实体AggregateObject 1、AppDbContext 代码案例 //AppDbContext 代码案例using Microsoft.EntityFrameworkCore;namespace EntityFrameworkCo…