# PR #42438 完整报告

- 仓库：`vllm-project/vllm`
- 标题：[Bugfix] Install nvidia-cutlass-dsl[cu13] extra on CUDA 13 platforms
- 合并时间：2026-05-13 16:57
- 原文链接：http://prhub.com.cn/vllm-project/vllm/pull/42438

---

# 执行摘要

- 一句话：修复 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。

# 实现拆解

本 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`（模块 构建配置；类别 source；类型 core-logic；符号 get_requirements）: 核心逻辑，控制 Python 安装时的依赖选择。根据 CUDA 版本动态调整 nvidia-cutlass-dsl extra。
- `docker/Dockerfile`（模块 Docker 构建；类别 infra；类型 infrastructure）: Docker 构建环境，直接安装 requirements/cuda.txt，需要同步修改。
- `.github/workflows/scripts/build.sh`（模块 CI 脚本；类别 infra；类型 infrastructure）: CI wheel 构建脚本，同样绕过 setup.py。
- `requirements/cuda.txt`（模块 依赖配置；类别 config；类型 configuration）: 依赖声明文件，决定安装包名。

关键符号：get_requirements

## 关键源码片段

### `setup.py`

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

```python
# 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

```

# 评论区精华

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

- 建议默认 [cu13] 并在 CUDA 12 移除 (design): 作者同意并修改实现，改为默认 [cu13]，CUDA 12 时移除。
- Docker/CI 路径绕过 setup.py 修改 (correctness): 开发者在 Dockerfile 和 build.sh 中添加了同样的 sed 逻辑。

# 风险与影响

- 风险：Dockerfile 和 build.sh 中的 sed 命令依赖精确模式匹配，若后续包版本格式变化可能导致替换失败。但当前包名是硬编码，风险可控。CUDA 12 用户安装时不会包含 [cu13] extra，功能正常。
- 影响：修复影响：CUDA 13（B300）用户安装依赖后能正常启动模型推理。CUDA 12 用户无感知，因为 extra 被移除。团队维护成本增加少量条件逻辑，但降低了未来 CUDA 版本适配的摩擦。
- 风险标记：sed 模式匹配风险 , CUDA 12.x 兼容性验证不足

# 关联脉络

- 暂无明显关联 PR