Kimi K3 本地怎么跑:8GB 内存装下 2.78 万亿参数的纯 CPU 方案

一句话结论:Kimi K3 这套 2.78 万亿参数的开放权重模型,用一个 176 KB 的纯 C 引擎就能在单台 CPU 机器上跑起来,最低 8.24 GB 内存即可出字,但每个 token 要等 26 到 33 秒,速度不是它的卖点,可运行这件事本身才是。

把 2.78 万亿参数塞进一台没有独立显卡的机器,过去听起来像句玩笑话。Kimi K3 开放权重之后,社区把这件事做到了:纯 C99 写成、没有任何 BLAS 和 PyTorch 依赖、编译产物 176 KB,峰值内存 8.24 GB,在一台 124 核的 AMD EPYC 工作站上把 1.56 TB 的权重从磁盘流式读出来,一个 token 一个 token 地生成,结果与顶层配置逐字节相同。

这件事值得单独写一篇,原因不在于它快。恰恰相反,它慢得离谱,笔记本配置下每 token 26.5 秒,8 个 token 花了 261.5 秒。它的价值在于把一个此前被算力门槛挡在门外的模型,变成了一件普通开发者可以在自己机器上动手验证的事情。

2.78 万亿参数到底有多大

先看数字本身。Kimi K3 是月之暗面 2026 年 7 月 27 日开放权重的模型,官方仓库在 GitHub 拿到 9087 个 star,Hugging Face 上累计下载 78 万次。它是首个达到 3 万亿参数级别的开放模型,权重以 MXFP4 格式分发,激活走 MXFP8,属于量化感知训练而不是训练后量化。

模型结构的骨架是这样的:

参数项 数值 说明
总参数量 2.78 万亿 官方口径 2.8T,仓库统计 2780.0 B
单 token 激活参数 1040 亿 占总量 3.7%,其余 96.3% 处于休眠
层数 93 第 0 层为稠密层,其余 92 层走 MoE 路由
注意力结构 69 层 KDA + 24 层 Gated MLA 96 个注意力头,隐藏维度 7168
路由专家数 896 选 16 另有 2 个每 token 都跑的共享专家
潜在 MoE 维度 3584 专家在 3584 维空间运算,不是 7168 维残差
上下文长度 1048576 官方标称 100 万 token
权重体积 1.56 TB 96 个 safetensors 分片
视觉编码器 401M MoonViT-V2,从零用 next-token prediction 训练

参数分布解释了这套部署玩法。MoE 路由专家一共 82432 个,占 2722.7 B,也就是 97.94%。KDA 注意力 30.6 B,共享专家 12.2 B,MLA 注意力 5.6 B,潜在 MoE 的上下投影 4.7 B,嵌入层加输出头 2.4 B,其余零碎 1.8 B。

换算成字节更直观。1.56 TB 的权重里有 1.447 TB 是路由专家,占 93%。每个路由专家的体积恰好是 17547264 字节,来自 33030144 个参数按每 nibble 半个字节再加 32 分之一字节的缩放因子计算。剩下 7% 是注意力投影、路由器、归一化和嵌入表,总共 56743648000 个参数,bf16 下 113.49 GB,其中 108.81 GB 是逐层稠密主干,4.70 GB 是嵌入表与输出头。

93% 的权重在任何一个 token 上都不会被用到。这是整套部署策略的起点。

从 5560 GB 压到 8.24 GB 的四次收缩

社区项目 kimi-k3-in-c 把整个过程拆成四级,每一级都靠前一级的前提成立。

层级 内存 靠什么做到
全部参数 bf16 5560 GB 起点,等于把 2.78 万亿参数按 2 字节装
官方发布的检查点 1560 GB 路由专家原生 MXFP4,每权重半字节
路由后必须常驻的部分 113.49 GB 每 token 只激活 16 个专家,其余永不上载
主干也流式之后 8.24 GB 稠密主干按层流式读取,只保留少量常驻层

端到端这是 675 倍的缩减,相对官方发布的检查点是 189 倍。没有任何近似,没有丢弃任何权重,输出的字节完全一致。

