在64GB MacBook上运行2.78T Kimi K3:WASTE的NVMe流式引擎

发现WASTE,一个无依赖的C推理引擎,从NVMe流式加载专家权重,在消费级硬件上以0.6 tok/s的速度运行完整的2.78T参数Kimi K3。

想象一下在笔记本电脑上运行一个2.78万亿参数的模型。不是蒸馏版本,不是量化近似,而是完整的、原始的Kimi K3——与现存最大的开放模型之一所使用的权重相同。这正是WASTE(权重感知流式张量引擎)所实现的,它巧妙地结合了混合专家(MoE)架构、激进量化和对现代NVMe存储如何作为缓慢但广阔的RAM扩展的深刻理解。

WASTE是一个用C编写的可嵌入推理引擎,零第三方运行时依赖。它将模型的共享主干保留在内存中,仅直接从磁盘流式加载激活的专家权重,并将剩余RAM用作有界缓存。结果如何?完整的2.78T参数Kimi K3在64 GB MacBook Pro上以约0.6 tokens/s的速度运行。按云标准这很慢,但对本地AI来说是一个巨大的进步——该项目的最终目标是让Kimi K3在完全运行于你桌面的同时自我改进。

为什么这很重要:Token浪费问题

项目名称不仅仅是一个巧妙的缩写。你通过云API生成的每个token都支付了两次:一次在你的账单上,一次在数据中心的电费中,而运行该模型本可以——勉强、笨拙但真实地——适配你已经拥有的硬件。WASTE旨在通过证明前沿规模的模型可以在本地运行(即使速度慢)来终结这种浪费。这既是一种技术立场,也是一种哲学立场。

WASTE如何工作:从NVMe流式加载专家

Kimi K3是一个混合专家模型,拥有2.78万亿参数,但每个token仅激活其中约4%。WASTE以激进的方式利用这种稀疏性:

  • 常驻主干:共享(非专家)层保留在RAM中。对于K3,这大约为27.28 GB。
  • 流式专家:容器格式被安排为每个专家需要恰好一次对齐的磁盘读取。当路由器选择专家时,WASTE直接从NVMe读取。
  • 有界专家缓存:未使用的RAM成为最近使用的专家的缓存,避免重复磁盘读取。
  • 预取路由器:预测性路由器预测下一层需要的专家并提前开始读取。真实路由器仍做出最终决定,因此这仅改变时序,不影响结果。
  • 激进量化:专家使用3位残差向量量化,而更敏感的共享权重保持4位或8位。

这种设计大幅减少了内存占用。完整的K3容器为982 GB,但WASTE仅需29.06 GB RAM即可打开。其余内存(在可配置预算内)用于专家缓存。

性能数据:预期效果

在配备M5 Pro和内置SSD的64 GB MacBook Pro上,WASTE提供以下性能:

模型 容器大小 最小RAM 解码速度
Kimi K3 2.78T 982 GB 29.06 GB 0.45–0.62 tok/s
Kimi-Linear 48B 19 GB 1.28 GB 10.65 tok/s

对于K3,64 GB是实际最小值。32 GB机器技术上可以打开模型,但会严重分页,使其不可用。测试机器上的默认内存预算为46.25 GB,包括17.56 GB的专家缓存。

缓存大小的权衡

WASTE的性能对专家缓存大小高度敏感。团队在单个进程中测量了四种配置:

专家缓存 命中率 解码速度
3.32 GB 29.1% 0.56–0.58 tok/s
17.32 GB 36.2% 0.63 tok/s
23.32 GB 38.4% 0.07–0.09 tok/s
29.32 GB 41.3% 0.07–0.08 tok/s

最后两行是一个关键教训:给进程更多内存并不总是使其更快。当缓存超过操作系统能舒适容纳在RAM中的大小,缓存命中变成页面错误,吞吐量崩溃八倍。引擎在其预算内,但机器不在。

存储是真正的瓶颈

冷K3 token读取约17 GB的专家。内置SSD持续12.78 GB/s,但测试的USB外壳仅达到0.94 GB/s——相差13倍。始终将容器放在内部NVMe存储上。

入门:从零到运行K3

构建引擎

git clone https://github.com/sqliteai/waste
cd waste
make
make check

make构建waste CLI和libwaste.amake check运行一个无模型测试套件,创建一个小型合成模型,因此无需下载权重。

获取转换后的容器(最快路径)

