llama.cpp

没有显卡也能跑大模型?llama.cpp CPU 推理完全指南

详细教程:用 llama.cpp 在纯 CPU 环境跑大语言模型,从编译安装到性能优化,适用于 E5 洋垃圾和无独显的老电脑

为什么要在 CPU 上跑 LLM?

你可能没有一张像样的 NVIDIA 显卡:

  • 你的主力机是 MacBook
  • 你的台式机没有独显(核显办公机)
  • 你想利用 E5 洋垃圾的 28 个核心做免费劳动力
  • 你需要 7×24 跑一个后台推理服务,不想占用 GPU 资源

llama.cpp 就是为此而生的。 它是一个纯 C/C++ 实现的 LLM 推理引擎,没有 Python 依赖,不需要 CUDA,在 CPU 上就能高效运行大模型。

安装 llama.cpp

编译安装(推荐,能获得最佳性能)

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

# 方法1:标准编译(所有 CPU 通用)
make -j$(nproc)

# 方法2:开启优化编译(推荐,E5 用户选这个)
make LLAMA_NATIVE=1 LLAMA_AVX2=1 -j$(nproc)

# 方法3:如果你有 NVIDIA 显卡但也想用 CPU 模式
make LLAMA_CUDA=1 LLAMA_AVX2=1 -j$(nproc)

# 验证安装
./llama-cli --version

懒人方案:下载 Release 版

llama.cpp Releases 下载对应系统的预编译包:

# Linux/macOS
wget https://github.com/ggerganov/llama.cpp/releases/download/b4360/llama-b4360-bin-ubuntu-x64.zip
unzip llama-b4360-bin-ubuntu-x64.zip
cd llama-b4360-bin-ubuntu-x64

下载 GGUF 模型

llama.cpp 使用 GGUF 格式的模型文件。你可以从 HuggingFace 下载:

# 下载 Qwen2.5-7B GGUF(Q4量化,约 4.5GB)
pip install huggingface-hub
huggingface-cli download Qwen/Qwen2.5-7B-Instruct-GGUF qwen2.5-7b-instruct-q4_k_m.gguf \
  --local-dir ./models

# 或者直接 wget
wget https://huggingface.co/Qwen/Qwen2.5-7B-Instruct-GGUF/resolve/main/qwen2.5-7b-instruct-q4_k_m.gguf \
  -O ./models/qwen2.5-7b-instruct-q4_k_m.gguf

推荐模型与量化选择

模型量化文件大小推荐 CPU
Qwen2.5-7BQ4_K_M4.5GB任何 6 核以上
Qwen2.5-7BQ8_07.5GB8 核以上
Qwen2.5-14BQ4_K_M8.5GB12 核以上
DeepSeek-R1-7BQ4_K_M4.7GB任何 6 核以上
Llama-3.2-3BQ4_K_M2.0GB轻量首选,4 核都能跑
Llama-3.1-8BQ4_K_M5.0GB8 核以上推荐
Mistral-7BQ4_K_M4.3GB6 核以上

量化级别说明:Q4_K_M 是性价比最高的选择,占用小、速度尚可、质量损失很小。Q8_0 质量更好但体积翻倍。Q2_K 虽然最小但不推荐,质量下降明显。

运行你的第一个模型

基本用法

# 交互模式(类似 ChatGPT)
./llama-cli \
  -m ./models/qwen2.5-7b-instruct-q4_k_m.gguf \
  -p "你好,请介绍一下你自己" \
  -n 512 \
  -t 8

# 参数说明:
# -m: 模型文件路径
# -p: 输入提示词
# -n: 最大生成 token 数
# -t: CPU 线程数(建议设为物理核心数)

交互式聊天模式

# 用 chat 模板启动完整对话
./llama-cli \
  -m ./models/qwen2.5-7b-instruct-q4_k_m.gguf \
  -f ./prompts/chat-with-bob.txt \
  -n 512 \
  -t 8 \
  -c 4096 \
  --chat-template chatml

# 聊完输入 /reset 清空历史
# 输入 /exit 退出

启动 API 服务器

# 启动兼容 OpenAI API 的服务
./llama-server \
  -m ./models/qwen2.5-7b-instruct-q4_k_m.gguf \
  -t 8 \
  -c 4096 \
  --port 8080

# 然后可以用 curl 调用
curl http://localhost:8080/v1/chat/completions \
  -d '{
    "model": "qwen2.5-7b",
    "messages": [{"role": "user", "content": "你好"}]
  }'