关键在第三级到第四级之间的那句话:常驻部分仍有 113.49 GB,而普通家用主板装不下。解决办法是把主干也拆开。引擎把 93 层里的部分层固定在内存里当前缀,其余层用一个环形缓冲区从磁盘读入。环形槽位默认 1 个,也就是同一时刻有一层在计算、另一层在预读,多加一个槽位就多占一份内存,但预算不够时它会退让。

实现上,96 个 safetensors 分片被当成目录而非数据集。497220 个张量在 0.27 秒内完成索引,之后引擎永远不读它不需要的分片。索引是手写 JSON 扫描,没有引入 JSON 库,因为分片头部可能有几十 MB,而真正需要的字段每个张量只有四个。

内存档位与速度的对应关系

这是全篇最实用的一张表。同一台机器(124 核双路 EPYC 7763,228 GB 内存,3.2 TB NVMe),只改内存配置,每 token 耗时差别巨大。

机器档位 可用内存 每 token 耗时 机制
普通笔记本 8 GB 26.5 秒 模型每一步都从磁盘流过
高性能笔记本 32 GB 24.2 秒 部分权重已驻留内存
台式机 64 GB 19.8 秒 更多权重进入内存
重型工作站 128 GB 以上 5.6 秒 模型整体装进内存,磁盘等待消失

引擎内置了 6 个预设,每个预设同时设定主干预算和路由专家 LRU 缓存预算:

预设 主干 / 专家缓存 峰值 RSS 说明
ultra 2.50 / 0.31 GB 约 3 GB 8 GB 机器的生存路径,不追求速度
laptop 3.00 / 1.00 GB 8.2 GB 普通路径的下限
desktop 16.00 / 10.00 GB 31.9 GB 常驻层开始起作用
workstation 60.00 / 30.00 GB 95.5 GB 专家缓存开始有收益
server 110.00 / 13.00 GB 约 128 GB 钉住 93 层里的 90 层,最快
max 110.00 / 109.00 GB 约 224 GB 比 server 不更快

有两处反直觉的地方。一是 max 预设并不比 server 快,多花的 96 GB 落在噪声底线之内。二是分配顺序比总容量更值钱,固定 128 GB 预算下先把预算给主干、而不是给专家缓存,效果差 1.69 倍。另外预设需要比峰值 RSS 再多一点的空闲内存,引擎拒绝任何占用超过可用内存 95% 的计划。

磁盘那一侧的读数更反常识。这台机器上用 O_DIRECT 直读能跑到 3.2 GB/s,走页缓存反而只有 2.3 GB/s,引擎实际跑出的主干带宽是 5373 到 6064 MB/s。整个 I/O 设计就是围绕这个结论定下来的,网络盘和机械盘在这个模型面前都不成立,trunk 必须放本地 NVMe。

三条路线怎么选

Kimi K3 的本地部署目前有四种取向,各有明确的适用边界。

路线 代表项目 最低门槛 现状
纯 CPU 流式 kimi-k3-in-c 8 GB 内存 + 1.56 TB 磁盘 12146 star,Apache-2.0,输出逐字节一致
llama.cpp 量化 kimi-k3-gguf-prune 等社区分支 数百 GB 内存 1bit 量化下 0.85 token/s,3bit 约 0.75 token/s
Apple Silicon kimi-k3-mlx 约 870 GB 内存 现存最大 Apple Silicon 机器 512 GB 装不下
官方权重 + 推理框架 HF moonshotai/Kimi-K3 GPU 集群 MoonshotAI 仓库 9087 star,权重 1.56 TB

那条 llama.cpp 路线走的是另一条思路。有人用第三代至强可扩展处理器加已经停产的傲腾持久内存 200 系列,单条 512 GB,让 llama.cpp 把傲腾设成 App Direct 模式直接当内存读写,1bit 量化下实测 0.85 token/s,关掉直接访问模式最高 1.5 token/s。傲腾单条功耗上限 18 瓦,介质温度到 83 摄氏度开始降频,85 摄氏度触发保护性关机,而英伟达早在 2022 年第二季度就启动过这条产品线的收缩,当季计入 5.59 亿美元库存减值。拿停产的内存当主存,这条路能跑通但几乎没有可复制性。

对大多数读者来说,纯 CPU 流式这条路最值得动手,因为它的前提条件只是一块够大的硬盘。

