HonestQiao · 5 天前 · 北京

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

🎯 本文目标:在PC上搭建llama.cpp推理环境,为后续模型格式转换和量化处理做准备。这是整个部署流程的第一步,为星睿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上搭建llama.cpp推理环境

我使用的PC环境是Lenovo ThinkServer T100C,操作系统为Ubuntu 24.04.3 LTS。在此环境中,之前安装过CIX NPU SDK。这次安装llama.cpp,用于将模型从hf格式转换到gguf格式。

🤔 为什么要先在PC上搭建环境?

常见的大模型文件格式如下:
002.jpg
在ARM设备上部署大模型,一般使用gguf/ggml格式。

在PC上搭建llama.cpp环境有以下几个重要目的:

  1. 模型格式转换:将HuggingFace的原始模型转换为高效的GGUF格式
  2. 量化优化:对模型进行量化处理,减少内存占用
  3. 功能验证:在资源充足的PC上验证模型功能正常
  4. 环境备份:为后续迁移到星睿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

003.jpg

编译优化

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

llama.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

004.jpg

量化说明

  • 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

005.jpg

🔄 转换模型

# 转换模型为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

转换过程中输出如下:
006.jpg
单个模型转换完成后,会写入对应的gguf文件:
007.jpg

全部完成后,使用下面的命令查看转换结果:

ls -lh ./$model_group/*/*.gguf

008.jpg

转换注意事项

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

009.jpg

量化效果

  • 通常可以将模型大小减少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文件,可以直接用于视觉识别。
010.jpg

另外,也可以通过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
done

mmproj说明

  • mmproj是多模态投影器,用于处理图像输入
  • GLM-Edge系列视觉模型已经预置了mmproj文件
  • 这使得视觉模型可以直接使用,无需额外转换

✅ 环境搭建完成

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

🔗 下一篇文章预告
在下一篇中,我们将搭建chatglm.cpp环境,这是专为GLM系列模型优化的推理框架,在星睿O6上运行效率更高。

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