SuperAPI AI 工具集

inference-serving-llama-cpp

智能体与模型

查看项目

更新于 11-04 01:42

技能介绍

用途

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