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。