纯 CPU 运行 DeepSeek 太慢怎么办?用 llama.cpp 测生成速度并调整线程和上下文

用llama-bench拆分提示处理和生成速度,逐项调整CPU线程、OpenBLAS、上下文与并发并复测。

纯 CPU 运行 DeepSeek 慢,先区分提示处理慢、逐 token 生成慢,还是每次都在重新加载模型。用 llama-bench 固定模型和任务,分别测试线程、上下文与构建后端,才能知道优化是否有效。本文给的是复测方法,没有在你的 CPU、内存和模型文件上实测,不承诺固定速度。

先建立可比较的基线

记录 CPU 型号、物理核心、内存、模型文件和哈希:

纯 CPU 运行 DeepSeek 太慢怎么办?用 llama.cpp 测生成速度并调整线程和上下文

lscpu
free -h
sha256sum ~/models/deepseek.gguf

关闭其他大负载,用同一模型依次运行:

./build/bin/llama-bench -m ~/models/deepseek.gguf -t 4 -p 256 -n 128
./build/bin/llama-bench -m ~/models/deepseek.gguf -t 8 -p 256 -n 128
./build/bin/llama-bench -m ~/models/deepseek.gguf -t 12 -p 256 -n 128

pp 是 prompt processing,反映长输入的处理;tg 是 token generation,更接近日常看到的逐字输出速度。每组跑三次,忽略首次加载波动后取中位数。线程增加却变慢,通常说明已经遇到物理核心、内存带宽或大小核调度限制。

按症状改一个变量

症状 先检查 优先调整
首次慢,后续正常 模型加载和文件缓存 让服务常驻,模型放本地 SSD
长输入特别慢 pp、输入 token 数 裁剪历史、分段检索、避免重复系统提示
逐 token 一直慢 tg、线程、内存带宽 选更小模型/更低量化,重新找最佳线程数
越聊占用越高 上下文和 KV cache 缩短上下文,限制并发槽位
突然卡死或进程消失 dmesg、交换空间 解决内存不足,不把大量 swap 当性能优化

为 CPU 构建启用合适的 BLAS

llama.cpp 官方构建文档提供 OpenBLAS 路径,主要影响提示处理等矩阵计算。先保留普通构建结果,再单独建目录对比:

sudo apt install -y libopenblas-dev
cmake -B build-openblas \
  -DCMAKE_BUILD_TYPE=Release \
  -DGGML_BLAS=ON \
  -DGGML_BLAS_VENDOR=OpenBLAS
cmake --build build-openblas --config Release -j 8

./build-openblas/bin/llama-bench \
  -m ~/models/deepseek.gguf -t 8 -p 256 -n 128

只在同一模型、线程和测试长度下比较。若 pp 改善但 tg 变化不大,这是可能出现的结果,不要把一次峰值当作持续生成速度。

控制上下文和并发

./build/bin/llama-server \
  -m ~/models/deepseek.gguf \
  -t 8 -c 2048 -np 1 \
  --host 127.0.0.1 --port 8080

从 -c 2048、单并发开始。真实任务需要更长上下文时,再升到 4096 并记录内存和响应时间。上下文不是越长越好:历史消息会增加提示处理量,KV cache 也占内存。并发会让每个请求争用 CPU 和内存带宽。

用固定请求做端到端验收

for i in 1 2 3; do
  curl -s http://127.0.0.1:8080/v1/chat/completions \
    -H "Content-Type: application/json" \
    -d '{"messages":[{"role":"user","content":"用三点解释本地推理。"}],"temperature":0,"max_tokens":96}' \
    -o "result-$i.json"
done

确认三个 JSON 都能解析、回答非空、服务没有重新加载模型。测性能时保持提示和 max_tokens 一致;答案文本不必逐字相同,但任务应完成。

什么时候应换方案

  • 最小可接受模型仍无法达到业务响应时间:考虑 GPU、云 API 或更小专用模型。
  • 主要任务只是分类、抽取:不一定需要推理型大模型,可换小模型或规则。
  • 依赖 swap 才能启动:能运行不等于可用,优先降低模型、上下文或并发。
  • 想通过“多开线程”解决所有问题:超过合适线程数后可能更慢,必须以基准结果决定。

资料来源

Ai菜鸟网。发布者:AI小管家,转载请注明出处:https://www.alyyhw.com/32179.html

赞 (0)
AI小管家的头像AI小管家
电商选品智能体怎么搭建?汇总候选、评分并保留人工决策
上一篇 1小时前
腾讯云工作流智能体怎么做?搭建网页内容总结助手并检查节点输出
下一篇 1小时前

相关推荐

联系我们

联系我们

1

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信
关注微信
分享本页
返回顶部