智猩猩AI整理 编辑:BugMaker 一个拥有2.78万亿参数的大模型,通常意味着TB级模型文件和大量GPU资源。 随着大语言模型规模不断扩大,模型参数已经从百亿级进入万亿级阶段。更大的模型带来了更强的能力,但同时也带来了新的部署挑战。 对于普通设备而言,限制大模型运行的往往不是模型本身的推理能力,而是庞大的权重规模、内存占用以及数据读取压力。 尤其是Mixture-of-Experts(MoE,混合专家)架构模型,虽然每次推理只会激活部分专家,但完整模型仍然包含大量参数。 如何避免一次性加载全部模型权重,让超大规模模型在有限硬件资源上运行,成为大模型系统优化中的重要方向。 最近,开发者 Fareed Khan 开源了 kimi-k3-in-c 项目,尝试用C语言重新实现超大规模模型推理。 这个项目只有 176KB纯C99代码 ,无需GPU、PyTorch或者BLAS,仅依靠单CPU和 8.24GB内存 ,即可进行 Kimi K3推理运行(2.78T参数,1.56TB checkpoint) 。 更关键的是,项目通过底层推理优化,让8GB环境运行结果与224GB环境达到 字节级一致 。 它没有继续依靠增加硬件资源,而是重新设计模型读取、参数管理以及计算流程,让超大规模模型可以在更低资源环境中运行。 01 176KB纯C引擎直接运行 2.78T参数模型 过去运行大型语言模型,通常需要完整推理框架。 这些框架提供了丰富的算子优化、硬件适配以及运行管理能力,但同时也带来了额外的软件依赖和系统开销。 kimi-k3-in-c选择了一条更加底层的路线。 项目直接使用 C99语言 编写推理引擎,将模型加载、计算执行以及内存管理控制到更细粒度。 相比依赖大型推理框架,这种方式可以让开发者直接管理模型运行过程中的数据流。 对于普通规模模型来说,这种底层实现方式未必有明显优势。 但对于Kimi K3这样的超大规模MoE模型,减少任何额外开销都可能影响最终运行成本。 作为超大规模MoE模型,Kimi K3的完整checkpoint达到 1.56TB 。 如果按照传统方式加载模型,大量参数需要提前驻留内存,即使拥有较大硬件资源,也需要面对巨大的存储和访问压力。 因此,kimi-k3-in-c的重点并不是改变模型结构,而是改变模型运行时的数据访问方式。 02 不加载全部参数,让2.78T模型 进入8GB内存 kimi-k3-in-c的核心并不是简单压缩模型,而是重新设计推理过程。 对于MoE模型来说,最大的问题之一是专家参数规模。 模型包含大量专家网络,但每一次推理只需要其中一部分Expert参与计算。 如果提前加载所有专家,会造成大量无效内存占用。 因此,项目采用 专家流式加载(Expert Streaming Loading) 。 它不会提前将全部专家加载到内存,而是在计算需要时读取对应专家,从而降低常驻内存压力。 但除了模型参数本身,长上下文推理中的缓存状态同样会占用大量资源。 另一个关键变化来自 KDA机制 。 传统KV Cache会随着上下文长度增加不断增长,长文本场景下很容易成为新的内存瓶颈。 Kimi K3中的KDA将部分计算状态固定下来,使状态规模不会随着输入token数量增加而持续增长。 项目展示的数据中,KDA状态约为626MB,而传统KV Cache随着上下文增长可能达到数百GB甚至TB级别。 这意味着,模型运行时并不需要让所有状态随着上下文一起增长。 除了参数加载和状态管理,项目还优化了计算过程。 在计算阶段,项目进一步采用 MXFP4直接计算(Direct MXFP4 Computation) 。 传统量化推理通常需要先将低精度数据恢复为更高精度格式,再参与计算。 这一过程会增加额外计算和存储开销。 项目尝试直接利用MXFP4格式参与计算,减少传统反量化过程带来的额外开销。 对于模型主体权重读取,项目采用 O_DIRECT流式读取(O_DIRECT Streaming Read) ,减少缓存层额外占用,提高大规模权重读取效率。 这些优化覆盖了模型运行中的不同环节。专家参数通过按需加载减少常驻内存占用,KDA避免状态规模随着上下文增长。 同时MXFP4计算和O_DIRECT读取降低计算与数据访问开销。 03 8GB和224GB环境输出 保持字节级一致 降低内存占用之后,另一个关键问题是模型输出是否保持一致。 项目展示的结果显示,在 8.24GB内存环境 下运行Kimi K3,可以与 224GB内存环境 下的运行结果保持字节级一致。 这说明项目并不是简单牺牲模型输出能力换取低资源运行,而是在推理路径和数据访问方式上进行了重新设计。 过去,大模型部署更多依靠增加GPU数量、扩大显存规模。 但随着模型规模持续提升,硬件扩展并不一定