Prhub

#42438 [Bugfix] Install nvidia-cutlass-dsl[cu13] extra on CUDA 13 platforms

原始 PR 作者 ZJY0516 合并时间 2026-05-13 16:57 文件变更 4 提交数 3 评论 5 代码增减 +14 / -2

执行摘要

修复 CUDA 13 平台 nvidia-cutlass-dsl [cu13] 依赖缺失

B300 上运行 nvidia/Kimi-K2.5-NVFP4 等模型时因缺少 [cu13] extra 导致 AssertionError: Only SM 10.x and 11.x are supported。详细见 PR body。

值得关注其设计思路:让最新平台的需求作为默认值,通过向后兼容的方式处理旧平台,这是一种更可扩展的依赖管理策略。

讨论亮点

Harry-Chen 在 review 中指出直接在 Dockerfile 中用 sed 添加 extra 的方式不够优雅,建议将 [cu13] 改为默认值并在 CUDA 12 时移除,该建议被采纳。另外,chatgpt-codex-connector 提醒了 Docker 和 CI 构建路径会绕过 setup.py 的修改,需要额外处理。

实现拆解

本 PR 包含以下步骤修改依赖逻辑:

  1. 修改 requirements/cuda.txt:将 nvidia-cutlass-dsl>=4.4.2 改为 nvidia-cutlass-dsl[cu13]>=4.4.2,使新版本默认安装 CUDA 13 额外的动态库。
  2. 修改 setup.py:在 get_requirements() 函数中,读取 CUDA requirements 后,若检测到 CUDA major 版本为 12,则把 nvidia-cutlass-dsl[cu13] 替换回 nvidia-cutlass-dsl,兼容旧平台。
  3. 修改 docker/Dockerfile:在两个 pip install 步骤(Dockerfile 第 202 行和第 633 行)之前,通过 sed 命令在 CUDA 12 上移除 [cu13] extra。
  4. 修改 .github/workflows/scripts/build.sh:在 pip install 之前做同样的 sed 替换,确保 CI 构建的一致性。
文件 模块 状态 重要度
setup.py 构建配置 modified 6.13
docker/Dockerfile Docker 构建 modified 4.13
.github/workflows/scripts/build.sh CI 脚本 modified 3.45
requirements/cuda.txt 依赖配置 modified 2.52

关键符号

get_requirements

关键源码片段

setup.py core-logic

核心逻辑,控制 Python 安装时的依赖选择。根据 CUDA 版本动态调整 nvidia-cutlass-dsl extra。

# setup.py - get_requirements 函数中 CUDA 分支的核心逻辑
if _is_cuda():
    requirements = _read_requirements("cuda.txt")
    cuda_major, cuda_minor = torch.version.cuda.split(".")
    modified_requirements = []
    for req in requirements:
        # vllm-flash-attn 仅构建于 CUDA 12.x,其他版本跳过
        if "vllm-flash-attn" in req and cuda_major != "12":
            continue
        # CUDA 12 上无需 [cu13] extra,回退到基础包
        if "nvidia-cutlass-dsl[cu13]" in req and cuda_major == "12":
            req = req.replace("nvidia-cutlass-dsl[cu13]", "nvidia-cutlass-dsl")
        modified_requirements.append(req)
    requirements = modified_requirements

评论区精华

建议默认 [cu13] 并在 CUDA 12 移除 设计

Harry-Chen 指出 'The patching looks a little bit dirty... making [cuda13] a default... is a better choice.'

结论:作者同意并修改实现,改为默认 [cu13],CUDA 12 时移除。 · 已解决

Docker/CI 路径绕过 setup.py 修改 正确性

chatgpt-codex-connector 指出 Dockerfile 和 build.sh 安装 -r requirements/cuda.txt 在 setup.py 之前,因此 setup.py 的修改对它们无效。

结论:开发者在 Dockerfile 和 build.sh 中添加了同样的 sed 逻辑。 · 已解决

风险与影响

Dockerfile 和 build.sh 中的 sed 命令依赖精确模式匹配,若后续包版本格式变化可能导致替换失败。但当前包名是硬编码,风险可控。CUDA 12 用户安装时不会包含 [cu13] extra,功能正常。

修复影响:CUDA 13(B300)用户安装依赖后能正常启动模型推理。CUDA 12 用户无感知,因为 extra 被移除。团队维护成本增加少量条件逻辑,但降低了未来 CUDA 版本适配的摩擦。

sed 模式匹配风险 CUDA 12.x 兼容性验证不足

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论