Prhub

#13121 [CPU] add kernel apply_rotary_pos_emb_cpu for Qwen3-VL and Qwen3-Omni

原始 PR 作者 blzheng 合并时间 2026-03-30 14:43 文件变更 4 提交数 13 评论 2 代码增减 +303 / -1

执行摘要

为 Qwen3-VL 和 Qwen3-Omni 添加 CPU 旋转位置嵌入核函数以优化性能。

根据 PR 标题和 body,动机是添加 CPU 核函数以支持 Qwen3-VL 和 Qwen3-Omni 模型的旋转位置嵌入,旨在优化这些模型在 CPU 硬件上的推理性能,具体通过实现高效的内核来替代原生实现。

建议精读此 PR,特别是核函数实现中的向量化技巧和并行化策略,对于优化 CPU 推理性能有借鉴价值。关注 rope.cpp 中的算法设计和 utils.py 中的条件调度逻辑。

讨论亮点

review 中仅有一条评论,来自 mingfeima,建议在核函数中使用 parallel_for 进行并行优化,以提升性能。作者在后续提交(如 'resovle comments' 和 'add support for bf16 sincos')中采纳此建议,表明讨论聚焦于性能优化且已解决。

实现拆解

实现分为三个主要部分:

1) 在 python/sglang/srt/layers/rotary_embedding/utils.py 中修改调度逻辑,当检测到 CPU 且支持 AMX 时,使用新核函数 apply_rotary_pos_emb_cpu
2) 在 sgl-kernel/csrc/cpu/rope.cpp 中实现核心核函数 apply_rotary_pos_emb_kernel_impl,采用向量化(如 at::vec::Vectorized)和 parallel_for 进行并行计算,支持 BF16 和 FP32 数据类型;
3) 在 sgl-kernel/csrc/cpu/torch_extension_cpu.cpp 中注册核函数,并在 test/srt/cpu/test_rope.py 中添加测试函数 test_apply_rotary_pos_emb 验证正确性。

文件 模块 状态 重要度
sgl-kernel/csrc/cpu/rope.cpp sgl-kernel/cpu/rope modified 8.0
python/sglang/srt/layers/rotary_embedding/utils.py sglang/srt/layers/rotary_embedding modified 6.0
test/srt/cpu/test_rope.py test/cpu/rope modified 5.0

关键符号

apply_rotary_pos_emb_kernel_impl apply_rotary_pos_emb_cpu

分析完成后,这里会展示 LLM 生成的相对完整源码片段和详细注释。

评论区精华

使用 parallel_for 进行并行化优化 性能

mingfeima 在 review 中建议在核函数实现中使用 parallel_for 以提升计算并行度。

结论:作者采纳建议,在后续提交中优化了核函数,添加了 parallel_for 调用。 · 已解决

风险与影响

技术风险包括:

1) 核函数正确性风险:新实现的 apply_rotary_pos_emb_kernel_impl 可能因算法错误导致输出偏差,测试覆盖了常见情况但可能遗漏边缘场景(如非连续输入,通过提交 'support non-contiguous input' 部分缓解);
2) 平台依赖性风险:性能优化依赖于 CPU 的 AMX 支持,在不支持的平台上回退到原生实现可能影响性能一致性;
3) 回归风险:修改 utils.py 中的调度逻辑可能意外影响其他模型的旋转嵌入执行路径,需确保兼容性。

影响范围:

1) 对用户:Qwen3-VL 和 Qwen3-Omni 模型在支持 AMX 的 CPU 上推理速度可能显著提升,增强硬件利用率;
2) 对系统:扩展了 SGLang 的 CPU 核函数库,提升多模型支持能力,但增加了代码复杂性和维护负担;
3) 对团队:需确保测试充分以维护代码质量,并为类似 CPU 优化提供参考模式。

新核函数正确性风险 平台依赖性风险 调度逻辑变更风险

关联 Issue

未识别关联 Issue

当前没有检测到明确关联的 Issue 链接,后续同步到相关引用后会出现在这里。

完整报告

参与讨论