8GB真装得下K3吗?
2.78 万亿参数、单 CPU、峰值内存 8.24 GB,看似打破硬件常识,实际门槛却转移到 1.56 TB 权重与本地 NVMe。本文拆解 MoE 流式推理原理,并给出免下载验证、完整运行、内存排错、吞吐调优及下载校验的可复现步骤。
kimi-k3-in-c 是便携 C99 编写的 Kimi K3 CPU 推理引擎:不用 BLAS、框架或 GPU,却以 8.24 GB 峰值内存运行 2.78 万亿参数模型。2026 年 8 月 5 日它冲上 GitHub Trending,快照已有 1877 星。爆点不只是模型封装,而是把 MoE 容量难题改写成磁盘 I/O;“8 GB”与 1.56 TB 权重前提的反差随即引发质疑。
一、8 GB 真等于装下模型吗?
不是。项目并未把 1.56 TB 检查点压成 8 GB。K3 有 93 层,其中 92 个 MoE 层每次只激活 896 个路由专家中的 16 个:单 token 实际使用约 1040 亿参数,即总量的 3.7%。占检查点 1.447 TB 的路由专家以 MXFP4 留在磁盘,被路由选中时才读入;始终参与计算的干线也被打包成 109 GB 文件,按层固定、按需流送。因此 8.24 GB 是进程峰值 RSS,不是安装体积。实际解法是预留约 1.7 TB 空间和快速本地盘;Issue #3 所问的 50~100 GB 压缩检查点目前尚未支持。这是存储与内存分层,不是无损“魔法压缩”。
二、没有 2 TB 空间,能先试吗?
能验证实现,不能做完整生成。仓库提交了同一张量图的 13 层小模型及 PyTorch 参考结果,make test 会覆盖算子、Safetensors 读取、分词、专家缓存、teacher forcing、贪心和增量解码,无需模型、网络或 Python。先跑这组真实门禁,再决定是否准备大盘:
git clone https://github.com/FareedKhan-dev/kimi-k3-in-c.git
cd kimi-k3-in-c
make -j
make test
看到 ALL WEIGHTLESS TESTS PASSED 才算通过。--layers N 可调试部分分片,但部分层的输出不能当作 K3 正常推理结果;完整生成仍需全部 96 个分片。
三、选 laptop 为何仍占 113 GB?
README 的常见误区是只写 --preset laptop,却漏了 --trunk;没有打包目录时,113.5 GB 干线会整体常驻,预设自然失效。一次性打包干线,运行时再显式传入目录:
./scripts/pack-trunk.sh ~/k3model ~/k3trunk
printf '法国的首都是' > prompt.txt
./bin/k3 ~/k3model --trunk ~/k3trunk --preset laptop \
--tok ~/k3model --prompt-file prompt.txt --gen 8 --incremental
laptop 实际分给干线 3 GB、专家缓存 1 GB,官方测得约 8.2 GB 峰值。中文、emoji 或重音字符应走 --prompt-file,避免 shell 重编码参数;文本输入还必须带 --tok。
四、为何只有几十秒一个 token?
通常瓶颈是 I/O,不是 C 代码“没优化”。示例机上 laptop 为 32.69 秒/token,server 示例为 10.69 秒/token;每步仍要访问 92 层各 16 个专家以及未固定的干线层,数字不能外推到普通 SATA 盘。把 k3trunk 放本地 NVMe,并按引擎的读取方式实测:
python3 tools/devbw.py ~/k3trunk/trunk.bin
生成务必加 --incremental,否则每一步重算整个前缀,复杂度升为 O(T²)。有更多 RAM 时先增加 --trunk-gb,再加专家缓存;首 token 还要加载固定层,明显更慢。网络卷会拖垮吞吐,而 max 在项目测量中也没有比 server 更快。
五、下载脚本报模块不存在怎么办?
Issue #5 的 ModuleNotFoundError 来自脚本调用已移除的 huggingface_hub.commands.huggingface_cli,并非 AMD CPU 问题。截至 2026-08-05,修复 PR #6 仍未合并;它改用 hf download、固定 revision,并校验内容。审阅 diff 后可测试该分支:
git fetch origin pull/6/head:fix-hf-download
git switch fix-hf-download
export HF_TOKEN=hf_your_token_here
./scripts/download-model.sh ~/k3model
不要只看文件大小:同尺寸损坏也会产生错误 token。下载可续传,但 96 分片、总字节数或 checksum 任一失败都应停止,不要开始打包和推理。