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

打印 上一主题 下一主题

主题 1012|帖子 1012|积分 3036

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


  • Github地址:https://github.com/ggerganov/llama.cpp
一、工作原理

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. git clone https://github.com/ggerganov/llama.cpp
复制代码

  • 编译
参考官方教程:https://github.com/ggml-org/llama.cpp/blob/master/docs/build.md
首先打开项目目次:
  1. cd llama.cpp-master
复制代码


  • CPU编译
  1. cmake -B build
  2. cmake --build build --config Release
复制代码


  • GPU编译
  1. cmake -B build -DGGML_CUDA=ON
  2. cmake --build build --config Release
复制代码
  补充说明:如果不支持cmake编译命令的,可以先用 sudo apt install cmake 命令安装cmke包。
这里给出编译中几个常见的概念 CMake、Make、g++之间的区别:
  

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

编译后的目次多了 build 文件夹以及一些其他文件,其中 build 文件夹中的内容如下所示:
  1. cd ./build/bin
  2. ls
复制代码

可以看到 llama-cli、llama-quantize 、llama-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 模子。
  

  • Github地址:https://github.com/OpenBMB/MiniCPM
  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
  转换命令:
  1. 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 + 量化比特位 + 变种。量化位数越少,对硬件资源的要求越低,推理速度越快,但是模子的精度也越低。
量化命令:
  1. cd /root/project-llama-cpp/build/bin
  2. ./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)推理命令
  1. cd /root/project-llama-cpp/build/bin
  2. ./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)
  1. ./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服务。
  1. ./llama-server -m /root/model/MiniCPM-2B-sft-bf16/CPM-2B-sft-Q4_K_M.gguf --host 0.0.0.0 --port 1234
复制代码

参考资料



  • llama.cpp实现大模子格式转换、量化、推理

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

莫张周刘王

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表