张芷铭的个人博客

MFU(Model FLOPs Utilization)是LLM推理性能的本质标尺,衡量硬件算力的有效利用率。2nd Forward FLOPs是决定推理上限的关键,占推理总耗时的90%以上。

MFU核心定义

MFU = 模型有效算力 / 硬件理论峰值算力

示例:昇腾910B FP16峰值320 TFLOPS,跑2B模型实际有效算力4 TFLOPS,MFU = 4/320 = 1.25%——硬件98%算力闲置。

关键误区:MFU ≠ 硬件利用率

指标含义与MFU区别
显存利用率显存占用比例vLLM预分配KV Cache占满显存,但计算量极低,MFU可能仅1%
NPU/SM Core利用率硬件核心繁忙程度Core可能在做数据搬运、访存等待,非有效计算,利用率90%而MFU<10%
MFU模型有效算力占比唯一真实反映「硬件是否被模型喂饱」的指标

MFU计算公式

$$\text{MFU} = \frac{2 \times N \times \text{总输出tokens/s}}{\text{硬件理论峰值FLOPs/s}}$$

硬件FP16/BF16峰值算力

硬件峰值算力
昇腾910B320 TFLOPS
NVIDIA A100312 TFLOPS
NVIDIA H100989 TFLOPS
昇腾310B16 TFLOPS

1st Forward vs 2nd Forward

维度1st Forward(Prefill)2nd Forward(Decode)
执行时机处理Prompt,仅1次每生成1个token执行1次
输入长度Prompt完整长度L单个token
单次FLOPs$2 \times N \times L$$2 \times N$
耗时占比<10%>90%
瓶颈类型计算Bound小batch访存Bound,大batch计算Bound

2nd Forward FLOPs推导:Decoder-only LLM的95%参数来自线性层,KV Cache让2nd Forward仅需计算当前token,有效FLOPs ≈ $2 \times N$。

MFU优化实践

vLLM配置示例

1
2
3
4
5
6
python -m vllm.entrypoints.offline_inference \
  --model /path/to/model \
  --max-batch-size 128 \
  --max-num-batched-tokens 65536 \
  --gpu-memory-utilization 0.95 \
  --log-stats

优化策略

策略说明
拉高batch size提升单次2nd Forward计算密度,核心优化手段
开启continuous batching合并多请求的2nd Forward,访存瓶颈转计算瓶颈
配置KV Cache复用历史K/V,避免重复计算

MFU目标区间

模型规模离线推理MFU目标
2B小模型20%-30%
70B大模型40%+

常见误区

误区事实
显存占满=MFU高显存可能是KV Cache预分配,无对应计算量
MFU越高越好在线推理需平衡吞吐与时延,大batch会增时延
小模型和大模型MFU目标相同小模型访存密集,天然MFU低;大模型计算密集,易达高MFU
Core利用率高=MFU高Core可能在数据搬运、无效调度,非有效计算

Comments