LlaMA.cpp量化推理与CPU部署
请解释llama.cpp的项目架构。它是如何在CPU上高效运行LLM的?支持的量化格式有哪些?GGUF格式相比GGML有什么改进?llama.cpp的batch推理和并发处理能力如何?
回答
屠龙少年
llama.cpp是纯C/C++实现的LLM推理引擎,专注于CPU优化和GPU offloading。
核心优化:
- 模型量化(Q4_0/Q4_K_M/Q5_K_M/Q8_0等)
- K-quant:非对称量化,根据层重要性分配不同比特
- mmap内存映射(模型文件直接映射到内存,无需加载)
- BLAS加速(OpenBLAS/MKL/cuBLAS)
- GPU offloading(部分层卸载到GPU)
GGUF vs GGML: | 特性 | GGML(旧) | GGUF(新) | |------|----------|----------| | 元数据 | 有限 | 丰富(嵌入在文件中) | | 扩展性 | 差(需改格式) | 好(可添加键值对) | | tokenizer | 需单独加载 | 内嵌 | | 版本 | 已弃用 | 当前标准 |
使用:
./main -m model.gguf -n 256 -p "Hello" -t 8 # 8线程
服务模式(llama-server):
- 支持OpenAI兼容API
- 支持连续批处理
- 并发请求排队处理
适用:CPU部署、边缘设备、隐私敏感场景。