上手时的几个硬门槛

先说磁盘。生成阶段确实需要完整的 1.56 TB,但开发阶段不需要。download-model.sh 支持只拉取前 N 层需要的分片,N 等于 1 时约 7 GB,N 等于 8 时约 125 GB。要注意的是层前缀不是模型本身,它不会产出模型的输出,只是用来打通流程。

再说速度杠杆。长文本生成必须加 –incremental,不加的话每一步都会重跑整个前缀,复杂度是平方级;加上之后第一步付提示词的代价,后续每步成本固定。思考开关是另一个大杠杆,chat 模式默认 thinking_effort 等于 max,实测一次五词的回答里 150 个 token 有 119 个是思考块,关掉思考几乎能砍掉一半输出量。

上下文成本要提前算。每个位置约 2.37 MB 的 KV cache,引擎在启动前就把这笔账算出来,不会在跑了一小时之后才失败。提示词上限 32768 token,生成上限 4096 token,这是引擎本身的限制。

最后是退出码,脚本可以直接依赖:0 成功,1 张量绑定或前向失败,2 参数错误,3 运行完成但结果文件没写成,4 运行完成但至少一个路由专家加载失败所以输出的 token 不可信,5 被 Ctrl-C 中断。退出码 4 是特意和 1 分开的,进程本身成功退出,但那一轮生成的数字已经不可信,这正是它存在的意义。

关于内存开销的换算,可以参考站内那篇本地大模型显存怎么算的实测,按 8B 每 1K 上下文 144 MB 推算,K3 这个量级需要的不是显存管理技巧而是不同的架构假设。K3 官方权重与开源的三项 Infra 技术 MoonEP、FlashKDA、AgentEnv 已经开放,其中 FlashKDA 在 H20 上比 flash-linear-attention 基线 prefill 快 1.72 到 2.22 倍,可以直接作为替换后端。Kimi 在自家产品化方面的进展,本文提到的另一个侧面是站内那篇 Kimi 游戏开发方案,20 小时无人干预跑完 330 万三角面场景。

常见问题

8 GB 内存真的能跑 2.78 万亿参数吗

能,但不是因为参数变小了,而是因为绝大多数参数永远不会被读进内存。K3 每个 token 只激活 896 个路由专家中的 16 个,占总量 3.7%,剩下 96.3% 留在磁盘上按需读取。8.24 GB 装的是主干里钉住的那部分加上路由专家的缓存,不是完整模型。代价是每个 token 要 26.5 秒。

普通玩家应该从哪条路线开始

先别碰 1.56 TB。用 download-model.sh 只拉前几层跑通流程,几 GB 到 125 GB 就够验证链路。真正要产出可用输出再考虑完整权重,前提是有一块能持续跑到 5 GB/s 的 NVMe,网络盘在这个量级上会慢到没有实用价值。

官方权重和这些社区实现,选哪个

看你要验证什么。要复现官方基准分数,用官方权重加官方评测框架;要证明它能跑在自己机器上,用社区的纯 CPU 引擎;要长期做生产部署,走推理框架路线并配 GPU。官方仓库的评测表覆盖 GPQA Diamond 93.5、Terminal-Bench 2.1 88.3、BrowseComp 91.2,与 Claude Fable 5、GPT-5.6 Sol 的对比数据在仓库 README 里完整列出,但那些数字是在 max 思考强度下取得的,跟本地 26 秒一个 token 的运行体验是两回事。

小结

Kimi K3 的本地部署给出的是一个清晰的反差。模型本身是 2.78 万亿参数、1.56 TB 权重、前沿级智能水平,看上去与消费级硬件毫无关系;而实际的工程路径是把它拆成 93% 永不加载的路由专家和 7% 需要流式读取的主干,再用 176 KB 的 C 代码把这两部分调度起来。675 倍的内存缩减没有牺牲任何精度,代价全部落在时间上。

对想了解 MoE 部署结构的人,这套实现是难得的可读样本,每一步优化都写明了代价。对只想用模型的人,它同时提醒了一件事:把大模型塞进小机器从来不是靠量化单一手段完成的,而是靠对「哪些参数在什么时候会被用到」的持续追问。

相关阅读

全部文章归档与模型专题