在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.a。make 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推理引擎。