Prhub

#25347 [plugin] enable OOT platforms to provide custom quant configs

原始 PR 作者 DevashishLal-CB 合并时间 2026-06-07 12:48 文件变更 3 提交数 12 评论 6 代码增减 +28 / -0

执行摘要

允许 OOT 平台提供自定义量化配置

参考 RFC #26426,目标是形式化硬件抽象层,使 OOT 平台无需侵入核心代码即可提供自定义的量化方案(如 FP8 GEMM、FP8 MoE 内核)。当前 is_[platform]() 条件分支遍布代码,不便于维护和扩展。此 PR 通过平台插件的 get_quantization_config 方法,让硬件平台自行注入量化配置。

值得精读,特别是作为硬件抽象层扩展点的设计范例。建议关注后续是否引入测试以及是否在真实 OOT 平台中使用。设计决策(返回 None vs 抛异常)可以在团队内推广。

讨论亮点
  • alexnails 建议改善导入位置和文档:指出函数内导入 current_platform 应移至文件顶部(采纳,最终改为文件级导入);另要求在 interface.py 的方法中加入更详细的使用说明文档字符串。
  • BBuf 指出默认值设计争议:原实现默认是 raise NotImplementedError,BBuf 认为应直接返回 None 以允许回退到默认配置。作者 DevashishLal-CB 同意并修改为返回 None

实现拆解

  1. 扩展平台抽象接口:在 python/sglang/srt/platforms/interface.pySRTPlatform 类中添加 get_quantization_config(self, quantization: str) -> Optional[Type[QuantizationConfig]] 方法,默认返回 None,表示使用内置配置。OOT 平台可覆盖此方法返回自定义配置。
  2. 修改量化解析逻辑:在 python/sglang/srt/layers/quantization/__init__.pyget_quantization_config 函数中,在已有 CPU 特殊分支之后,增加 if current_platform.is_out_of_tree(): config = current_platform.get_quantization_config(quantization); if config is not None: return config 逻辑,确保 OOT 平台的配置优先。
  3. 更新插件文档:在 docs_new/docs/hardware-platforms/plugin.mdx 的 API 表中增加 get_quantization_config 方法条目,说明其用途和预期行为。
文件 模块 状态 重要度
python/sglang/srt/platforms/interface.py 平台抽象 modified 6.65
python/sglang/srt/layers/quantization/__init__.py 量化层 modified 6.01
docs_new/docs/hardware-platforms/plugin.mdx 文档 modified 3.2

关键符号

SRTPlatform.get_quantization_config get_quantization_config (in quantization/__init__.py)

关键源码片段

python/sglang/srt/platforms/interface.py core-logic

定义 OOT 平台自定义量化配置的接口方法,是本次变更的核心。

# python/sglang/srt/platforms/interface.py (part)from __future__ import annotations
from typing import TYPE_CHECKING, Optional, Typeif TYPE_CHECKING:
    from sglang.srt.layers.quantization.base_config import QuantizationConfigclass SRTPlatform(DeviceMixin):
    # ... 其他方法 ...
​
    def get_quantization_config(
        self, quantization: str
    ) -> Optional[Type[QuantizationConfig]]:
        """返回平台特定的量化配置类。        如果 OOT 平台支持某种量化方案(如 "fp8"),则可覆盖此方法并返回对应的
        QuantizationConfig 子类。若返回 None,则系统使用内置的默认配置。        Args:
            quantization: 量化方案名称,例如 "fp8", "awq"。        Returns:
            配置类,或 None 表示使用默认配置。
        """
        return None
python/sglang/srt/layers/quantization/__init__.py dependency-wiring

修改解析入口函数,集成 OOT 平台配置。

# python/sglang/srt/layers/quantization/__init__.py (part)from sglang.srt.platforms import current_platformdef get_quantization_config(quantization: str) -> Type[QuantizationConfig]:
    # ... 前面的校验和 CPU 特殊分支 ...
​
    # 优先使用 OOT 平台的自定义量化配置
    if current_platform.is_out_of_tree():
        config = current_platform.get_quantization_config(quantization)
​
        # 若平台返回了有效配置则直接使用,否则回退到内置配置
        if config is not None:
            return config
​
    return QUANTIZATION_METHODS[quantization]

评论区精华

导入 current_platform 的位置 style

alexnails 建议将函数内的导入移至文件顶部。

结论:采纳,最终代码在文件顶部导入 from sglang.srt.platforms import current_platform。 · 已解决

默认行为:返回 None 还是 raise NotImplementedError 设计

BBuf 指出返回 None 更合理,允许回退到默认配置;作者同意。

结论:方法默认返回 None,OOT 平台可选择覆盖。 · 已解决

方法文档字符串 documentation

alexnails 请求更详细的使用说明文档字符串。

结论:最终文档字符串描述了参数、返回值及用途。 · 已解决

风险与影响

  • 接口设计风险get_quantization_config 返回 Optional[Type[...]],OOT 平台若返回 None 时退回到内置逻辑,场景清晰。但如果 OOT 平台返回值类型不符合预期,可能导致运行时错误。
  • 回归风险:变更仅影响 is_out_of_tree()True 的路径,内置平台不受影响。但若 current_platform.is_out_of_tree() 实现有误,可能意外跳过内置配置。
  • 缺失测试:PR 未附带 OOT 平台量化配置的单元测试,后续重构时容易退化。
  • 文档依赖:依赖插件开发者正确阅读文档,否则可能误用。
  • 用户/系统:对现有用户无影响,仅为 OOT 平台提供扩展点。
  • 团队:降低新硬件平台适配门槛,促进插件生态。
  • 影响程度:小,+28 行代码,核心逻辑清晰。
扩展点接口设计 缺少测试覆盖

关联 Issue

#26426 [RFC] Building towards a Hardware Abstraction Layer in SGLang

完整报告

参与讨论