picolm
纯C语言大模型推理引擎,2500行代码+零依赖,可在10美元开发板上运行TinyLlama 1.1B
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
纯C语言大模型推理引擎,2500行代码+零依赖,可在10美元开发板上运行TinyLlama 1.1B
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。

当你花 599 美元买 Mac Mini 跑本地大模型时,有人在用 10 美元的开发板做着同样的事——而且二进制文件只有 80KB。
2024 年的大模型竞赛,几乎清一色是 GPU 的军备竞赛。OpenAI、Anthropic、Google,带着数亿美元的 GPU 集群,向用户收取按 token 计费的服务费。普通人想本地跑一个 1B 参数的模型?
你至少需要一块消费级显卡,加 Python、PyTorch、CUDA,一套下来几GB起步,内存轻松吃掉几个G。
RightNow-AI 团队决定较个真:在树莓派 Zero 2W(15 美元)和 RISC-V 开发板(10 美元)这样的「电子垃圾」上,能不能跑起一个真实可用的语言模型?
答案是:不但能跑,还能跑到每秒 10+ 个 token。
PicoLM 是一个从零手写的纯 C 语言大模型推理引擎,全部代码仅约 2500 行(不含注释和空行),没有任何外部依赖——只需要 libc、libm 和 libpthread。
它能运行 TinyLlama 1.1B(以及其他基于 LLaMA 架构的 GGUF 格式模型),运行时内存占用仅 ~45MB,二进制文件仅 ~80KB。

$9.90——这就是整套推理服务器的硬件成本。
PicoLM 性能如此惊人的核心秘密,是把模型权重永远留在磁盘上。
传统推理框架会把整个模型加载到内存,而 PicoLM 通过 Linux 的 mmap 系统调用,将 638MB 的 GGUF 量化模型文件直接映射到虚拟地址空间。操作系统会在推理时按需换入每一层权重(约 28MB),处理完立即换出——CPU 的 RAM 永远只需要容纳激活值和 KV 缓存。
45MB 内存去哪儿了?
| 组件 | 大小 |
|---|---|
| FP16 KV 缓存(22层 × 512 上下文) | ~11MB |
| Tokenizer(词表 + 索引) | ~4.5MB |
| RoPE 三角表(cos/sin 预计算) | ~0.13MB |
| 激活缓冲区 | ~0.14MB |
| 其他运行时开销 | ~29MB |
| 总计 | ~45MB |
一个重要的优化点:FP16 KV 缓存。相比最初的 FP32 设计,团队将 KV 缓存的精度减半,直接把内存占用从 22MB 砍到 11MB——而这几乎是零精度损失的。

PicoLM 在 PicoClaw agent 架构中担任「LLM 推理盒」的角色,通过 stdin/stdout 与 Go 主程序通信。
BLOG 记录了团队的完整优化路径,每一步都有具体的性能数据:
优化 1:融合反量化+点积(~2x) 原始实现需要先把 Q4 权重反量化到浮点缓冲区,再做矩阵乘法——等于多读写了 1KB/次。PicoLM 直接在反量化过程中累积点积结果,完全消除了中间缓冲区。
优化 2:FP16 KV 缓存(~1.3x) 将 KV 缓存从 FP32 改为 FP16,内存砍半且精度损失可忽略。
优化 3:SIMD 加速(~3x ARM NEON / ~2x SSE2) 在树莓派 4/5 上启用 ARM NEON SIMD 指令,单次可处理 4 个 FP32 操作;在 x86 上使用 SSE2。
优化 4:预计算 RoPE 三角表 将旋转位置编码(RoPE)的 cos/sin 值预先算好存入查找表,消除推理热路径中的三角函数计算。
优化 5:融合 Softmax(Flash Attention 思想) 用在线 softmax 算法替代传统两步 softmax,避免为注意力分数分配 O(seq_len) 的中间缓冲区。
优化 6:多线程矩阵乘法 将 weight 矩阵按行切分,多核并行处理 Transformer 层中的大矩阵乘法。
优化 7:预填充 KV 缓存持久化
--cache 参数可保存/恢复 prompt 的 KV 状态,避免重复预填充,快速恢复多轮对话。
| 设备 | 价格 | 生成速度 | 内存占用 |
|---|---|---|---|
| 树莓派 5(4核) | $60 | ~10 tok/s | 45 MB |
| 树莓派 4(4核) | $35 | ~8 tok/s | 45 MB |
| 树莓派 3B+ | $25 | ~4 tok/s | 45 MB |
| 树莓派 Zero 2W | $15 | ~2 tok/s | 45 MB |
| LicheeRV Nano(RISC-V) | $10 | ~1 tok/s | 45 MB |
在树莓派 4 上,用 Q4_K_M 量化的 TinyLlama,推理速度约 8 tok/s——已经超过了很多云端 API 的首 token 延迟,而且完全不联网。
架构类型: 自定义推理引擎 + 命令行工具( monolith 架构,picolm.c 作为入口,model.c/tensor.c/quant.c/sampler.c/tokenizer.c 分层)
核心技术栈: 纯 C11,无任何外部依赖库
代码规模: ~2500 行 C 代码,包含:
picolm.c:CLI 入口和生成循环(227行)model.c:Transformer 前向传播(650行)quant.c:GGUF 量化解码(420行)tensor.c:张量操作(220行)sampler.c:采样策略(105行)tokenizer.c:BPE 分词器(281行)grammar.c:语法约束 JSON 生成AI 框架使用: 无,不依赖任何 ML 框架,从零实现 Transformer
代码质量亮点:
不足之处:
评分:代码质量 7/10(架构清晰、注释详尽,但测试覆盖缺失)
适合的场景:
局限性:
PicoLM 的出现,证明了 AI 推理的硬件门槛正在被极客社区重新定义。当巨头们在 GPU 集群上卷参数量的同时,PicoLM 用最原始的 C 代码和最廉价的硬件,展示了另一种可能性。
它不是要取代云端大模型,而是填补了一个一直被忽视的空白:在那些没有网络、没有 GPU、甚至没有稳定电源的地方,AI 依然可以工作。
这种「极限省钱」的工程美学,在开源社区里有着独特的吸引力——它的 GitHub Stars 在发布后快速增长,正是这种极客精神的共鸣。
一键安装(Linux / 树莓派):
curl -sSL https://raw.githubusercontent.com/RightNow-AI/picolm/main/install.sh | bash
手动编译:
cd picolm && make native # x86-64
# 或
make pi # Raspberry Pi (ARM NEON)
运行推理:
echo "Explain gravity" | ./picolm model.gguf -n 100 -j 4
JSON 工具调用(用于 agent):
echo '{"tool_calls":[{"function":{"name":"web_search"}}]}' | ./picolm model.gguf --json