NovaLLM提出稀疏激活思路,利用MoE模型仅需调用少量专家权重的特性,实现超大模型在单卡VRAM中的按需加载。核心做法是将“整块加载”改为“用时加载、用完卸载”,在保持推理质量的同时突破显存限制。
单卡消费级 GPU 能否运行数千亿乃至万亿参数级别的模型?本文将介绍 NovaLM——由 NovaStack(新兴栈 AI)自研的推理引擎。这是一个真正解决了"模型塞不进显存"这一长期痛点的生产级系统。文章将完整呈现:大型模型为何难以运行、NovaLM 用三大思路攻克难题,以及——更重要的——如何通过全内存运行整个系统、完全不碰磁盘,将"无法计算"变为"飞奔疾驰"。
模型参数规模持续攀升——数百亿甚至数千亿参数已成常态,权重体积随之膨胀到惊人地步。而典型消费级 GPU 的显存容量十分有限,一次性加载整个模型根本不现实。但如果换个角度思考:对任意给定 token,模型中实际参与计算的权重仅占很小一部分。那么为什么不做到——"只把需要的内容加载到显存,用完立即释放"?这正是 NovaLM 的出发点:把"塞不进去"变成"按需加载"。
关键洞察在于:Mixture-of-Experts(混合专家模型,MoE)天生为稀疏激活而构建。Dense 模型则截然不同——每一层,无论输入哪个 token,都必须完整跑完全部权重。而在 MoE 模型中,每一层包含数百甚至数千个 experts,但路由器只为每个 token 选取极少数的 expert 来执行。换言之,无论模型总体规模有多大,单次推理过程实际触达的 expert 只是凤毛麟角——该层中绝大多数权重自始至终不参与计算。因此,如果以"expert"为粒度而非"整层"为粒度来流式传输权重,就能把"搬运整层"压缩成"只搬运被选中的那几个 expert"。
NovaLLM 的第一个优化是权重流式传输。具体来说:
由于模型代码本身就会跳过未被选中的 expert,Hook 机制自然只加载实际运行的那些 expert,无需额外逻辑。结果:VRAM 占用现在只取决于单次 batch 中命中的 expert 数量,而非模型总参数量。这正是 NovaLM 能在一张 GPU 上跑顶级大型 MoE 模型的根本原因——显存需求不再随模型规模线性增长。

流式传输解决了"能不能塞进去"的问题,但逐层、逐 expert 从磁盘搬运权重依然相对较慢。NovaLLM 的第二个优化将整个管线升级为全内存启动——将全部权重常驻在 CPU 的 pinned memory 中。启动时一次性将所有权重加载进内存;此后每个 token 的计算全程走这条快速内存路径,彻底省去每个 token 都要命中磁盘的代价。
至此,瓶颈从"磁盘"转移到了"内存带宽和 kernel 启动开销"——这正是下一项优化要解决的问题。
权重常驻之后,配合 CUDA Graph,整个算子序列的启动开销几乎可以降至零——一整层的算子序列可以录制成一张图,单次重放启动仅需微秒级,各算子紧密衔接、无缝执行。但这还不够。NovaLLM 更进一步,将推理扩展到多 GPU,真正实现吞吐量放大。
Tensor Parallelism(TP,张量并行):一个 Expert 拆分到多卡
每个 expert 的权重矩阵按列切分为若干块,每块存储和计算分配到不同 GPU,末尾通过 AllReduce 合并结果。这减轻了单卡的显存压力,使得更大规模的模型得以运行。
Expert Parallelism(EP,专家并行):专家分布,Token 路由到目标 GPU
所有 experts 分布到多张 GPU 上,每张卡只持有其中一部分。路由器决定每个 token 应去往哪张 GPU,Token 通过 All-to-All 通信完成迁移。这是大型 MoE 模型所采用的主要方案——不同请求被路由到不同 experts,各 GPU 同时保持繁忙,真正带来吞吐量收益。
多请求批处理
跨多卡,每一层将所有活跃请求的 token 打包为同一批:路由器分发任务,各 GPU 上的 experts 并行计算,收集结果后进入下一层。并发量随请求数扩展,而非靠加速单个 token 来提升。
综合来看,这就是 NovaLM 的完整能力矩阵——从单卡到多卡,从小模型到大模型:
NovaLLM 融合了三件事——按需流式传输、全内存常驻、多卡并行——将"模型塞不进显存"变为"大家一起跑起来"。
— NovaStack AI · 让大模型摆脱单卡显存的束缚 —