获取K3的最简单方式是通过BitTorrent下载预转换的容器。这跳过了1.42 TB源下载和4.7小时的转换过程。种子的片段哈希在到达时验证容器。

aria2c --dir ~/models --seed-time=60 \
  'magnet:?xt=urn:btih:abe7123a60b2b1171c1c4dcaa381b93c46806afe&dn=k3.waste&tr=udp%3A%2F%2Ftracker.opentrackr.org%3A1337%2Fannounce&tr=udp%3A%2F%2Fopen.demonii.com%3A1337%2Fannounce'

--dir指向内部NVMe存储——外部磁盘上的容器将太慢而无法使用。

从已发布权重转换(如果你愿意)

如果你不想信任第三方副本,或者你已经有原始权重,你可以自己转换。该过程可恢复:

# 检查所需下载空间
tools/fetch_weights.sh --dest /Volumes/staging/k3 --dry-run

# 下载原始权重
tools/fetch_weights.sh --dest /Volumes/staging/k3

# 转换它们(输出到内部SSD)
uv run --with torch --with safetensors python tools/convert.py \
  --src /Volumes/staging/k3 \
  --out ~/models/k3.waste \
  --jobs 3

在测试机器上,使用三个工作进程转换大约需要4.7小时。你需要1.42 TB的临时暂存存储,可以是外部的,之后可以释放。

运行它

./waste plan ~/models/k3.waste
./waste run ~/models/k3.waste "The capital of France is" -n 32
./waste chat ~/models/k3.waste

除非有理由,否则不要设置--budget。默认情况下,WASTE选择安全的内存预算,并拒绝在低于模型下限时启动。在容器内,它根据cgroup限制而不是主机RAM来调整大小。

多模态和服务

Kimi K3是多模态的,WASTE支持图像:

./waste run ~/models/k3.waste "Describe this image" --image photo.jpg
./waste run ~/models/k3.waste "Compare these images" --image before.png --image after.png

在交互模式下,/image FILE将图像附加到下一条消息。896×896图像使用256个提示位置,每个位置大约花费2.8秒的语言模型时间。

WASTE还包括一个可选的OpenAI兼容服务器:

make libwaste.dylib  # 在Linux上使用libwaste.so
python3 -m serve ~/models/k3.waste --port 8000

curl localhost:8000/v1/chat/completions \
  -H 'Content-Type: application/json' \
  -d '{"model":"k3","messages":[{"role":"user","content":"Why is the sky blue?"}]}'

它支持流式、工具、结构化输出、思考控制和图像。

库和验证

WASTE也是一个可嵌入的C库。CLI和服务器都使用src/waste.h中的公共API。推理路径仅依赖libc和pthreads——没有BLAS、Python、CUDA或其他外部依赖。

验证是严格的。所有层都对照PyTorch参考进行检查;最终logits在3.6e-06内一致,视觉塔与其oracle在2.3e-06内一致。无模型套件构建合成容器,真实模型检查验证转换往返和服务器提示渲染。

项目状态和理念

格式和API尚未冻结。K3是主要目标且测试最充分的模型。CPU路径目前是测量到的最快实现,但CUDA、Metal和其他硬件特定优化仍有待探索。项目保留docs/LEARNED.md文件用于失败的想法和负面结果——这是一种罕见且有价值的做法。

测量被视为实验结果,而非营销数字。每个测量都与获取它的硬件、容器、配置和提交相关联。不稳定的测量以范围报告,后来发现错误的结果仍被记录。

最终想法

WASTE是一个大胆的实验,挑战了前沿模型需要数据中心级基础设施的假设。通过从NVMe流式加载权重并利用MoE稀疏性,它将2.78T参数模型带到笔记本电脑。它很慢,但有效——并且是Apache 2.0下的开源项目。

如果你是热衷于推动本地AI边界的开发者,WASTE值得一看。从Kimi-Linear(19 GB容器,10.7 tok/s)开始感受引擎,然后考虑完整的K3体验。项目欢迎贡献者,特别是新的硬件后端和性能实验——即使是负面结果也受到重视。

查看GitHub仓库获取完整文档,包括容器格式、后端比较和研究方向。

来源

sqliteai/waste: 通过直接从NVMe流式加载激活权重,在可用RAM之外运行完整的2.78万亿参数Kimi K3模型。一个无依赖、可嵌入的C推理引擎。