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