
Status of CPU-only builds?
快速结论:当你尝试在无 CUDA 的环境(如 macOS arm64)中编译 xFormers 时,可能会遇到 fatal error: 'cuda.h' file not found。xFormers 的官方维护者已明确表示“不真正支持 CPU-only 构建”,但社区反馈此前(v0.0.33.post2 及更早)是能用的。该问题已在 commit 88dcc2ce379f699557714561c4a619cadc4c8ad5 中重新启用了 CPU-only 构建的支持,优先尝试使用该 commit 或更新版本。
问题场景
在 macOS(arm64)等没有 CUDA 的环境中,通过 conda-forge 构建 xFormers v0.0.34 时触发。用户尝试编译 CPU-only 版本的 xFormers,但构建系统无条件要求 CUDA 头文件。
报错原文
In file included from xformers/csrc/pt_stable_utils.cpp:5:
xformers/csrc/pt_stable_utils.h:12:10: fatal error: 'cuda.h' file not found
12 | #include <cuda.h>
| ^~~~~~~~
1 error generated.
原因分析
可能原因:xFormers 从 v0.0.34 版本开始,构建脚本中强制了 CUDA 依赖,即使编译目标是无 CUDA 的 CPU-only 环境,也会尝试包含 cuda.h。官方维护者指出,xFormers 的核心价值在于其 CUDA 内核,CPU-only 构建并非官方支持的组合。但社区反馈在以前版本(如 0.0.33.post2)中 CPU-only 构建是可用的,且能提供部分不依赖 CUDA 的算子(如 cutlass 和 triton 相关算子)。
环境排查
- 操作系统:macOS(如 arm64 / osx-64)或其他无 CUDA 的平台
- xFormers 版本:至少从 v0.0.34 开始出现问题(conda-forge feedstock PR #66)
- Python 版本:例如 3.11 或 3.14(参见报错中的
-c python3.11) - PyTorch 版本:例如 2.10.0(参见报错后的可用性报告)
- 确认环境中无 CUDA 工具链,且未设置 CUDA_HOME 等环境变量
解决步骤
- 确认你的 xFormers 版本是否等于或高于 v0.0.34。如果是,立即检查是否有修复版本的发布。
- 如果希望保留 CPU-only 构建,参考 Issue 中给出的修复 commit:
88dcc2ce379f699557714561c4a619cadc4c8ad5(合并到主分支,位于 facebookresearch/xformers)。该 commit 重新启用了 CPU-only 构建。 - 如果你从源码构建,可以尝试直接 git checkout 到该 commit 或包含该 commit 之后的版本,然后重新构建。
- 如果你是 conda-forge 用户,可以关注 conda-forge/xformers-feedstock 中是否已更新到包含该修复的版本。如果没有,可以考虑临时使用 pip 从 GitHub 源码安装(基于上述 commit)。
- 若仍遇到问题,请确认编译时没有设置需要 CUDA 的环境变量(如
TORCH_CUDA_ARCH_LIST),并确保torch.cuda.is_available()返回 False。
验证方法
成功编译后,运行以下 Python 代码确认 xFormers 可以正常导入且无 CUDA 相关的报错:
import xformers
print(xformers.__version__)
# 如果无 CUDA,以下应返回不包含 CUDA 的错误消息
print(xformers._is_triton_available())
此外,可参考 Issue 中展示的可用性报告模板,运行 python -m xformers.info 查看算子可用性状态,确认没有出现 fatal error: 'cuda.h' file not found 的编译错误。



