SuperAPI AI 工具集

llama-cpp

智能体与模型

查看项目

更新于 10-15 13:10

技能介绍

用途

llama.cpp 是一个纯 C/C++ 实现的大语言模型推理工具,依赖极少,针对 CPU 和非 NVIDIA 硬件进行了优化。根据资料,它适用于以下场景:在纯 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。

主要能力

  • 纯 C/C++ 推理,依赖极少,面向 CPU 与非 NVIDIA 硬件优化。
  • 支持 GGUF 量化格式,提供多种量化等级(Q2_K、Q3_K_M、Q4_K_S、Q4_K_M、Q5_K_M、Q6_K、Q8_0 等)。
  • 支持硬件加速:Apple Silicon 的 Metal、NVIDIA 的 CUDA、AMD 的 ROCm(HIP)。
  • 提供命令行推理(llama-cli)、交互式聊天、以及 OpenAI 兼容的服务器模式(llama-server)。
  • 支持批量处理、约束生成(语法文件,如 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

下载模型(GGUF 格式):

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
  }'

硬件加速:

# 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  # Hybrid CPU+GPU

# 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 (JSON output with grammar)
./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

量化格式

GGUF 格式概览(以 7B 模型为例):

格式 位数 大小 (7B) 速度 质量 使用场景
Q4_K_M 4.5 4.1 GB 快 好 推荐默认
Q4_K_S 4.3 3.9 GB 更快 较低 速度关键
Q5_K_M 5.5 4.8 GB 中 更好 质量关键
Q6_K 6.5 5.5 GB 较慢 最佳 最高质量
Q8_0 8.0 7.0 GB 慢 优秀 最小退化
Q2_K 2.5 2.7 GB 最快 差 仅测试

选择建议:通用场景用 Q4_K_M;追求最大速度用 Q2_K 或 Q3_K_M(退化更多);追求最大质量用 Q6_K 或 Q8_0(更慢);超大模型(70B、405B)用 Q3_K_M 或 Q4_K_S 以适配内存。

性能基准

CPU 性能(Llama 2-7B Q4_K_M):

CPU 线程 速度 成本
Apple M3 Max 16 50 tok/s $0(本地)
AMD Ryzen 9 7950X 32 35 tok/s $0.50/小时
Intel i9-13900K 32 30 tok/s $0.40/小时
AWS c7i.16xlarge 64 40 tok/s $2.88/小时

GPU 加速(Llama 2-7B Q4_K_M):

GPU 速度 对比 CPU 成本
NVIDIA RTX 4090 120 tok/s 3-4× $0(本地)
NVIDIA A10 80 tok/s 2-3× $1.00/小时
AMD MI250 70 tok/s 2× $2.00/小时
Apple M3 Max (Metal) 50 tok/s 约相同 $0(本地)

适用场景与限制

适用场景:纯 CPU 环境、Apple Silicon、AMD/Intel GPU、边缘设备、需要简单部署(无需 Docker/Python)的场合。

限制与替代建议:若拥有 NVIDIA GPU(A100/H100)、需要最大吞吐量(100K+ tok/s)或在带 CUDA 的数据中心运行,资料建议改用 TensorRT-LLM;若拥有 NVIDIA GPU、需要 Python 优先 API 或 PagedAttention,建议改用 vLLM。

参考资源

  • 量化指南:GGUF 格式、转换、质量对比
  • 服务器部署:API 端点、Docker、监控
  • 优化:性能调优、CPU+GPU 混合
  • GitHub:https://github.com/ggerganov/llama.cpp
  • 模型:https://huggingface.co/models?library=gguf
  • Discord:https://discord.gg/llama-cpp