llama.cpp部署

轻量级本地LLM推理框架

概述

llama.cpp是一个用C++编写的高效LLM推理框架,最初为LLaMA模型设计,现已支持多种开源模型。 以其轻量、跨平台、CPU推理能力著称,是本地部署LLM的首选方案之一。

核心优势:纯C++实现、CPU推理、内存效率高、支持多种量化。

核心特性

CPU推理

高度优化的CPU推理,AVX/AVX2/ARM NEON指令集加速。

GPU加速

支持CUDA、Metal、Vulkan等GPU后端。

量化支持

多种量化方案:Q4_0, Q4_K_M, Q5_K_M, Q8_0等。

跨平台

Linux、macOS、Windows、Android、iOS。

安装与编译

# 克隆仓库
git clone https://github.com/ggerganov/llama.cpp
cd llama.cpp

# 编译(CPU版本)
make

# 编译(CUDA版本)
make LLAMA_CUDA=1

# 编译(Metal - macOS)
make LLAMA_METAL=1

# 安装Python绑定
pip install llama-cpp-python

模型转换

# 将Hugging Face模型转换为GGUF格式
python convert-hf-to-gguf.py /path/to/model \
  --outfile model-f16.gguf \
  --outtype f16

# 量化模型
./llama-quantize model-f16.gguf model-q4_k_m.gguf Q4_K_M

# 量化类型说明
# Q4_0: 最小体积,精度较低
# Q4_K_M: 推荐,平衡精度和大小
# Q5_K_M: 更高精度,稍大
# Q8_0: 最高精度,最大体积

命令行使用

# 基本推理
./llama-cli -m model-q4_k_m.gguf -p "Hello, how are you?"

# 交互模式
./llama-cli -m model-q4_k_m.gguf -i

# 聊天模式
./llama-cli -m model-q4_k_m.gguf \
  -p "You are a helpful assistant." \
  -cnv

# 指定GPU层数(部分GPU卸载)
./llama-cli -m model-q4_k_m.gguf \
  -p "Hello" \
  -ngl 32  # 将32层卸载到GPU

# 服务模式(兼容OpenAI API)
./llama-server -m model-q4_k_m.gguf \
  --host 0.0.0.0 \
  --port 8080

Python API

from llama_cpp import Llama

# 加载模型
llm = Llama(
    model_path="./model-q4_k_m.gguf",
    n_ctx=2048,         # 上下文长度
    n_gpu_layers=32,    # GPU层数
    verbose=False
)

# 生成文本
output = llm(
    "Q: What is machine learning? A:",
    max_tokens=128,
    stop=["Q:", "\n"],
    echo=True
)
print(output['choices'][0]['text'])

# 聊天补全
response = llm.create_chat_completion(
    messages=[
        {"role": "system", "content": "You are a helpful assistant."},
        {"role": "user", "content": "Hello!"}
    ]
)
print(response['choices'][0]['message']['content'])

量化方案对比

量化类型7B模型大小速度推荐场景
F1614GB基准最高精度
Q8_07.5GB高精度需求
Q5_K_M5.3GB较快平衡选择
Q4_K_M4.4GB推荐
Q4_03.9GB最快资源受限

性能优化参数

参数说明推荐值
-ngl / n_gpu_layers卸载到GPU的层数全部或尽可能多
-b / n_batch批处理大小512
-t / n_threadsCPU线程数物理核心数
-c / n_ctx上下文长度根据需求
-mlock锁定内存,避免交换推荐启用

与Ollama对比

特性llama.cppOllama
易用性命令行为主开箱即用
模型管理手动自动下载
底层技术原生基于llama.cpp
自定义程度中等

最佳实践

  • 推荐使用Q4_K_M或Q5_K_M量化
  • GPU推理时设置ngl为全部层数
  • CPU推理使用-mlock避免内存交换
  • 服务部署使用llama-server
  • 长上下文注意内存占用

参考资料

  • llama.cpp GitHub Repository
  • llama-cpp-python Documentation
  • GGUF Format Specification
----