DiffDock 40 系显卡装不上?openfold 编译与 CUDA 版本的三个硬约束

直接回答:DiffDock 装不上,最常见的两个原因是”新卡 + 旧 CUDA 栈”。 它的环境里有 openfold 这类需要现场编译的组件,而官方环境锁的是 PyTorch cu117 一线,所以在 RTX 40 系这样的新架构上,编译阶段就会失败。

三句话记住:

  • 新卡不等于好装:nvcc fatal : Unsupported gpu architecture 'compute_89' 就是不支持新架构的编译错误;
  • 宿主机 CUDA 与 PyTorch 编译版本必须一致:报错会直接写 The detected CUDA version (12.0) mismatches the version that was used to compile PyTorch (11.7);
  • 这类软件优先用官方容器交付:DiffDock 官方提供 Dockerfile,不要在新卡上现场编译 openfold。

一、真实报错长这样(两条官方 issue)

报错 A:新卡编译失败 + CUDA 版本不匹配(gcorso/DiffDock#228,2024-05-24)

按官方 README 建环境,卡在 openfold 这一步,关键原文:

nvcc fatal : Unsupported gpu architecture 'compute_89'
RuntimeError: The detected CUDA version (12.0) mismatches the version that was used to compile PyTorch (11.7). Please make sure to use the same CUDA versions.
ERROR: Failed building wheel for openfold

三点判读:

  • compute_89 = Ada 架构(RTX 40 系、L40 一类),说明报错者用的是新卡;
  • 两条原因互相独立又叠加:一是 nvcc 不支持新架构 → 编译不过;二是宿主机 CUDA 12.0 与 torch 的 cu117 不一致 → torch 的扩展构建直接拒绝;
  • 这条 issue 至今没有官方结论(最后回复 2025-03-09),所以不要指望”照着文档改改就能过”。

报错 B:conda env create 第一步就失败(gcorso/DiffDock#44)

按 README 建环境,pip 阶段崩溃:

error: subprocess-exited-with-error
× python setup.py bdist_wheel did not run successfully.
╰─> [73 lines of output]
CondaEnvException: Pip failed

这条 issue 有 18 条评论——评论多通常说明撞的人多,属高频问题。

二、三个硬约束(装之前先核对)

# 约束 怎么查 不满足会怎样
1 卡的计算能力要与 CUDA 工具链支持的架构匹配 nvidia-smi --query-gpu=name,compute_cap --format=csv Unsupported gpu architecture 'compute_89'
2 宿主机 CUDA 版本要与 PyTorch 编译版本一致 nvcc --version 对比 python -c "import torch; print(torch.version.cuda)" detected CUDA version (12.0) mismatches ... (11.7)
3 需现场编译的组件能否编译成功 看报错卡在哪个包(PyG 系列扩展、openfold、prody 最容易) Failed building wheel for openfold / CondaEnvException: Pip failed

官方环境口径:PyTorch 1.13.1+cu117。

三、正确做法:容器优先

DiffDock 官方提供了 Dockerfile。对这类”多组件 + 现场编译”的软件,容器优先不是偷懒,而是把失败风险隔离:

做法 结果
在新卡上现场编译 openfold 大概率失败,且排查要几个小时
用官方容器(配好 GPU 直通) 不受宿主机 CUDA 小版本干扰,交付时间可控
裸装但强制对齐 cu117 可行但脆弱,系统升级驱动/内核后容易复发

容器交付的检查项:

① nvidia-container-toolkit 已装
② docker run --gpus all <image> nvidia-smi 能看到卡
③ import torch / torch_geometric / e3nn 正常
④ python -m inference --help 能跑起来(官方入口)
⑤ 记录镜像版本与提交(tag / digest)

四、同族的软件有哪些(一起记)

下面这几个软件都是”锁定旧 CUDA 栈 + 需要现场编译”的类型,在新卡上的表现高度相似:

软件 典型症状
DiffDock openfold 编译失败、CUDA 12 与 cu117 冲突
ESMFold openfold 必须用指定 revision;pip 包 extra 缺失
RFdiffusion 官方 yml 只为 CUDA 11.1,装完退回 CPU
ProteinMPNN 装了显卡却在用 CPU

采购含义:如果课题组要用这一类工具,“新卡”不是卖点,交付能力才是——同样是 4090,能不能把环境装通、能不能在容器里跑起来,直接决定这台机器多久能出结果。

五、询价前问清这 5 件事

# 要问的 为什么
1 用哪张卡?(是否 RTX 40 系 / Ada 架构) 决定编译路线能不能走通
2 有没有用过官方 Docker? 有容器路线就不用现场编译
3 只跑对接,还是要连带训练/微调? 训练对显存与驱动的要求更高
4 数据规模多大(蛋白 / 配体数量)? 决定跑批时间与存储
5 谁来长期维护这套环境? 环境脆弱,得有负责人

常见问题

DiffDock 装不上是不是显卡太新了?

恰好相反——往往是”卡太新”导致的。官方 issue 里的报错 nvcc fatal : Unsupported gpu architecture 'compute_89',说明当时使用的 CUDA 工具链不支持新架构(compute_89 指 Ada,也就是 RTX 40 系这一档),编译 openfold 时直接失败。可行的做法不是硬编译,而是走官方容器:容器里已经配好匹配的 CUDA 与依赖,不受宿主机 CUDA 小版本影响。

报 CUDA version (12.0) mismatches PyTorch (11.7) 怎么解决?

这是”宿主机 CUDA 与 PyTorch 编译所用 CUDA 不一致”的标准报错。官方环境锁的是 PyTorch 1.13.1+cu117,如果机器上装的是 CUDA 12.0 的工具链,torch 的扩展构建会直接拒绝。解决方向有两个:一是让环境与官方口径对齐(cu117 一线);二是直接用官方容器(更推荐,改动面最小)。先跑 nvcc --version 和 python -c "import torch; print(torch.version.cuda)",把两个版本摆出来再动手。

conda env create 报 CondaEnvException: Pip failed 是哪里错了?

报错停在 pip 的 wheel 构建阶段(bdist_wheel did not run successfully),说明是某个需要现场编译的组件没编过。DiffDock 的环境里有多个这类组件(PyG 系列扩展、openfold、prody 一类),只要 CUDA 工具链与 torch 版本对不上就会失败。这条 issue 有 18 条评论,说明是高频情况。实践建议是:先试一次 conda env create,失败就直接切官方 Docker,不要在现场排查几个小时。

跑这类工具到底需不需要买新卡?

要看你跑什么。如果主要是推理/跑批(分子对接、结构预测),那么”显存够用 + 环境能装通”比最新架构重要得多;如果要自己训练/微调,才需要综合看显存与算力。所以更稳妥的顺序是:先确认要用的软件在什么环境下能跑通,再按显存与并发定卡,而不是先买卡再想办法装环境。


如果你们正在给课题组或实验室看机器,把 要跑的软件 / 模型、大概几个人用、预算范围 发我一句,我按这个给你一份带参数清单的配置思路——不推销最高配,只帮你把钱花在真正影响出结果的地方。

微信二维码:服务器定制与GPU算力咨询

相关阅读

发表评论

服务与能力  | GPU选型工具  | 交付实拍  | 常见问题  | 产品中心  | 关于我们
✕ 扫码加微信 微信二维码:服务器定制与GPU算力咨询
回复「配置单」
领《高校/实验室 GPU 服务器采购询价清单》
上海皓荃智能科技有限公司|服务器整机定制 · GPU 算力方案 · 机房改造 |可开增值税专用发票|上海及华东地区可上门 服务对象:高校课题组 / 科研院所 / 医院影像与生物信息 / 企业算法团队