2. CPU推理基础

任务目标

在本案例中,你将使用 llama.cpp 在纯 CPU 环境下运行一个 7B 参数的量化模型,完成一次文本生成推理,并测量推理速度(/s)与内存占用。最终通过命令行输出确认推理成功,并记录性能指标。

环境与依赖

  • 操作系统:Linux(Ubuntu 20.04+)或 macOS(Apple Silicon 或 Intel)
  • 编译器:gcc / g++(支持 C++17),或 clang
  • 构建工具:cmake(≥3.14)与 make
  • 模型文件:llama-2-7b-chat.Q4_K_M.gguf(约 4.08 GB),从 Hugging Face 下载

实现步骤

1. 克隆并编译 llama.cpp

使用 git clone 获取最新源码,并通过 cmake 进行 Release 构建。构建完成后,main 可执行文件位于 build/bin/ 目录下。

git clone https://github.com/ggerganov/llama.cpp
cd llama.cpp
cmake -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build --config Release -j $(nproc)

2. 下载模型

从 Hugging Face 仓库 TheBloke/Llama-2-7B-Chat-GGUF 下载 llama-2-7b-chat.Q4_K_M.gguf 文件,并放置于 llama.cpp/models/ 目录下:

cd models
wget https://huggingface.co/TheBloke/Llama-2-7B-Chat-GGUF/resolve/main/llama-2-7b-chat.Q4_K_M.gguf
cd ..

3. 运行 CPU 推理并测量性能

使用 main 命令加载模型,指定提示词并限制生成 数量。llama.cpp 会在推理结束后自动打印性能统计信息,包括 eval time、eval rate(/s)等。内存占用可通过 /usr/bin/time -v 命令获取。

# 运行推理(生成 128 个 )
./build/bin/main -m models/llama-2-7b-chat.Q4_K_M.gguf \
  -p "The capital of France is" \
  -n 128 \
  --temp 0.7

# 使用 time -v 测量内存占用(Linux)
/usr/bin/time -v ./build/bin/main -m models/llama-2-7b-chat.Q4_K_M.gguf \
  -p "The capital of France is" \
  -n 128 \
  --temp 0.7 2>&1 | tee inference_log.txt

验证方法与判定标准

  • 推理成功:终端输出包含完整的生成文本,且以 llama_print_timings: eval time = ... 结尾,无报错信息。
  • 速度指标:在 llama_print_timings 输出中查看 eval rate 字段,例如 12.34 tokens per second。该数值即为 CPU 推理速度。
  • 内存占用:检查 /usr/bin/time -v 输出中的 Maximum resident set size (kbytes) 字段,将其除以 1024 得到 MB 值。对于 7B Q4_K_M 模型,预期峰值内存约为 5–6 GB(取决于系统与上下文长度)。

预期输出示例

以下为基于代码逻辑与模型行为的确定性输出片段(非实测数据):

...
The capital of France is Paris. It is known for its art, fashion, and culture.
...
llama_print_timings:        load time =    4523.45 ms
llama_print_timings:      sample time =      12.34 ms
llama_print_timings:      eval time =    9876.54 ms
llama_print_timings:     eval rate =      12.96 tokens/s

常见问题

  • 编译失败:确认 cmake 版本 ≥3.14,且系统已安装 libcurl4-openssl-dev(用于模型下载功能,若不需要可忽略)。
  • 内存不足:若系统 RAM 小于 8 GB,可改用 Q3_K_M 量化版本(约 3.5 GB),命令不变,仅替换模型文件名。
  • 速度过慢:确保 BIOS 中已启用硬件虚拟化(不影响 CPU 推理),并关闭其他高负载进程。对于 Apple Silicon,可尝试 make LLAMA_METAL=1 启用 GPU 加速,但本案例限定纯 CPU。