🎯 本文目标:在PC上搭建chatglm.cpp推理环境,这是专为GLM系列模型优化的推理框架,在星睿O6上运行时内存使用更高效,对话体验更流畅。
经过查阅资料和深入学习,在星睿O6开发板上成功部署了智谱AI系列大模型,包括文本生成大模型、视觉大模型,以及代码生成大模型。
在学习研究的过程中,我做了详细的笔记,经过整理,成为本系列文章,分享给大家。
通过本系列文章,您将了解到:
第一阶段:开发环境准备
- 第一篇:星睿O6与智谱AI大模型概览
- 第二篇:在PC上搭建llama.cpp推理环境
- 第三篇:在PC上搭建chatglm.cpp推理环境
第二阶段:环境迁移与部署
- 第四篇:将llama.cpp环境部署至星睿O6
- 第五篇:将chatglm.cpp环境部署至星睿O6
第三阶段:大模型实战运行
- 第六篇:在星睿O6上运行智谱AI文本大模型(基于llama.cpp)
- 第七篇:在星睿O6上运行智谱AI文本大模型(基于chatglm.cpp)
- 第八篇:在星睿O6上运行智谱AI视觉大模型
- 第九篇:为llama.cpp与chatglm.cpp部署Web服务与OpenAI兼容API
第四阶段:专项能力扩展
- 第十篇:在星睿O6上部署CodeGeeX2实现智能代码生成
本文是第三篇:在PC上搭建chatglm.cpp推理环境
chatglm.cpp是ChatGLM-6B、ChatGLM2-6B、ChatGLM3 和 GLM4(V) 的 C++ 运行环境,对GLM系列模型做了专门的优化。
🔧 技术特点概述
chatglm.cpp的核心优势:
- 专为大语言模型设计:基于 ggml 的纯 C++ 实现,其工作方式与 llama.cpp 相同
- 高效的量化技术:采用 int4/int8 量化、优化的 KV 缓存和并行计算,加速内存高效的 CPU 推理
- 微调支持:支持 P-Tuning v2 和 LoRA 微调模型
- 流畅的交互体验:具有打字机效果的流式生成
- 丰富的接口:Python 绑定、Web 演示、API 服务器以及更多功能
支持的模型矩阵:
- 硬件平台:x86/arm CPU、NVIDIA GPU、Apple Silicon GPU
- 操作系统:Linux、MacOS、Windows
- 模型版本:ChatGLM-6B、ChatGLM2-6B、ChatGLM3、GLM-4 (V)、CodeGeeX2
⚖️ 与llama.cpp的对比
为什么需要两个框架?
chatglm.cpp优势:
- 专门为GLM系列优化,推理效率更高
- 对话体验更流畅,符合中文对话习惯
- 内存使用更优化,特别是对GLM架构
llama.cpp优势:
- 社区生态更活跃,模型支持更广泛
- 工具链更完善,转换工具丰富
- 多模态支持更成熟
在PC上安装chatglm.cpp,用于将模型从hf格式转换到ggml格式。
🔧 基础环境构建
# 工作目录
mkdir -p /data/home/honestqiao/Projects/orion-o6/
cd /data/home/honestqiao/Projects/orion-o6/
# git工具
sudo apt install git-lfs
# 设置pip安装源为国内源,加快安装速度
mkdir ~/.pip
nano ~/.pip/pip.conf
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
timeout = 10
trusted-host = pypi.tuna.tsinghua.edu.cn
# 安装Miniforge3
wget https://github.com/conda-forge/miniforge/releases/download/25.11.0-1/Miniforge3-Linux-x86_64.sh
bash Miniforge3-Linux-x86_64.sh
# 配置生效
source ~/.bashrc
# 创建chatglm.cpp虚拟环境
conda create -n chatglm.cpp python=3.11
conda activate chatglm.cpp环境隔离策略:
- 与llama.cpp使用不同的虚拟环境,避免依赖冲突
- chatglm.cpp对Python版本要求相对宽松,3.11版本兼容性良好
📥 源码下载
# 加速方式1:
# 如果不能正常访问github.com,需要设置代理
# 设置代理
# git config --global http.proxy http://192.168.1.100:8080
# git config --global https.proxy http://192.168.1.100:8080
# 取消代理
# git config --global --unset http.proxy
# git config --global --unset https.proxy
git clone --recursive https://github.com/li-plus/chatglm.cpp.git
# 加速方式2:【优先考虑】
# 不设置访问代理,使用加速服务 https://ghfast.top/
git clone --recursive https://ghfast.top/https://github.com/li-plus/chatglm.cpp.git
# 设置文件忽略
cd chatglm.cpp
git config core.filemode false注意:--recursive参数用于下载子模块,这是chatglm.cpp正常运行必需的
🔨 编译chatglm.cpp
# 安装编译依赖工具包
sudo apt install curl libcurl4-openssl-dev
# 设置编译参数
cmake -B build
# 如果出现github.com访问错误,则设置代理
# export https_proxy=192.168.1.15:7890
# export http_proxy=192.168.1.15:7890
# 编译chatglm.cpp
cmake --build build --config Release
# 如果提示cmake版本问题,尝试如下的命令
CMAKE_ARGS="-DCMAKE_POLICY_VERSION_MINIMUM=3.5" cmake --build build --config Release
ls -lh build/bin编译优化说明:
- CMake会自动检测CPU特性并启用相应优化
- ARM设备编译需要额外指定CPU架构参数
- 如果遇到CMake版本兼容问题,使用环境变量指定最低版本要求
📦 安装python依赖包
# 安装大模型工具包
pip install huggingface_hub
pip install modelscope
# 安装python包
python -m pip install -U pip
python -m pip install torch tabulate tqdm transformers accelerate sentencepiece
# 默认安装的transformers==4.33.2依赖包说明:
torch:深度学习框架,chatglm.cpp的核心依赖transformers:HuggingFace模型处理库sentencepiece:文本分词库,GLM系列模型需要tabulate和tqdm:提供更好的命令行交互体验
📥 下载模型
ZhipuAI:
GLM3:
- chatglm3-6b:文本大模型,chatglm.cpp
GLM4:
- glm-4-9b-chat:文本大模型,chatglm.cpp
- glm-4v-9b:视觉大模型,chatglm.cpp
export LLAMA_CPP_DIR=$(pwd)
export MODELSCOPE_DIR=../llama.cpp
cd $MODELSCOPE_DIR
model_group=ZhipuAI
model_name_list="chatglm3-6b glm-4-9b-chat glm-4v-9b"
for model_name in $model_name_list
do
modelscope download --model $model_group/$model_name --local_dir ./$model_group/$model_name
done
ls -lh $model_group模型选择说明:
chatglm3-6b:经典对话模型,转换相对简单glm-4-9b-chat:新一代对话模型,性能更优glm-4v-9b:多模态模型,支持图像理解
🔄 转换模型到ggml模型
不同版本,需要不同的transformers版本,这是关键的兼容性要点:
model_group=ZhipuAI
model_name="chatglm3-6b"
pip install transformers==4.33.2
python $LLAMA_CPP_DIR/chatglm_cpp/convert.py -i $MODELSCOPE_DIR/$model_group/$model_name -t q4_0 -o models/${model_name}-ggml.bin
model_name="glm-4-9b-chat"
pip install transformers==4.40.0
python $LLAMA_CPP_DIR/chatglm_cpp/convert.py -i $MODELSCOPE_DIR/$model_group/$model_name -t q4_0 -o models/${model_name}-ggml.bin
# 视觉大模型需要添加-vt参数
model_name="glm-4v-9b"
pip install transformers==4.40.0
pip install torchvision
python $LLAMA_CPP_DIR/chatglm_cpp/convert.py -i $MODELSCOPE_DIR/$model_group/$model_name -t q4_0 -vt q4_0 -o models/${model_name}-ggml.bin
ls -lh models/转换参数说明:
-t q4_0:指定量化类型为4位量化-vt q4_0:视觉模型的量化参数-i:输入模型路径-o:输出模型路径
版本兼容性要点:
- ChatGLM3系列:需要transformers 4.33.2
- GLM-4系列:需要transformers 4.40.0+
- 视觉模型:需要额外安装torchvision
🛠️ chatglm.cpp默认模型
chatglm.cpp启动时,如果不指定模型,会默认调用chatglm-6b。可以在PC上,生成chatglm-6b对应的chatglm-ggml.bin文件,以便后续部署到星睿O6上面调用。
# 下载和转换默认模型
pip install transformers==4.33.2
export HF_ENDPOINT=https://hf-mirror.com
python ./chatglm_cpp/convert.py
ls -lh models/chatglm-ggml.bin默认模型优势:
- 无需手动指定模型路径
- 适合快速测试和验证环境
- 体积适中,转换速度快
🛠️ 常见问题解决
- 内存不足:模型转换时可能需要大量内存,建议32GB以上
- 依赖冲突:使用虚拟环境隔离依赖
- 转换失败:检查transformers版本兼容性
- 编译错误:确认CMake版本满足要求
✅ 环境搭建完成
这个环境搭建完成后,您就拥有了完整的GLM系列模型ggml格式转换和处理能力,为后续在星睿O6上的部署做好准备。
🔗 下一篇文章预告
在下一篇中,我们将开始环境迁移与部署阶段,首先将llama.cpp环境部署到星睿O6开发板上,并针对ARM架构进行优化配置。