AI Pulse

2013 年的 K40c,跑起了现代 LLM 训练栈

移植了什么

作者把现代 LLM 训练栈搬到了 Windows 上的旧 CUDA 显卡。覆盖范围是 SM 3.5 到 SM 7.5。SM 是显卡的计算能力等级编号,数字越小,卡越老。

组件是重新编译的。PyTorch 用 v2.7.1,基于 CUDA 11.8 自定义编译。编译时保留了旧版 SASS。SASS 是老显卡能直接执行的机器码,不只剩新架构的代码路径。causal-conv1d 用 v1.7.0;mamba_ssm(Mamba-1)走纯原生 CUDA 内核。

多卡也没落下。Windows 上实现了 NCCL(DDP),可以在多块 Kepler 显卡之间做分布式训练。Kepler 是那一代架构的代号,2013 年的 Tesla K40c 属于它。

K40c 上的实测

Mamba-1 的纯 CUDA 版本在 SM 3.5 到 SM 7.5 上功能完整,执行也做了优化。测试跑在 2013 年的 NVIDIA Tesla K40c 上,跟 PyTorch 参考实现比,最大绝对误差 3.8e-06。

计算能力 3.5 的卡上,序列长度 64 到 2048 的用例全部通过。单次耗时在 1.00ms 到 2.57ms 之间。误差落在 1e-06 量级,说明这组用例的数值跟参考实现对得上,不是勉强跑通。

Mamba-2 和 Mamba-3 暂时不行

Mamba-2 和 Mamba-3 目前只在 Turing(SM 7.5)及更新的架构上有优化执行。它们依赖 Triton 和 TileLang,这两套工具没有覆盖老卡。

作者留了退路。在旧硬件上,包会检测出不可用的 Triton 依赖模块,自动回退到纯 CUDA 的 Mamba-1 实现。装得上,跑得起来,只是跑的不是最新那一代。

把 Mamba-2 和 Mamba-3 回移植到旧架构列进了后续计划。时间表没写,要迈过哪些坎也没写。

需要更多旧卡来测

作者本地只有 Kepler 硬件,所以特别希望有人拿 Maxwell 和 Pascal 的卡来试。任何旧 GPU 上的基准测试、性能对比或 profiling 数据都欢迎。

评论区补了几条线索。有人说 V100 有 Triton 的移植版本,还整理了一份 SM70/Volta 的资源列表。有人提到 1Cat 有 mamba2,mamba3 太新,不确定跟上了没有。r/P100Users 这类按旧卡聚起来的社区也被点了出来。

项目基于 Tri Dao 和 Albert Gu 的研究与原始实现。Windows NCCL 在多卡训练里能加速多少、稳不稳,目前没有数据。K40c 上的那组测试只证明了一件事:数值对得上。

关键事实

阅读原文
📚 相关主题 开源AI开发硬件适配

订阅 AI Pulse

每天 08:00 · 12:30 · 18:30 · 23:50 更新