CPU 跑 14B 只到 9.5 token/s:核数翻 6 倍只快 1.88 倍,卡的是内存带宽
本机 24 核 Ultra 7 270K Plus + DDR5-6000 双通道(理论 96 GB/s)上,把 RTX 5090D 摘掉(num_gpu=0,/api/ps 复核 size_vram=0),跑 qwen2.5:14b Q4_K_M(权重 8,988,110,688 字节 = 8.371 GiB)。线程梯度 num_thread=4/8/12/16/24,解码速度 5.047/6.469/8.020/9.027/9.489 token/s,相对 4 线程 1.00/1.28/1.59/1.79/1.88 倍——核数翻 6 倍只换来 1.88 倍。用 numpy 块拷贝实测本机内存带宽(256 MB × N 线程 × 3 轮中位数):1/2/4/6/8 线程 = 39.98/50.20/61.20/66.73/70.02 GB/s,8 线程后压平,与线程梯度曲线同形状。按「权重体积 × 解码速度」折算解码实读内存 85.3 GB/s,占 96 GB/s 的 89%;反推该模型天花板 = 96 ÷ 8.99 ≈ 10.7 token/s,实测兑现 89%。预填充另测四档(num_ctx=16384):332/1243/2463/4868 token → 2.95/11.96/24.01/52.18 秒,折 93.3–112.5 token/s 平台期,与解码差 10–11 倍——预填充吃算力、解码吃带宽。
CPU推理Ollama内存带宽解码速度token/s本地部署核数带宽瓶颈量化模型选型14BDDR5这条适用于
- 模型跑在 CPU 上(num_gpu=0,且用 /api/ps 确认 size_vram=0)
- 需要知道权重的实际字节数与内存通道规格
- 同一台机器上要能另外跑一段纯内存拷贝做参照
版本指纹
Windows 11 + Ultra 7 270K Plus(24 核)+ 2×48GB DDR5-6000 双通道;Ollama 0.40.4;qwen2.5:14b Q4_K_M(8,988,110,688 B)
具体做法
环境:本机 Ultra 7 270K Plus(24 核 24 线程)/ 2×48 GB DDR5-6000 双通道(合计 95.74 GB)/ RTX 5090D(本组测试全程不参与)/ Ollama 0.40.4 / qwen2.5:14b Q4_K_M(14.8B,权重 8,988,110,688 B = 8.371 GiB),2026-10-20 凌晨。
【线程梯度(同 prompt 同 seed,num_predict=48,每档 2 次,两次差 <0.3%)】
· 4 线程:5.048 / 5.046 → 中位 5.047 token/s(1.00×)|折算 45.4 GB/s
· 8 线程:6.480 / 6.458 → 6.469(1.28×)|58.2 GB/s
· 12 线程:8.010 / 8.030 → 8.020(1.59×)|72.1 GB/s
· 16 线程:9.028 / 9.026 → 9.027(1.79×)|81.2 GB/s
· 24 线程:9.406 / 9.573 → 9.489(1.88×)|85.3 GB/s
· 16 → 24 线程仅 +5.1%
【numpy 内存拷贝带宽(256 MB/块 × N 线程 × 3 轮,取中位数)】
· 1 线程 38.59 / 39.98 / 40.23 → 39.98 GB/s
· 2 线程 46.97 / 50.20 / 52.99 → 50.20
· 4 线程 63.40 / 57.17 / 61.20 → 61.20
· 6 线程 62.81 / 66.73 / 67.12 → 66.73
· 8 线程 68.30 / 70.02 / 71.56 → 70.02
· 理论带宽 = 6000 MT/s × 8 B × 2 通道 = 96 GB/s
【预填充(num_ctx=16384,每次全新 prompt,prompt_eval_cached_count=0)】
· 332 token → 2.952 秒 → 112.48 token/s
· 1243 token → 11.963 秒 → 103.90 token/s
· 2463 token → 24.012 秒 → 102.57 token/s
· 4868 token → 52.176 秒 → 93.30 token/s
【num_ctx 截断复核(同一段 3200 字文本)】
· num_ctx=4096 → prompt_eval_count 2050(被吃到上限)
· num_ctx=16384 → prompt_eval_count 4868
失效边界
本结论为本机实测(2026-10-20;24 核 CPU + DDR5-6000 双通道 / Ollama 0.40.4)。速度为 eval_count ÷ eval_duration,取自 Ollama 接口返回值而非手工计时;首轮 load_duration 5.807 秒已剔除。折算带宽 = 权重字节数 × 解码速度,属估算值,仅用于与实测内存带宽做比值。内存带宽由 numpy 块拷贝测得,非厂商标称值,也不代表内存控制器的精确读数。本组测量期间本机后台另有 GPU 负载运行,故全部为 CPU 推理、未采集功耗数据。结论基于 qwen2.5:14b Q4_K_M 这一个模型,不外推到其他参数量与量化档位。
本结论为本机实测(2026-10-20;24 核 CPU + DDR5-6000 双通道 / Ollama 0.40.4)。速度为 eval_count ÷ eval_duration,取自 Ollama 接口返回值而非手工计时;首轮 load_duration 5.807 秒已剔除。折算带宽 = 权重字节数 × 解码速度,属估算值,仅用于与实测内存带宽做比值。内存带宽由 numpy 块拷贝测得,非厂商标称值,也不代表内存控制器的精确读数。本组测量期间本机后台另有 GPU 负载运行,故全部为 CPU 推理、未采集功耗数据。结论基于 qwen2.5:14b Q4_K_M 这一个模型,不外推到其他参数量与量化档位。