执行摘要
- 一句话:FP8块缩放矩阵乘中占位张量优化,吞吐提升2%
- 推荐动作:值得合并的微小性能优化。设计思路(避免不必要的张量初始化)对其他类似占位符场景有参考价值。建议维护者关注后续是否会有子类误用
As参数的风险,可考虑在apply_block_scaled_mm接口文档中强调As在未量化时可能为未初始化值。
功能与动机
作者在分析DeepSeek V4推理Profiling时发现at::native::vectorized_elementwise_kernel在tensorrt_llm::kernels::fp8_blockscale_gemm::scale_1x128_kernel之前被启动,原因是apply_input_quant=False时占位input_scale使用了new_ones()。由于该占位张量实际未被下游apply_block_scaled_mm使用,替换为new_empty()可消除该不必要的核启动。
实现拆解
仅修改一处:在vllm/model_executor/kernels/linear/scaled_mm/BlockScaledMMLinearKernel.py的apply_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(模块 推理内核;类别 source;类型 data-contract): 所有变更均在此文件。将占位 input_scale 张量的创建从 new_ones(1) 改为 new_empty(1),消除了一次不必要的逐元素核启动,从而提升吞吐。
关键符号:未识别
关键源码片段
vllm/model_executor/kernels/linear/scaled_mm/BlockScaledMMLinearKernel.py
所有变更均在此文件。将占位 input_scale 张量的创建从 new_ones(1) 改为 new_empty(1),消除了一次不必要的逐元素核启动,从而提升吞吐。
# vllm/model_executor/kernels/linear/scaled_mm/BlockScaledMMLinearKernel.py
if 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) 以跳过不必要的元素级初始化 —— 该占位张量不会被读取
)
评论区精华
无实质性讨论。仅有一条gemini-code-assist[bot]的自动代码审查,指出无待处理意见;随后mgoin批准了该PR,评价为“Nice find, makes sense to me!”。
风险与影响
- 风险:风险极低。
input_scale在apply_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基准持平)。由于是单行改动且语义清晰,回归风险极低。
- 风险标记:占位常量语义约定(注释约定)
关联脉络
参与讨论