最近,开发者Fareed Khan推出了名为kimi-k3-in-c的开源项目,通过使用纯C语言重新实现了超大规模模型的推理。这一项目仅包含176KB的代码,无需依赖GPU、PyTorch或BLAS,仅凭8.24GB的内存和单CPU即可运行包含2.78万亿参数、重达1.56TB的Kimi K3模型。更重要的是,这一项目通过底层的推理优化,实现了在小型环境中与大规模硬件环境下结果的比对,达到了字节级别的一致性。
以往,运行大型语言模型往往需要依赖完整的推理框架,这些框架功能强大,能够提供多种算子优化和硬件适配能力。然而,这也带来了一定的软件依赖性和系统开销。kimi-k3-in-c选择了一条突破性的道路,直接使用C99语言编写推理引擎,这让开发者对模型加载、计算执行和内存管理都有了更细致的掌控。对于一般模型来说,这种底层开发方式未必显著,但在处理如Kimi K3这样的大规模MoE模型时,任何额外开销的减少都能够显著降低运行成本。
Kimi K3模型的完整checkpoint高达1.56TB,传统方法往往需要将所有参数存入内存,这对存储和访问资源形成了巨大的压力。因此,kimi-k3-in-c的关键在于改进推理过程,而不是简单地尝试压缩模型。MoE架构中最大的挑战之一是大量专家网络的参数。项目采用了专家流式加载技术,依据计算需要实时加载所需专家,而不是预先加载所有参数,从而有效减轻了内存负担。同时,项目还对长上下文推理中的缓存状态进行了优化,利用KDA机制解决KV Cache在长文本情境下可能导致的内存瓶颈问题。
借助KDA,项目保持了状态规模在626MB左右,而传统KV Cache可能随上下文增长达到数百GB的级别。此外,项目在计算阶段实现了直接MXFP4计算,避免传统量化推理中因精度恢复带来的额外开销。同时,通过O_DIRECT流式读取技术,项目优化了权重读取效率,进一步减少了计算和数据访问的负担。
最终,经过这些优化,项目在8.24GB内存环境中运行Kimi K3的结果与224GB环境下的输出保持了字节级别的一致性。这表明,项目并没有简单地以牺牲模型性能换取低资源运行,而是在推理和数据访问方法上精心设计。随着模型的不断扩展,以往通过增加GPU数量和显存的方式已经无法满足持续增长的需求。