性能优化指南

E5 多核优化

E5 2680 v4(14核28线程)的最佳配置:

# 方案1:极致吞吐量(适合 API 服务)
./llama-cli -m model.gguf -t 12 -tb 2 -ngl 0

# 方案2:平衡模式(适合交互聊天)
./llama-cli -m model.gguf -t 8 -tb 2 -c 4096

# 方案3:低延迟模式
./llama-cli -m model.gguf -t 6 -c 2048 --no-mmap

关键性能参数:

参数作用建议值
-t推理线程数CPU 物理核心数(不要用超线程)
-tb批处理线程数2-4,多核 CPU 建议 2
-c上下文大小2048-8192,越大越占内存
--no-mmap禁用内存映射内存不够时开启
--mlock锁定内存防交换推荐开启提升稳定性
-nglGPU 层数0=纯CPU,>0 表示有多少层交给 GPU

内存需求计算

7B Q4_K_M: 约 4.5GB 模型 + 4096 上下文 ≈ 5.5GB 内存
7B Q8_0:  约 7.5GB 模型 + 4096 上下文 ≈ 8.5GB 内存
14B Q4_K_M: 约 8.5GB 模型 + 4096 上下文 ≈ 10GB 内存
14B Q8_0:  约 15GB 模型 + 4096 上下文 ≈ 17GB 内存

实测速度基准

在 E5 2680 v4 (14核, 32G RECC) 上的实测:

模型量化线程Prompt 处理生成速度
Qwen2.5-7BQ4_K_M88.2 tok/s5.6 tok/s
Qwen2.5-7BQ4_K_M1210.5 tok/s6.8 tok/s
Qwen2.5-7BQ4_K_M1411.2 tok/s7.1 tok/s
Qwen2.5-7BQ8_0125.5 tok/s3.8 tok/s
Llama-3.2-3BQ4_K_M828 tok/s15 tok/s
DeepSeek-R1-7BQ4_K_M129.8 tok/s6.2 tok/s

可见 12-14 线程是甜点区,继续增加线程收益递减。生成速度 5-7 tok/s 对阅读来说已经可以接受(相当于每分钟 300-400 字)。

macOS (Apple Silicon) 用户

# M1/M2/M3 芯片用 Metal 加速
make LLAMA_METAL=1 -j$(nproc)

# M系列芯片跑 7B Q4 可以达到 20-30 tok/s
./llama-cli -m model.gguf -ngl 1

Windows 特殊配置

用 MSVC 编译

# 打开 x64 Native Tools Command Prompt
cd llama.cpp
mkdir build && cd build
cmake .. -DLLAMA_AVX2=ON -DCMAKE_BUILD_TYPE=Release
cmake --build . --config Release

或者用 WSL

最简单的方法是在 WSL2 里跑,完全遵循 Linux 教程即可。

高级用法

从模型库批量生成

#!/bin/bash
# batch.sh - 批量处理文本
while read -r line; do
  ./llama-cli -m model.gguf -p "$line" -n 256 -t 8 --no-display-prompt
done < prompts.txt

模型拼接与量化

想把其他格式(如 PyTorch)的模型转成 GGUF?

# 转换 HuggingFace 模型到 GGUF
python convert_hf_to_gguf.py \
  ./my-model/ \
  --outfile ./models/my-model-q4_k_m.gguf \
  --outtype q4_k_m

嵌入向量提取

# 获取文本嵌入向量(可用于 RAG)
./llama-embedding \
  -m ./models/qwen2.5-7b-instruct-q4_k_m.gguf \
  -p "需要嵌入的文本" \
  --embd-normalize 2

总结

llama.cpp 让没有 NVIDIA 显卡的用户也能跑大模型,核心要点:

  1. 选对量化:Q4_K_M 是性价比之王
  2. 控制上下文:4096 是平衡值,不要无脑开大
  3. 线程不是越多越好:设为核心数,再多反而变慢
  4. 7B 模型在 E5 上可达 5-7 tok/s:可用的速度,适合后台服务
  5. 如果追求交互体验:还是建议上显卡,CPU 适合不赶时间的场景

记住:llama.cpp 不是要和 GPU 方案竞争,而是要填补”没有显卡”这个空白。 对于 E5 洋垃圾用户、Mac 用户、服务器后台任务来说,它是最好的选择。