主要优化点
PR标题:
Fuse
q_a_proj
andkv_a_proj
for DeepSeek models
动机(Motivation):
在 DeepSeek V3 模型的 Self-Attention 结构中,
q_a_proj
(query after attention projection)和 kv_a_proj
(key-value after attention projection)都以同一个 hidden state 作为输入。
因此可以把它们合并为一个模块,
这样:
- 只需要 一次 DeepGemm 调用(矩阵乘),
- 减少了一次 kernel launch 开销,
- 提升整体推理速度。
具体修改(Modifications)
- 当
q_lora_rank > 0
(DeepSeek V3 和 DeepSeek R1 确实满足这个条件)时:self.q_a_proj
和self.kv_a_proj_with_mqa
合并成新的self.fused_qkv_a_proj_with_mqa
。
- 加载权重时:
- 把
q_a_proj
和kv_a_proj
的权重(weights)和 block scales 拼接(concatenate)后加载到新的 fused 模块里。
- 把
准确率验证(Accuracy Test)
对比基线,性能没有下降,准确率保持稳定:
Benchmark | 准确率 (Accuracy) |
---|---|
GSM8K(数学推理) | 0.951 |
MMLU(多领域理解) | 0.875 |
🚀 性能提升(Benchmark Results)
对比主分支(main branch)和这个 PR:
Batch Size | 原来 Latency | 优化后 Latency | Latency 降低 | Throughput 提升 |
---|---|---|---|---|
1 | 10.85s | 10.41s | ↓ 4.2% | ↑ |
32 | 16.83s | 16.21s | ↓ 3.8% | ↑ |
特别是 小 batch size(bs=1) 提升明显,说明单次推理(如在线服务)也能受益。