【大模型】基于llama.cpp实现大模型格式转换、量化、推理

文章目录

  • 一、工作原理
    • [1.1 优点](#1.1 优点)
    • [1.2 支持的模型](#1.2 支持的模型)
    • [1.2 应用场景](#1.2 应用场景)
  • 二、下载编译
  • 三、LLM操作
    • [3.1 格式转换 (convert_hf_to_gguf)](#3.1 格式转换 (convert_hf_to_gguf))
    • [3.2 量化 (llama-quantize)](#3.2 量化 (llama-quantize))
    • [3.3 推理 (llama-cli)](#3.3 推理 (llama-cli))
    • [3.4 API服务 (llama-server)](#3.4 API服务 (llama-server))
  • 参考资料

llama.cpp是一个开源项目,专门为在本地CPU上部署量化模型而设计。它提供了一种简单而高效的方法,将训练好的量化模型转换为可在CPU上运行的低配推理版本。

一、工作原理

llama.cpp的核心是一个优化的量化推理引擎。这个引擎能够高效地在CPU上执行量化模型的推理任务。它通过一系列的优化技术,如使用定点数代替浮点数进行计算、批量处理和缓存优化等,来提高推理速度并降低功耗。

总结来说:

  • llama.cpp 使用的是 C 语言写的机器学习张量库 ggml
  • llama.cpp 提供了模型量化的工具

1.1 优点

  • 高效性能:llama.cpp针对CPU进行了优化,能够在保证精度的同时提供高效的推理性能。
  • 低资源占用:由于采用了量化技术,llama.cpp可以显著减少模型所需的存储空间和计算资源。
  • 易于集成:llama.cpp提供了简洁的API和接口,方便开发者将其集成到自己的项目中。
  • 跨平台支持:llama.cpp可在多种操作系统和CPU架构上运行,具有很好的可移植性。

1.2 支持的模型

从官方文档上可以看到支持的模型,基本上主流的模型都是支持的。

1.2 应用场景

llama.cpp适用于各种需要部署量化模型的应用场景,如智能家居、物联网设备、边缘计算等。在这些场景中,llama.cpp可以帮助开发者在资源受限的环境中实现实时推断和高能效计算。

二、下载编译

  1. 下载代码
python 复制代码
git clone https://github.com/ggerganov/llama.cpp
  1. 编译

参考官方教程:https://github.com/ggml-org/llama.cpp/blob/master/docs/build.md

首先打开项目目录:

python 复制代码
cd llama.cpp-master
  • CPU编译
python 复制代码
cmake -B build
cmake --build build --config Release
  • GPU编译
python 复制代码
cmake -B build -DGGML_CUDA=ON
cmake --build build --config Release

补充说明:如果不支持cmake编译命令的,可以先用 sudo apt install cmake 命令安装cmke包。

这里给出编译中几个常见的概念 CMake、Make、g++之间的区别:

  • CMake 是一个跨平台的构建系统生成工具。它的主要作用是通过配置文件(通常是 CMakeLists.txt)生成适合于目标平台的构建脚本或文件;
  • Make 是一个构建自动化工具。它通过读取 Makefile 来执行编译和构建过程;
  • g++/clang/MinGW 是负责具体编译的编译器。

编译前项目的目录内容如下:

编译后的目录多了 build 文件夹以及一些其他文件,其中 build 文件夹中的内容如下所示:

python 复制代码
cd ./build/bin
ls

可以看到 llama-clillama-quantizellama-server 等后续需要使用到的命令文件。

三、LLM操作

本文是使用 MiniCPM-2B-sft-bf16 模型来进行试验,llama.cpp有支持的可操作模型列表,支持转换的模型格式有PyTorch的 .bin 、huggingface 的 .safetensors,根据支持列表进行下载操作即可。

MiniCPM-2B-sft-bf16:MiniCPM 3.0 是一个 4B 参数量的语言模型,相比 MiniCPM1.0/2.0,功能更加全面,综合能力大幅提升,多数评测集上的效果比肩甚至超越众多 7B-9B 模型。

3.1 格式转换 (convert_hf_to_gguf)

我们通常在HuggingFace上下载的模型文件是.safetensors格式的,格式转换主要是将下载的模型转换为.gguf格式。基于llama.cpp,我们可以使用convert-hf-to-gguf.py转换脚本读取模型配置、分词器、张量名称+数据,并将它们转换为GGUF元数据和张量,以便在CPU上进行快速推理,而不需要GPU。

GGUF格式是GPT-Generated Unified Format,由Georgi Gerganov定义发布的一种大模型文件格式。

它设计用于快速加载和保存模型,支持各种模型,并允许添加新功能同时保持兼容性。

GGUF文件格式专为存储推断模型而设计,特别适用于语言模型如GPT

转换命令:

python 复制代码
python3 convert_hf_to_gguf.py python3 convert_hf_to_gguf.py ../model/MiniCPM-2B-sft-bf16

转换过程如下:

可以看到,在执行转换后,会在model目录下生成对应的F16 gguf文件,大小约为5G:

3.2 量化 (llama-quantize)

量化主要是为了减少模型推理对硬件资源的要求,提高推理效率,但是模型的精度也会降低,通过牺牲模型参数的精度,来换取模型的推理速度。

使用 llama-quantize 命令量化模型。

量化模型的命名方法遵循: Q + 量化比特位 + 变种。量化位数越少,对硬件资源的要求越低,推理速度越快,但是模型的精度也越低。

量化命令:

python 复制代码
cd /root/project-llama-cpp/build/bin
./llama-quantize /root/model/MiniCPM-2B-sft-bf16/CPM-2B-sft-F16.gguf /root/model/MiniCPM-2B-sft-bf16/CPM-2B-sft-Q4_K_M.gguf Q4_K_M

注意:这里,我们使用了绝对路径。

通过 python ./llama-quantize -h 命令可以看到量化支持的参数。

量化过程如下:

量化后的模型gguf文件为:CPM-2B-sft-Q4_K_M.gguf,大小为:1.68G

3.3 推理 (llama-cli)

llama-cli 推理命令的使用方式,可以参考官方文档:https://github.com/ggml-org/llama.cpp/blob/master/examples/main/README.md

(1)推理命令

python 复制代码
cd /root/project-llama-cpp/build/bin
./llama-cli -m /root/model/MiniCPM-2B-sft-bf16/CPM-2B-sft-Q4_K_M.gguf -n 128 --prompt "<用户>机器学习是什么<AI>"

通过./llama-cli -h命令可以看到推理支持的参数。

推理过程及输出如下:

(2)对话模式 (Conversation Mode)

python 复制代码
./llama-cli -m /root/model/MiniCPM-2B-sft-bf16/CPM-2B-sft-Q4_K_M.gguf -cnv

3.4 API服务 (llama-server)

llama.cpp提供了与OpenAI API兼容的API接口,使用make生成的llama-server来启动API服务。

python 复制代码
./llama-server -m /root/model/MiniCPM-2B-sft-bf16/CPM-2B-sft-Q4_K_M.gguf --host 0.0.0.0 --port 1234

参考资料

相关推荐
听吉米讲故事11 小时前
Llama 4全面评测:官方数据亮眼,社区测试显不足之处
人工智能·开源·llama
小草cys11 小时前
树莓派llama.cpp部署DeepSeek-R1-Distill-Qwen-1.5B
llama
Ender(弹射回家版)18 小时前
Llama 4 最新发布模型分析
llama
新加坡内哥谈技术1 天前
Llama 4的争议
人工智能·深度学习·语言模型·自然语言处理·自动化·llama
几米哥1 天前
Llama 4全面评测:官方数据亮眼,社区测试显不足之处
开源·llm·llama
Him__2 天前
Meta 发布 Llama 4,新一代旗舰 AI 模型
人工智能·ai·llama
black^sugar2 天前
LLaMA-Factory从安装到微调全流程
llama
zenRRan2 天前
各种角度全面聊聊Llama 4~
llama
小草cys2 天前
llama.cpp 和 vLLM 的详细对比分析
大模型·llama·vllm·deepseek
shelly聊AI2 天前
Meta上新Llama 4,到底行不行?
人工智能·llama