🎯 本文目标:在PC上搭建llama.cpp推理环境,为后续模型格式转换和量化处理做准备。这是整个部署流程的第一步,为星睿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上搭建llama.cpp推理环境
我使用的PC环境是Lenovo ThinkServer T100C,操作系统为Ubuntu 24.04.3 LTS。在此环境中,之前安装过CIX NPU SDK。这次安装llama.cpp,用于将模型从hf格式转换到gguf格式。
🤔 为什么要先在PC上搭建环境?
常见的大模型文件格式如下:
在ARM设备上部署大模型,一般使用gguf/ggml格式。
在PC上搭建llama.cpp环境有以下几个重要目的:
- 模型格式转换:将HuggingFace的原始模型转换为高效的GGUF格式
- 量化优化:对模型进行量化处理,减少内存占用
- 功能验证:在资源充足的PC上验证模型功能正常
- 环境备份:为后续迁移到星睿O6做好准备
优势说明:
- PC有充足的内存和计算资源,适合处理大模型的转换和量化
- 可以提前验证模型兼容性,避免在目标设备上浪费时间
- 转换好的模型可以直接传输到星睿O6使用
🔧 基础环境构建
# PC环境执行
# 工作目录
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
# 创建llama.cpp虚拟环境
conda create -n llama.cpp python=3.11
conda activate llama.cpp环境配置说明:
- 使用Miniforge3替代Miniconda,解决了商业许可和运行缓慢的问题
- Python 3.11是当前llama.cpp推荐版本,兼容性最佳
- 创建独立虚拟环境避免依赖冲突
📥 源码下载
# 加速方式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 https://github.com/ggml-org/llama.cpp.git
# 加速方式2:【优先考虑】
# 不设置访问代理,使用加速服务 https://ghfast.top/
git clone https://ghfast.top/https://github.com/ggml-org/llama.cpp.git
# 设置文件忽略
cd llama.cpp
git config core.filemode false
# 设置llama.cpp工具目录
export LLAMA_CPP_DIR=$(pwd)Git配置优化说明:
ghfast.top是GitHub镜像服务,比代理更稳定- 设置
core.filemode false避免权限问题
🔨 编译llama.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
# 编译llama.cpp
cmake --build build --config Release
ls -lh build/bin编译优化:
- Release模式提供最佳性能
- CMake会自动检测系统特性并优化编译
📦 安装python依赖包
# 安装大模型工具包
pip install huggingface_hub
pip install modelscope
# 安装python依赖包
pip3 install -r ./requirements.txt🔍 查看支持的转换模型
# 查看支持的转换模型类型
python $LLAMA_CPP_DIR/convert_hf_to_gguf.py --print-supported-modelsllama.cpp 支持转换的模型种类非常的多,有近200种。
所以对上面的命令做个过滤,只查看deepseek和GLM相关的:
# 查看支持的转换模型类型
python $LLAMA_CPP_DIR/convert_hf_to_gguf.py --print-supported-models 2>&1 | \
grep -Ei 'deepseek|glm|models:'输出结果如下:
Supported models:
TEXT models:
- ChatGLMForConditionalGeneration
- ChatGLMModel
- DeepseekForCausalLM
- DeepseekV2ForCausalLM
- DeepseekV3ForCausalLM
- Glm4ForCausalLM
- Glm4MoeForCausalLM
- Glm4vForConditionalGeneration
- Glm4vMoeForConditionalGeneration
- GlmForCausalLM
MMPROJ models:
- Glm4vForConditionalGeneration
- Glm4vMoeForConditionalGeneration
- GlmasrModel支持的模型类型:
- ChatGLM系列(ChatGLM、ChatGLM2、ChatGLM3)
- GLM-4系列模型
- 各种开源语言模型
🎯 DeepSeek-R1-Distill-Qwen-1.5B大模型
瑞莎官方提供了星睿O6的llama.cpp的参考文档,是下载DeepSeek-R1-Distill-Qwen-1.5B,所以先用DeepSeek-R1-Distill-Qwen-1.5B做测试。
Llama.cpp | Radxa Docs
📥 下载模型
# 设置完整路径
cd /data/home/honestqiao/Projects/orion-o6/llama.cpp
export LLAMA_CPP_DIR=$(pwd)
export MODELSCOPE_DIR=$(pwd)
# 下载模型:DeepSeek-R1-Distill-Qwen-1.5B
cd $MODELSCOPE_DIR
model_group=deepseek-ai
model_name=DeepSeek-R1-Distill-Qwen-1.5B
modelscope download --model $model_group/$model_name --local_dir ./$model_group/$model_name瑞莎官方文档中,给出的指导是使用git从huggingface下载模型。
我实际下载模型使用的是modelscope,真的是又快又好。
ModelScope优势:
- 智谱AI官方推荐的下载渠道
- 自动处理模型分片和完整性验证
- 支持断点续传
- 在国内下载速度超快
从魔搭(modelscope)社区,可以了解DeepSeek-R1-Distill-Qwen-1.5B的详细信息:
DeepSeek-R1-Distill-Qwen-1.5B模型详情页 · 魔搭社区
🔄 转换为gguf格式
# 转换模型为gguf模型
python $LLAMA_CPP_DIR/convert_hf_to_gguf.py ./$model_group/$model_name --outfile ./$model_group/$model_name/${model_name}-F16.gguf⚡ 量化模型
$LLAMA_CPP_DIR/build/bin/llama-quantize ./$model_group/$model_name/${model_name}-F16.gguf ./models/${model_name}-Q4_K_M.gguf Q4_K_M
ls -lh ./models/${model_name}-Q4_K_M.gguf量化说明:
- F16:半精度浮点,精度最高但占用内存大
- Q4_K_M:4位量化,平衡了精度和内存使用
🤖 智谱AI大模型
ZhipuAI:
GLM3:
- chatglm3-6b:文本大模型,llama.cpp
GLM-Edge:适用于边缘设备的大模型
- glm-edge-1.5b-chat:文本大模型,llama.cpp
- glm-edge-4b-chat:文本大模型,llama.cpp
- glm-edge-v-2b:视觉小模型,llama.cpp
- glm-edge-v-5b:视觉大模型,llama.cpp
GLM4:
- glm-4-9b-chat-hf:文本大模型,llama.cpp
GLM4.6:
- GLM-4.6V-Flash:多模态大模型,llama.cpp
📥 下载模型
# 批量下载模型
cd $MODELSCOPE_DIR
model_group=ZhipuAI
model_name_list="chatglm3-6b glm-edge-1.5b-chat glm-edge-4b-chat glm-edge-v-2b glm-edge-v-5b glm-4-9b-chat-hf GLM-4.6V-Flash"
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🔄 转换模型
# 转换模型为gguf模型
model_group=ZhipuAI
model_name_list="chatglm3-6b glm-edge-1.5b-chat glm-edge-4b-chat glm-edge-v-2b glm-edge-v-5b glm-4-9b-chat-hf GLM-4.6V-Flash"
for model_name in $model_name_list
do
python $LLAMA_CPP_DIR/convert_hf_to_gguf.py ./$model_group/$model_name/ --outfile ./$model_group/$model_name/${model_name}-F16.gguf
done
# 如果出错
# 错误1:ImportError: This modeling file requires the following packages that were not found in your environment: tiktoken. Run `pip install tiktoken`
pip install tiktoken转换过程中输出如下:
单个模型转换完成后,会写入对应的gguf文件:
全部完成后,使用下面的命令查看转换结果:
ls -lh ./$model_group/*/*.gguf转换注意事项:
- GLM-4系列需要额外安装tiktoken依赖
- 优先使用-hf后缀的模型版本,兼容性更好
⚡ 量化模型
# 量化模型
model_group=ZhipuAI
model_name_list="chatglm3-6b glm-edge-1.5b-chat glm-edge-4b-chat glm-edge-v-2b glm-edge-v-5b glm-4-9b-chat-hf GLM-4.6V-Flash"
for model_name in $model_name_list
do
$LLAMA_CPP_DIR/build/bin/llama-quantize ./$model_group/$model_name/${model_name}-F16.gguf ./models/${model_name}-Q4_K_M.gguf Q4_K_M
done
ll models/ | grep -Ei 'r1|glm'量化效果:
- 通常可以将模型大小减少70-80%
- 在保持较好精度的同时大幅提升推理速度
- 特别适合在资源受限的设备上运行
👁️ 视觉模型导出mmproj
智谱AI官方提供了GLM-Edge四个模型glm-edge-1.5b-chat-gguf glm-edge-4b-chat-gguf glm-edge-v-2b-gguf glm-edge-v-5b-gguf对应的gguf文件,其中包含了视觉识别需要的mmproj文件,可以直接用于视觉识别。
另外,也可以通过convert_hf_to_gguf.py,导出视觉模型对应的mmproj文件。
# 视觉模型导出mmproj
model_group=ZhipuAI
model_name_list="GLM-4.6V-Flash"
for model_name in $model_name_list
do
python $LLAMA_CPP_DIR/convert_hf_to_gguf.py ./$model_group/$model_name/ --outfile ./models/${model_name}-mmproj-model-f16.gguf --mmproj
donemmproj说明:
- mmproj是多模态投影器,用于处理图像输入
- GLM-Edge系列视觉模型已经预置了mmproj文件
- 这使得视觉模型可以直接使用,无需额外转换
✅ 环境搭建完成
这个环境搭建完成后,您就拥有了完整的GLM系列模型gguf格式转换和处理能力,为后续在星睿O6上的部署做好准备。
🔗 下一篇文章预告
在下一篇中,我们将搭建chatglm.cpp环境,这是专为GLM系列模型优化的推理框架,在星睿O6上运行效率更高。