本地 CPU 环境部署 ChatGLM-6B 大模型与量化技术实践
在本地 CPU 环境下部署清华 ChatGLM-6B 大模型的完整流程。通过采用 INT4 量化技术降低显存占用,实现无需高性能显卡即可运行对话模型。内容涵盖环境配置、依赖安装、内核编译、代码适配及常见问题排查,帮助用户低成本体验大语言模型能力。

在本地 CPU 环境下部署清华 ChatGLM-6B 大模型的完整流程。通过采用 INT4 量化技术降低显存占用,实现无需高性能显卡即可运行对话模型。内容涵盖环境配置、依赖安装、内核编译、代码适配及常见问题排查,帮助用户低成本体验大语言模型能力。

ChatGLM-6B 是清华大学 KEG 实验室和智谱 AI 联合开发的一款开源中英双语对话模型。该模型基于 GLM(General Language Model)架构,拥有约 62 亿参数。相比于早期的 GLM-130B,ChatGLM-6B 在保持较强语言理解能力的同时,显著降低了资源需求,使得在消费级硬件上运行成为可能。
传统的 LLM 部署通常依赖高性能 GPU 以提供足够的显存和计算能力。然而,对于个人开发者或资源受限的场景,利用 CPU 进行推理并结合模型量化技术(如 INT4),可以在普通笔记本电脑甚至台式机 CPU 环境下流畅运行大模型。本文将详细介绍如何在本地 CPU 环境中部署 ChatGLM-6B 的 INT4 量化版本,实现无需显卡的智能对话功能。
确保已安装 Git、Python 和 pip。若使用 Windows 系统,还需安装 C++ 编译环境以编译量化内核。
由于 ChatGLM-6B 的量化内核包含 C++ 代码,需要本地编译器支持。推荐使用 MinGW-w64 或 Visual Studio Build Tools。
OpenMP 支持选项,否则后续编译会报错。gcc -v,若能显示版本信息则配置成功。通常系统自带 gcc 或 clang,若无则通过包管理器安装:
sudo apt-get install build-essential gcc g++
从官方 GitHub 仓库克隆代码,避免使用第三方镜像站以确保安全性。
git clone https://github.com/THUDM/ChatGLM-6B.git
cd ChatGLM-6B
进入项目目录,安装 requirements.txt 中列出的依赖。
pip install -r requirements.txt
注意:
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu为了在 CPU 上高效运行,我们需要下载 INT4 量化版本的模型权重。INT4 量化将浮点数参数压缩为 4 位整数,大幅降低内存占用。
访问 HuggingFace 下载页面获取模型文件: https://huggingface.co/THUDM/chatglm-6b-int4/tree/main
或者直接使用 transformers 库自动下载(需联网):
from transformers import AutoModel, AutoTokenizer
model = AutoModel.from_pretrained("THUDM/chatglm-6b-int4", trust_remote_code=True)
默认的 web_demo.py 是针对 GPU 优化的,需要修改为适配 CPU 和量化内核。
打开 web_demo.py 文件,找到模型加载部分,进行如下修改:
原 GPU 代码:
model = AutoModel.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True).half().cuda()
修改为 CPU 代码:
import torch
from transformers import AutoModel, AutoTokenizer
# 加载 INT4 量化模型
tokenizer = AutoTokenizer.from_pretrained("THUDM/chatglm-6b-int4", trust_remote_code=True)
model = AutoModel.from_pretrained("THUDM/chatglm-6b-int4", trust_remote_code=True).float()
# 强制在 CPU 上运行
model = model.cpu()
model.eval()
如果直接运行出现错误,提示找不到 .so 或 .dll 文件,说明量化内核未编译。需要手动编译 C++ 源文件。
在项目根目录下找到 quantization_kernels.c 和 quantization_kernels_parallel.c。
Linux/macOS 编译命令:
gcc -fPIC -pthread -fopenmp -std=c99 quantization_kernels.c -shared -o quantization_kernels.so
gcc -fPIC -pthread -fopenmp -std=c99 quantization_kernels_parallel.c -shared -o quantization_kernels_parallel.so
Windows 编译命令(MinGW):
gcc -fPIC -pthread -fopenmp -std=c99 quantization_kernels.c -shared -o quantization_kernels.dll
gcc -fPIC -pthread -fopenmp -std=c99 quantization_kernels_parallel.c -shared -o quantization_kernels_parallel.dll
编译成功后,会在目录下生成对应的动态链接库文件。如果 Python 代码中未自动加载,可手动指定路径:
model = model.quantize(bits=4, kernel_file="./quantization_kernels.so") # Linux
# model = model.quantize(bits=4, kernel_file="./quantization_kernels.dll") # Windows
完成上述步骤后,运行主程序启动本地服务。
python web_demo.py
终端输出类似 Running on local URL: http://127.0.0.1:7860 即表示服务启动成功。在浏览器中打开该地址即可开始对话。
在 CPU 环境下,INT4 量化模型的推理速度明显快于 FP16 全精度模型。具体速度取决于 CPU 核心数和单核性能。一般现代 i5/i7 处理器每秒可生成 10-30 个 token。
ChatGLM-6B 在中文语境下的表现优于许多同量级的英文模型。虽然其逻辑推理和代码生成能力略逊于 GPT-4 等顶级模型,但在日常问答、文本摘要、简单任务规划方面已达到较高水平,能够满足大部分个人辅助需求。
通过在本地 CPU 环境部署 ChatGLM-6B 量化模型,开发者可以低成本地体验大语言模型的能力,无需依赖昂贵的云端 API 或高端显卡。这不仅有助于学习大模型部署流程,也为隐私敏感型应用提供了可行的本地化解决方案。随着硬件算力的提升和量化技术的进步,未来本地运行更大参数的模型将成为常态。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online