用途
llama.cpp 是一个用纯 C/C++ 编写的 LLM 推理工具,依赖极少,针对 CPU 和非 NVIDIA 硬件进行了优化。
资料建议在以下情况使用 llama.cpp:
- 在仅有 CPU 的机器上运行
- 部署在 Apple Silicon(M1/M2/M3/M4)上
- 使用 AMD 或 Intel GPU(无 CUDA)
- 边缘部署(树莓派、嵌入式系统)
- 需要不依赖 Docker/Python 的简单部署
资料同时给出替代方案:有 NVIDIA GPU(A100/H100)、需要最大吞吐(100K+ tok/s)、在带 CUDA 的数据中心运行时,改用 TensorRT-LLM;有 NVIDIA GPU、需要 Python 优先 API、想要 PagedAttention 时,改用 vLLM。
主要能力
- 命令行推理:支持简单对话与交互式对话。
- 服务端模式:可启动 OpenAI 兼容服务器,并通过 curl 发起 chat completions 请求。
- 量化格式:支持 GGUF 格式,资料列出 Q4_K_M、Q4_K_S、Q5_K_M、Q6_K、Q8_0、Q2_K 等格式的位数、7B 模型体积、速度、质量与适用场景。
- 硬件加速:支持 Apple Silicon(Metal)、NVIDIA GPU(CUDA)、AMD GPU(ROCm),并可通过 -ngl 参数将层卸载到 GPU,支持 CPU+GPU 混合。
- 常见模式:批处理、约束生成(语法文件输出 JSON)、上下文大小调整。
- 支持模型:LLaMA 系列(Llama 2、Llama 3、Code Llama)、Mistral 系列(Mistral 7B、Mixtral 8x7B/8x22B),以及 Falcon、BLOOM、GPT-J、Phi-3、Gemma、Qwen、LLaVA(视觉)、Whisper(音频)。
使用方式
安装:
# macOS/Linux
brew install llama.cpp
# Or build from source
git clone https://github.com/ggerganov/llama.cpp
cd llama.cpp
make
# With Metal (Apple Silicon)
make LLAMA_METAL=1
# With CUDA (NVIDIA)
make LLAMA_CUDA=1
# With ROCm (AMD)
make LLAMA_HIP=1
下载模型:
# Download from HuggingFace (GGUF format)
huggingface-cli download \
TheBloke/Llama-2-7B-Chat-GGUF \
llama-2-7b-chat.Q4_K_M.gguf \
--local-dir models/
# Or convert from HuggingFace
python convert_hf_to_gguf.py models/llama-2-7b-chat/
运行推理:
# Simple chat
./llama-cli \
-m models/llama-2-7b-chat.Q4_K_M.gguf \
-p "Explain quantum computing" \
-n 256 # Max tokens
# Interactive chat
./llama-cli \
-m models/llama-2-7b-chat.Q4_K_M.gguf \
--interactive
服务端模式:
# Start OpenAI-compatible server
./llama-server \
-m models/llama-2-7b-chat.Q4_K_M.gguf \
--host 0.0.0.0 \
--port 8080 \
-ngl 32 # Offload 32 layers to GPU
# Client request
curl http://localhost:8080/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "llama-2-7b-chat",
"messages": [{"role": "user", "content": "Hello!"}],
"temperature": 0.7,
"max_tokens": 100
}'
量化选择建议:
# General use (balanced)
Q4_K_M # 4-bit, medium quality
# Maximum speed (more degradation)
Q2_K or Q3_K_M
# Maximum quality (slower)
Q6_K or Q8_0
# Very large models (70B, 405B)
Q3_K_M or Q4_K_S # Lower bits to fit in memory
硬件加速示例:
# Apple Silicon (Metal)
make LLAMA_METAL=1
./llama-cli -m model.gguf -ngl 999 # Offload all layers
# NVIDIA GPUs (CUDA)
make LLAMA_CUDA=1
./llama-cli -m model.gguf -ngl 35 # Offload 35/40 layers
./llama-cli -m llama-70b.Q4_K_M.gguf -ngl 20 # GPU: 20 layers, CPU: rest
# AMD GPUs (ROCm)
make LLAMA_HIP=1
./llama-cli -m model.gguf -ngl 999
常见模式:
# Batch processing
cat prompts.txt | ./llama-cli \
-m model.gguf \
--batch-size 512 \
-n 100
# Constrained generation
./llama-cli \
-m model.gguf \
-p "Generate a person: " \
--grammar-file grammars/json.gbnf
# Context size
./llama-cli \
-m model.gguf \
-c 4096 # 4K context window
./llama-cli -m model.gguf -c 32768 # 32K context
适用场景
- 无 NVIDIA 硬件的本地推理:CPU、Apple Silicon、AMD/Intel GPU。
- 边缘部署:树莓派、嵌入式系统。
- 需要简单部署、不引入 Docker/Python 的场景。
- 通过 OpenAI 兼容服务端对外提供接口。
- 需要约束生成(如仅输出合法 JSON)或批处理提示词的场景。
限制与说明
- 资料指出,若有 NVIDIA GPU 且追求最大吞吐或数据中心 CUDA 环境,应改用 TensorRT-LLM;若有 NVIDIA GPU 且需要 Python 优先 API 或 PagedAttention,应改用 vLLM。
- 量化格式在速度与质量之间存在取舍:Q2_K 质量较差,仅建议测试;Q6_K、Q8_0 质量更好但更慢。
- 上下文默认 512,需通过 -c 调整;超长上下文需模型支持。
- 资料给出的性能基准(如 Apple M3 Max 约 50 tok/s、NVIDIA RTX 4090 约 120 tok/s)为特定模型(Llama 2-7B Q4_K_M)与特定配置下的数据,实际表现可能不同。
- 关于收费、价格、平台等未在资料中明确说明的内容,暂未提供。
参考资源
- GitHub:https://github.com/ggerganov/llama.cpp
- 模型:https://huggingface.co/models?library=gguf
- Discord:https://discord.gg/llama-cpp