Prhub

#43677 [Perf] Optimize Fp8BlockScaledMMLinearKernel input_scale tensor using new_empty()

原始 PR 作者 xyang16 合并时间 2026-05-27 10:55 文件变更 1 提交数 2 评论 0 代码增减 +1 / -1

执行摘要

FP8 块缩放矩阵乘中占位张量优化,吞吐提升 2%

作者在分析DeepSeek V4推理Profiling时发现at::native::vectorized_elementwise_kerneltensorrt_llm::kernels::fp8_blockscale_gemm::scale_1x128_kernel之前被启动,原因是apply_input_quant=False时占位input_scale使用了new_ones()。由于该占位张量实际未被下游apply_block_scaled_mm使用,替换为new_empty()可消除该不必要的核启动。

值得合并的微小性能优化。设计思路(避免不必要的张量初始化)对其他类似占位符场景有参考价值。建议维护者关注后续是否会有子类误用As参数的风险,可考虑在apply_block_scaled_mm接口文档中强调As在未量化时可能为未初始化值。

讨论亮点

无实质性讨论。仅有一条gemini-code-assist[bot]的自动代码审查,指出无待处理意见;随后mgoin批准了该PR,评价为“Nice find, makes sense to me!”。

实现拆解

仅修改一处:在vllm/model_executor/kernels/linear/scaled_mm/BlockScaledMMLinearKernel.pyapply_weights方法内,将第129行input_2d.new_ones(1)替换为input_2d.new_empty(1)。该改动位于apply_input_quant=False分支,此时input_scale仅作为占位符传递给apply_block_scaled_mm,其值不会被读取(具体可参考flashinfer.py中对应实现)。

文件 模块 状态 重要度
vllm/model_executor/kernels/linear/scaled_mm/BlockScaledMMLinearKernel.py 推理内核 modified 5.79

关键源码片段

vllm/model_executor/kernels/linear/scaled_mm/BlockScaledMMLinearKernel.py data-contract

所有变更均在此文件。将占位 `input_scale` 张量的创建从 `new_ones(1)` 改为 `new_empty(1)`,消除了一次不必要的逐元素核启动,从而提升吞吐。

# vllm/model_executor/kernels/linear/scaled_mm/BlockScaledMMLinearKernel.pyif self.apply_input_quant:
    q_input, input_scale = self.quant_fp8(
        input_2d, input_scale, scale_up, use_triton=self.use_triton
    )
else:
    q_input = input_2d
    # Provide a concrete placeholder so apply_block_scaled_mm args are
    # always Tensors. Subclasses with apply_input_quant=False must not
    # use As in apply_block_scaled_mm.
    input_scale = (
        input_scale if input_scale is not None else input_2d.new_empty(1)
        # 改为 new_empty(1) 以跳过不必要的元素级初始化 —— 该占位张量不会被读取
    )

评论区精华

没有提炼出高价值讨论线程

当前评论区没有形成足够清晰的争议点或结论,后续有更多讨论时会体现在这里。

风险与影响

风险极低。input_scaleapply_input_quant=False时仅作占位符传递,不会被读取。new_empty()分配未初始化内存,但后续不会访问其值,因此不会引发未定义行为。需确保所有子类在apply_input_quant=False时确实不使用 As 参数,目前代码注释已声明此约定。建议添加明确注释或在将来重构为更安全的模式(如传递 None 并从 apply_block_scaled_mm 方处理)。

影响范围仅限Fp8BlockScaledMMLinearKernel及其子类(如Fp8BlockScaledDynamicMMLinearKernel),具体为当apply_input_quant=False时的代码路径。收益:H200上DeepSeek V4-Pro推理e2e输出token吞吐提升约2%。对准确性无影响(GSM8K基准持平)。由于是单行改动且语义清晰,回归风险极低。

占位常量语义约定(注释约定)

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论