一张24GB显存的RTX 3090,能跑得动70B参数的大模型吗?

按照常理,这纯属“想桃子”。

Llama 3.1 70B即便经过量化,通常也得两张甚至四张高端卡才能勉强塞得下。

但最近,GitHub上出现了一个硬核项目,愣是把这件不可能的事变成了现实。

显存不够,硬盘来凑。

只不过,这并不是简单的虚拟内存,而是一次绕过CPU的外科手术级数据搬运。

把大象塞进冰箱,还得绕过CPU

通常我们跑大模型,权重数据得先从硬盘读到内存,再由CPU搬运到显存,最后GPU才开始计算。

这一路关卡重重,CPU就像是那个不仅要签字还要亲自搬砖的“中间商”,效率低得令人发指。

这个名为ntransformer的项目,直接把这个中间商开除了。

它实现了一套NVMe Direct Streaming机制。

简单来说,就是让NVMe SSD通过DMA(直接内存访问),把数据直接扔给GPU。

NVMe SSD → (DMA) → Pinned Staging → (PCIe H2D) → GPU Buffers → Compute

image

数据路径被彻底重构。

模型文件通过dd命令直接写入NVMe原始块设备,然后在推理时,每一层权重(大约670MB)通过670条NVMe指令直接调用。

老实讲,这种操作挺危险的,但也极客味十足。

项目脚本甚至需要手动绑定VFIO驱动,强制设置PCIe电源状态。

0.2 tok/s的浪漫

能跑起来是一回事,好不好用又是另一回事。

根据项目描述,对于70B的Q6_K量化模型,读取每一层大约需要202毫秒。

Llama 3.1 70B有80层,这意味着生成一个Token,光是把权重搬运一遍,就需要十几秒。

评论区里有眼尖的开发者直接算了一笔账:

0.2 tok/s is fine for experimentation, but it is not interactive in any meaningful sense.

每秒0.2个Token。

说实话,这个速度确实有点“感人”。

你问它一句“你好”,它可能得想个半分钟才开口。

有意思的是,项目方宣称实现了“33倍加速”。

这其实是个相对概念,相比于最初那种完全没优化的搬运方式,现在的方案通过双缓冲和流水线重叠,确实快了很多。

但相比于把模型全塞进显存的“土豪”玩法,这依然是自行车追跑车。

——这不禁让小编想起自己的毕业论文,多少速度你别管,反正得有加速,得有创新点,

该说不说,俺当时也用了双缓冲和pipeline。

个人觉得,这就像是用软盘启动了Windows 11。你能做到这件事本身确实很牛,但真要拿它来办公,恐怕得把人急出心梗。

image

三层缓存,榨干每一滴性能

虽然速度感人,但这个项目的工程实现依然堪称教科书级。

为了在24GB显存的“螺蛳壳里做道场”,作者设计了一套3层自适应缓存架构

这就好比一个精明的仓库管理员:

  • Tier A(常住显存): 把前29层常驻在显存里。这部分不用搬运,计算时零I/O开销。
  • Tier B(内存缓冲): 中间层放在锁定的内存里,通过异步DMA传给GPU。
  • Tier C(硬盘回退): 实在放不下的,就老老实实待在NVMe里,随用随调。

这种分层策略,让单张3090在显存捉襟见肘的情况下,硬是撑起了70B的骨架。项目甚至支持Q4_0、Q8_0、Q6_K等多种量化格式,还包括F16和F32。

这不仅是代码层面的优化,更是对硬件特性的极致压榨。

“技术正确”

虽然实用性存疑,但这并不妨碍它在极客圈子里引发热议。

评论区里有人已经在畅想未来了。

一位开发者提到,理论上结合Gen5 NVMe和SGLang的路由层,甚至可能跑起1T参数的模型——只要你的硬盘够快。

还有人提到了DirectX早就有类似API,或者NVIDIA自家的GPU-Direct技术。

这说明大家苦“显存贵”久矣,谁都想找到那条绕过黄牛和溢价显卡的捷径。

image

但冷静下来看,这更像是一场技术上的“概念验证”。

正如一位评论者所言,对于大多数实际应用场景,一个经过良好量化、能全塞进显存的8B或13B模型,在延迟和质量的综合权衡上,绝对吊打这种“硬盘直连”的方案。

毕竟,没人愿意为了省一张显卡的钱,把大模型用成了老式电报机。

不过,技术的魅力往往就在于这种“无用之用”。今天它是0.2 tok/s的实验品,明天也许就是低资源环境下的救命稻草。

如果下一代NVMe速度再翻倍呢?如果模型架构进一步压缩呢?

这大概就是开源社区最迷人的地方:总有人愿意去尝试那些“看起来毫无意义”的极限挑战。

对于手里只有一张3090的开发者来说,这或许就是离70B大模型最近的一次。

参考链接:
https://github.com/xaskasdf/ntransformer