Prhub

#43530 Fix CuPy runtime deps and restore humming

原始 PR 作者 mmangkad 合并时间 2026-05-26 20:59 文件变更 5 提交数 3 评论 9 代码增减 +23 / -16

执行摘要

修复 CuPy 14.1.0 的 pytest 冲突并恢复 humming 支持

PR body 指出 #43492 临时回退了 #42540,但 #43528 显示在移除 humming 后相同的 pytest 失败仍然存在。根因是 vllm-openai:nightly 默认安装 KV connectors,lmcache 拉取了最近发布的 cupy-cuda13x==14.1.0,该版本在 PyTorch 自定义 op 注册时通过 inspect 遍历已加载模块并导入 pytest。

建议在 humming.py 中保留适当的安装提示(例如在类 init 中重新添加检查),或迁移至更优雅的延迟错误报告。同时跟踪 cupy 14.1.1 或更高版本,尽快将版本限制从 <14.1.0 放宽为 !=14.1.0

讨论亮点
  • 错误处理退化(gemini-code-assist):移除 assert_humming_available 后,未安装 humming 的用户会遭遇 NameError 而非清晰提示。该评论未得到作者回应,PR 最终合并。
  • CuPy 限制范围(mgoin vs mmangkad):mgoin 提议将 cupy 限制放到基础 deps,但作者确认 humming 不直接依赖 cupy,仅因 lmcache 引入,限定在 kv_connectors.txt 足够。结论:维持原方案。
  • CuPy 上游修复(leofang):CuPy 14.1.1 已修复 pytest 导入问题,建议将限制改为 !=14.1.0。PR 合并时未更新,留待后续处理。

实现拆解

  1. 限制 CuPy 版本:在 requirements/kv_connectors.txt 中添加 cupy-cuda13x < 14.1.0,避免导入 pytest 的 cupy 14.1.0。
  2. 恢复 humming 依赖:在 requirements/cuda.txt 中添加 humming-kernels[cu13]==0.1.2
  3. CUDA 12 变体重写:在 setup.py 的 CUDA 12 路径中添加 humming-kernels[cu13][cu12] 的重写逻辑。
  4. Docker 同步:在 docker/Dockerfile 的两处 sed 命令中添加 humming-kernels 重写,并修正 nvidia-cutlass-dsl 重写模式(从仅匹配 >= 改为通用匹配)。
  5. 重构 humming 导入:将 vllm/model_executor/layers/quantization/humming.py 中的 try/except ModuleNotFoundError 替换为 if current_platform.is_cuda() 条件导入,移除 assert_humming_available() 函数及其在 HummingConfig.__init__ 中的调用。
文件 模块 状态 重要度
vllm/model_executor/layers/quantization/humming.py 量化模块 modified 7.16
setup.py 构建脚本 modified 5.1
docker/Dockerfile Docker modified 3.13
requirements/cuda.txt 依赖配置 modified 2.22
requirements/kv_connectors.txt 依赖配置 modified 1.7

关键符号

assert_humming_available HummingConfig.__init__

关键源码片段

vllm/model_executor/layers/quantization/humming.py core-logic

核心量化模块;导入方式重构(条件导入替代 try/except),移除 assert_humming_available 函数及调用

from vllm.platforms import current_platform# 仅在 CUDA 平台上尝试导入 humming 模块
# 若不在 CUDA 平台或不满足依赖,HummingMethod 将在后续调用中引发 NameError
if current_platform.is_cuda():
    from humming.dtypes import DataType
    from humming.layer import HummingMethod
    from humming.schema import (
        BaseInputSchema,
        BaseWeightSchema,
        HummingInputSchema,
        HummingWeightSchema,
    )
    from humming.utils.weight import quantize_weight
    from vllm.model_executor.layers.fused_moe.experts.fused_humming_moe import (
        BatchedHummingGroupedExperts,
        HummingGroupedExperts,
        HummingIndexedExperts,
        get_humming_moe_gemm_type,
    )if TYPE_CHECKING:
    from humming.schema import (
        BaseInputSchema,
        BaseWeightSchema,
        HummingInputSchema,
        HummingWeightSchema,
    )
    from vllm.model_executor.models.utils import WeightsMapper# 类定义中 __init__ 不再调用 assert_humming_available()
class HummingConfig(QuantizationConfig):
    packed_modules_mapping: dict[str, list[str]] = {}
​
    def __init__(self, full_config: dict[str, Any] | None = None):
        # 之前此处调用了 assert_humming_available(),现在删除了该检查
        # 如果 humming 未安装且平台为 CUDA,后续访问 HummingMethod 会抛出 NameError
        self.full_config: dict[str, Any] = full_config or {}

评论区精华

错误处理回归:assert_humming_available 被移除 正确性

gemini-code-assist 指出移除 assert_humming_available 会导致用户在未安装 humming 时遇到 NameError 而非清晰提示,建议保留检查。

结论:作者未回应,PR 合并时未恢复。虽然条件导入避免了 ModuleNotFoundError,但错误信息仍不够友好。 · unresolved

CuPy 版本限制应否放入基础依赖 设计

mgoin 质疑 cupy 限制应放入 requirements/cuda.txt,因为 humming 可能需要 cupy。作者确认 humming 不直接依赖 cupy,限制只在 lmcache 引入 cupy 时生效,放在 kv_connectors.txt 足够。

结论:维持限制在 kv_connectors.txt,作者理由被接受。 · 已解决

CuPy 14.1.1 上游修复通知 other

leofang 通知 cupy 14.1.1 已修复 pytest 导入问题,建议将限制从 <14.1.0 改为 !=14.1.0。

结论:PR 合并时未更新,留待后续 PR 处理。 · deferred

风险与影响

  • 错误提示退化HummingConfig.__init__ 中移除了 assert_humming_available(),若用户在不支持或未安装 humming 的环境下尝试量化,将得到模糊的 NameError,而非可操作的安装提示。
  • 依赖版本锁定cupy-cuda13x < 14.1.0 会阻止未来可能兼容的更新,需要手动跟进上游修复并放宽限制。
  • Docker 与 setup.py 逻辑重复:Dockerfile 中的 sed 重写与 setup.py 的逻辑重复,且 sed 基于行精确匹配,若 requirements/cuda.txt 格式变化(如换行、注释变更),可能导致重写失效。
  • 平台兼容性:条件导入 if current_platform.is_cuda() 使非 CUDA 平台无法使用 humming,但 humming 本身可能在其他平台不可用,该变化合理但需确保不产生副作用。
  • 用户影响:使用 humming 量化的用户恢复功能,使用 KV connectors 的用户避免 pytest 冲突。未安装 humming 的用户若错误触发相关代码,错误信息变差。
  • 系统影响:CUDA 12 Docker 镜像现在正确安装 cu12 变体,与 pip 安装行为一致。
  • 团队影响:依赖管理复杂度增加,需跟踪 cupy 上游修复并放宽限制。
错误检查退化 依赖版本锁定 Docker 与 setup.py 逻辑重复

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论