云计算百科
云计算领域专业知识百科平台

CPU 利用率 100%,吞吐却暴跌 40%?一次硬核 C++ 推理引擎的物理内存重构

在配备 128 个物理核心、16 通道 DDR5 内存的双路服务器上部署 70B 级别大模型时,一个经常出现的性能反常现象是:128 个计算核心全线跑满,硬件频率处于标称高位,但自回归解码(Decode)阶段的吞吐仅有 7.6 token/s;而将计算限制在单颗 CPU(64 核)内运行时,解码吞吐反而提升到了 12.8 token/s,性能倒挂幅度超过 40%。

利用 perf stat 观测底层硬件微架构事件可以发现,在全核无干预运行的状态下,系统中超过 62% 的内存读取请求为跨插槽(Socket)的远端访问。本地 DDR5 物理内存的随机访问延迟约为 85 纳秒,而一旦读取请求跨越片间互联链路(如 Intel UPI 或 AMD Infinity Fabric),延迟将攀升至 180 纳秒以上。与此同时,两颗 CPU 之间的片间互联单向有效数据带宽通常仅有 32~36 GB/s,而大模型在 Decode 阶段具有典型的极低算术强度特征(~3.5 FLOP/Byte),生成每个 token 都需遍历全量模型权重。当上百个计算核心并发向对端 Socket 争抢有限的互联带宽时,片间总线迅速陷入队列阻塞,计算核心因长时间等待内存数据而出现大面积流水线停顿。

这一现象本质上是现代多路服务器非一致性内存访问(Non-Uniform Memory Access,NUMA)硬件拓扑与上层软件调度失配的体现。本文从硬件互联拓扑与 ACPI 规范出发,剖析 Linux 内核内存策略及 numa_balancing 的作用机制,解析纯带宽基准测试与大模型访存特征的根本分歧,结合 llama.cpp 在 ggml-cpu.c 中的亲和性与预读控制实现,最后基于硬件性能计数器

赞(0)
未经允许不得转载:网硕互联帮助中心 » CPU 利用率 100%,吞吐却暴跌 40%?一次硬核 C++ 推理引擎的物理内存重构
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!