HonestQiao · 3 天前 · 北京

【星睿O6评测】从零玩转智谱AI全栈大模型之3-在PC上搭建chatglm.cpp推理环境

🎯 本文目标:在PC上搭建chatglm.cpp推理环境,这是专为GLM系列模型优化的推理框架,在星睿O6上运行时内存使用更高效,对话体验更流畅。

经过查阅资料和深入学习,在星睿O6开发板上成功部署了智谱AI系列大模型,包括文本生成大模型、视觉大模型,以及代码生成大模型。

001.jpg

在学习研究的过程中,我做了详细的笔记,经过整理,成为本系列文章,分享给大家。

通过本系列文章,您将了解到:

  • 第一阶段:开发环境准备

    • 第一篇:星睿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的对比

为什么需要两个框架?

  1. chatglm.cpp优势

    • 专门为GLM系列优化,推理效率更高
    • 对话体验更流畅,符合中文对话习惯
    • 内存使用更优化,特别是对GLM架构
  2. 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

002.jpg

编译优化说明

  • 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系列模型需要
  • tabulatetqdm:提供更好的命令行交互体验

📥 下载模型

  • 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/

003.jpg

转换参数说明

  • -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

004.jpg

默认模型优势

  • 无需手动指定模型路径
  • 适合快速测试和验证环境
  • 体积适中,转换速度快

🛠️ 常见问题解决

  1. 内存不足:模型转换时可能需要大量内存,建议32GB以上
  2. 依赖冲突:使用虚拟环境隔离依赖
  3. 转换失败:检查transformers版本兼容性
  4. 编译错误:确认CMake版本满足要求

✅ 环境搭建完成

这个环境搭建完成后,您就拥有了完整的GLM系列模型ggml格式转换和处理能力,为后续在星睿O6上的部署做好准备。

🔗 下一篇文章预告
在下一篇中,我们将开始环境迁移与部署阶段,首先将llama.cpp环境部署到星睿O6开发板上,并针对ARM架构进行优化配置。

推荐阅读
关注数
1
内容数
11
此芯AI PC开发套件瑞莎“星睿O6”评测
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息