LLM的C/C++推理:llama.cpp

  详见 https://github.com/ggerganov/llama.cpp

LLM部署工具llama.cpp 

llama.cpp 旨在使用最少的硬件资源实现在本地或云端上的最优性能的LLM推理部署,其具有以下特点

  • 纯C/C++实现,无任何依赖项
  • 支持x86架构的AVX、AVX2和AVX512指令集
  • 提供1.5-bit、2-bit、3-bit、4-bit、5-bit、6-bit和8-bit整数量化,以实现更快的推理和更少的内存占用
  • 可自定义CUDA内核用于在NVIDIA GPU上运行LLM(通过HIP支持AMD GPU)
  • 支持Vulkan和SYCL后端
  • CPU+GPU混合推理来实现对超过总VRAN容量模型的部分加速

项目文件 

 克隆项目代码,编译llama.cpp

git clone https://github.com/ggerganov/llama.cpp
cd llama.cpp
make

 windows环境下可以使用w64devkit执行make指令对项目代码进行编译

 编译后会在目录下生成一系列的可执行文件。

 

GGUF格式 

 GGUF全程为GPT-Generated Unified Format,是由llama.cpp的作者Georgi Gerganov定义的一种大模型文件格式,GGUF采用紧凑的二进制编码格式、

 优化的数据结构和内存映射等来保存大模型文件,以实现高效的存储和加载,提升模型的推理速度,减少资源消耗。

 可使用项目代码中的脚本将模型转换为GGUF格式,目前支持转换的格式包括PyTorch的.pth、huggingface的.safetensors以及llama.cpp此前的ggmlv3格式

 以hf模型为例,指令如下

 

python convert_hf_to_gguf.py model_path 

 

转换成功后会在模型路径下生成一个.gguf文件

 

模型量化

 可使用编译成功后的llama-quantize对GGUF格式的模型进行量化 

llama-quantize your_model.gguf res_model.gguf quantize_type 
llama-quantize ./models/Meta-Llama-3-8B-Instruct-F16.gguf ./models/Meta-Llama-3-8B-Instruct-F16_q40.gguf Q4_0

 

模型推理

基本的模型推理可以使用如下指令实现

llama-cli -m your_model.gguf -p "your question" -n 128

该指令有一系列参数,比较重要的有

  • -cnv:交互模式,将保留上下文,可以连续对话
  • -c:控制上下文的长度,值越大越能参考更长的对话历史
  • -n:回复生成的最大长度,默认为128
  • -temp:温度系数,值越低回复的随机性越小

使用交互模式

llama-cli -m your_model.gguf -p "initial question" -cnv 

 

posted @ 2024-07-24 15:27  Liang-ml  阅读(94)  评论(0编辑  收藏  举报