Prhub

#36505 [ROCm][Refactor] Enable AWQMarlinConfig on ROCm to use choose_mp_linear_kernel

vllm-project/vllm · 作者 mgehre-amd · 合并时间 2026-03-23 15:36

分析状态 已生成
文件变更 3提交数 2 · 评论 7
代码增减 +143 / -102
rocm refactor performance

执行摘要

重构 ROCm 上 AWQMarlinConfig 以使用 choose_mp_linear_kernel,显著提升 AWQ 模型性能。

根据PR body,'On ROCm, AWQ models were forced through AWQConfig → AWQLinearMethod → ops.awq_gemm, bypassing the choose_mp_linear_kernel framework entirely.' 以及 'This PR corrects it with the approach suggested by @mgoin in the quantization SIG meeting.' 目标是纠正ROCm上AWQ模型的非优化路径,提升性能。

该PR值得精读,尤其是AWQ到标准格式的转换逻辑和平台抽象设计,对于理解vLLM中量化内核框架的集成有参考价值。

讨论亮点

review中主要讨论点:1. 平台检查条件:gshtras建议使用not is_rocm()而非is_cuda()来排除ROCm,以避免混淆其他平台,mgehre-amd采纳此建议并修改代码。2. 性能优化:gemini-code-assist[bot]建议向量化AWQ格式转换中的循环以提高模型加载性能,但讨论中未明确是否采纳该优化。

实现拆解

实现方案包括四个关键改动:1. 在is_awq_marlin_compatible中使用is_cuda_alike()替代is_cuda(),以兼容ROCm。2. 重写AWQMarlinLinearMethod,在process_weights_after_loading中添加AWQ到标准格式的转换,修复非标准位序和打包维度。3. 在query_marlin_supported_quant_types中跳过NVIDIA的device_capability检查,因为ROCm设备能力不映射到NVIDIA计算能力语义。4. 修复ConchLinearKernel以处理对称量化,通过register_parameter(name, None)清除零点属性。

文件 模块 状态 重要度
vllm/model_executor/layers/quantization/awq_marlin.py quantization modified 9.0
vllm/model_executor/layers/quantization/utils/marlin_utils.py quantization utils modified 7.0
vllm/model_executor/kernels/linear/mixed_precision/conch.py kernels/linear modified 5.0

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

关键符号

_convert_awq_to_standard_format AWQMarlinLinearMethod.process_weights_after_loading query_marlin_supported_quant_types

评论区精华

ROCm 平台检查条件设计 设计

gshtras 建议使用 not is_rocm() 而非 is_cuda() 来排除 ROCm,以避免影响其他非 CUDA 平台。mgehre-amd 讨论后采纳并修改代码。

结论:改为使用 not is_rocm() 条件,以更清晰地排除 ROCm 而不影响其他平台。 · 已解决

AWQ 格式转换性能优化建议 性能

gemini-code-assist[bot] 建议向量化 qweight 和 qzeros 的 repacking 循环,以提高模型加载性能。

结论:建议给出,但 review 讨论中未明确是否采纳该优化。 · pending

风险与影响

技术风险包括:1. AWQ格式转换逻辑复杂,可能引入数值错误,影响模型准确性,具体在awq_marlin.py的_convert_awq_to_standard_format函数中。2. 平台检查修改从is_cuda()到not is_rocm(),可能意外影响非CUDA、非ROCm平台(如CPU或其他GPU),但讨论中已考虑此点。3. 性能风险:新代码路径未经充分测试,可能存在性能回归,尤其是模型加载阶段。

影响范围:1. 用户:ROCm用户现在可以使用AWQMarlinConfig,获得显著的性能提升(prefill +57%, decode +73%),改善推理体验。2. 系统:代码更统一,减少了特殊路径,便于维护和未来扩展。3. 团队:需要维护新格式转换代码,并确保在ROCm环境下的稳定性。

格式转换复杂性 平台检查修改 性能回归风险

关联 Issue

未识别关联 Issue

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

完整报告

执行摘要

本PR重构了vLLM中AWQMarlinLinearMethod,使其在ROCm平台上使用choose_mp_linear_kernel框架,解决了原先AWQ模型被迫绕过该框架导致的性能瓶颈。通过添加AWQ到标准格式的转换并调整平台检查,实现了在ROCm设备上使用AWQMarlinConfig,基准测试显示prefill提升57%、decode提升73%的显著性能改进。

功能与动机

在ROCm平台上,AWQ模型原先通过AWQConfig → AWQLinearMethod → ops.awq_gemm路径运行,完全绕过了choose_mp_linear_kernel框架,导致性能受限。如PR body所述:“On ROCm, AWQ models were forced through AWQConfig → AWQLinearMethod → ops.awq_gemm, bypassing the choose_mp_linear_kernel framework entirely。” 本PR旨在纠正此问题,采纳了量化SIG会议中@mgoin的建议,通过重构使AWQMarlinConfig在ROCm上可用,并利用现有框架提升效率。

实现拆解

实现包括四个关键改动:

  1. 兼容性检查:在is_awq_marlin_compatible中使用is_cuda_alike()替代is_cuda(),以扩展支持到ROCm。
  2. AWQMarlinLinearMethod重构:重写该类以使用choose_mp_linear_kernel,在process_weights_after_loading中添加AWQ到标准格式的转换步骤,修复非标准位序和打包维度问题。
    - 转换函数_convert_awq_to_standard_format处理qweight和qzeros,从输出维打包转换为输入维打包。
  3. 平台检查跳过:在query_marlin_supported_quant_types中,对于ROCm跳过NVIDIA的device_capability检查,因为ROCm设备能力语义不匹配。
  4. 对称量化修复:在ConchLinearKernel中,通过register_parameter(name, None)清除零点属性,以处理无零点的对称量化情况。

评论区精华

review讨论聚焦于两个核心点:

  • 平台检查设计:gshtras指出:“Did any other non-cuda platforms rely on this condition? If this is meant to enable ROCm, the better condition would be if not is_rocm than is_cuda”。经过讨论,mgehre-amd采纳建议,将条件改为not is_rocm(),以避免混淆其他平台。
  • 性能优化建议:gemini-code-assist[bot]建议向量化AWQ格式转换中的循环:“This for-loop for repacking qweight can be vectorized for better performance during model loading。” 但讨论中未明确是否采纳此优化。

风险与影响

风险

  • AWQ格式转换逻辑复杂,可能引入数值错误,影响模型推理准确性。
  • 平台检查修改为not is_rocm(),可能意外影响非CUDA、非ROCm平台(如CPU或其他GPU后端),需谨慎测试。
  • 新代码路径增加了维护负担,性能优化建议未确认采纳,可能存在加载性能瓶颈。

影响

  • 用户:ROCm用户现在可以启用AWQMarlinConfig,获得高达73%的解码速度提升,改善大规模部署效率。
  • 系统:代码更统一,减少了特殊路径,便于未来扩展和调试。
  • 团队:需确保转换逻辑的稳定性,并监控ROCm环境下的回归测试。

关联脉络

本PR是vLLM中ROCm支持持续改进的一部分。关联PR包括:

  • PR #36100 “[ROCm] Fix fused_moe_fake signature mismatch and other AITER bugs”:同样针对ROCm量化操作修复,显示了团队对AMD硬件优化的专注。
  • PR #32929 “[FP8]add FP8 WoQ kernel abstraction.”:涉及内核抽象框架重构,与本PR使用choose_mp_linear_kernel的设计一脉相承,反映了vLLM向统一量化内核框架的演进趋势。

参与讨论