picolm

GitHub
1.5k 178 中等 2 次阅读 今天MITAgent开发框架语言模型
AI 解读 由 AI 自动生成,仅供参考

picolm 是一款专为极低配置硬件设计的本地大语言模型推理引擎。它的核心能力在于让一个 10 亿参数的模型在仅 256MB 内存、售价约 10 美元的微型开发板上流畅运行。

许多用户受困于云端 API 的费用、隐私风险以及对网络的依赖,而本地部署又往往需要昂贵的显卡。picolm 完美解决了这些问题,实现了真正的离线 AI 体验。无需互联网连接,没有月度账单,所有数据都保留在设备本地。

技术上,picolm 采用纯 C 语言编写,没有任何外部依赖,生成的二进制文件仅有 80KB 左右,运行时内存占用低至 45MB。它支持标准输入输出,能轻松集成到各种脚本或应用中,比如与 PicoClaw 配合构建全功能的离线智能体。

嵌入式系统开发者、物联网爱好者,以及那些对数据隐私有严格要求的研究人员都能从中受益。如果你想在树莓派或更廉价的芯片上体验大模型的魅力,picolm 是绝佳的选择。

使用场景

一位物联网工程师在信号覆盖极差的矿区部署智能监测终端,需要设备能独立处理异常报警数据而不依赖外部网络。

没有 picolm 时

  • 必须依赖云端 API 接口,一旦断网整个系统就瘫痪失效,无法响应现场指令。
  • 长期运行需持续支付 Token 费用,运维成本随数据量线性增长,预算难以控制。
  • 原始传感器数据需上传至第三方服务器,存在隐私泄露隐患,不符合合规要求。
  • 传统大模型需要高性能 GPU 支持,普通嵌入式板卡无法承载,导致硬件选型受限。

使用 picolm 后

  • 直接编译为单一二进制文件,在 $10 开发板上即可离线运行,彻底摆脱网络依赖。
  • 硬件一次性投入,后续推理零成本,彻底消除月度账单,大幅降低总拥有成本。
  • 所有数据处理均在本地完成,确保敏感信息绝不流出设备,满足严格的数据安全标准。
  • 仅需 45MB 内存占用,完美适配 256MB RAM 的资源受限环境,让低端硬件也能跑大模型。

picolm 通过极致轻量化架构,让低成本硬件也能拥有安全可靠的本地智能决策能力。

运行环境要求

操作系统
  • Linux
  • Windows
  • macOS
GPU

无需 GPU (仅 CPU)

内存

运行时约 45MB,建议硬件至少 256MB

依赖
notes纯 C11 编写,零外部依赖。支持 GGUF 格式模型(如 TinyLlama)。完全离线运行,无需网络。支持 ARM、x86-64、RISC-V 架构。首次运行需下载约 638MB 模型文件。
python无需 Python
libc
libm
libpthread
picolm hero image

快速开始

C11 Binary Size RAM Zero Dependencies MIT License

PicoLM

在拥有 256MB RAM 的 10 美元开发板上运行 10 亿参数的大语言模型 (LLM)。
纯 C 语言。零依赖。单个二进制文件。无需 Python。无需云端。

echo "Explain gravity" | ./picolm model.gguf -n 100 -j 4


完美搭档:PicoLM + PicoClaw

PicoLM — Run a 1-billion parameter LLM on a $10 board

PicoLM 是 PicoClaw本地大脑——一个运行在 10 美元硬件上的超轻量级 Go 语言 AI 助手。两者结合形成一个完全离线的 AI 智能体——无需云端,无需 API 密钥,无需互联网,无需月费。

其他所有 LLM 提供商都需要互联网。PicoLM 不需要。

硬件 架构
$9.90 LicheeRV Nano PicoClaw architecture — PicoLM sits in the LLM box
9.90 美元——这就是整个服务器 PicoLM 为 PicoClaw 智能体循环中的 LLM 模块提供动力

为什么它们是完美契合

云提供商 (OpenAI 等) PicoLM (本地)
成本 按令牌付费,永久付费 永久免费
隐私 数据发送至服务器 所有数据保留在设备端
互联网 每次请求都需要 完全不需要
延迟 网络往返 + 推理 仅推理
硬件 需要价值 599 美元的 Mac Mini 运行在 10 美元的开发板上
二进制文件 N/A ~80KB 单文件
内存 N/A 总计 45 MB

工作原理

PicoClaw 的智能体循环将 PicoLM 作为子进程启动。消息来自 Telegram、Discord 或命令行界面(CLI)——PicoClaw 将其格式化为聊天模板,通过标准输入(stdin)将提示词管道传输给 picolm,并从标准输出(stdout)读取响应。当需要工具时,--json 语法模式可确保即使是从 1B 模型也能生成有效的 JSON。

Telegram / Discord / CLI
        │
        ▼
   ┌──────────┐    stdin: prompt     ┌───────────┐
   │ PicoClaw │ ──────────────────►  │  picolm   │
   │   (Go)   │ ◄──────────────────  │   (C)     │
   └──────────┘    stdout: response  │ + model   │
        │                            └───────────┘
        ▼                            45 MB RAM
   User gets reply                   No internet

快速设置

# 1. Build PicoLM
cd picolm && make native    # or: make pi (Raspberry Pi)

# 2. Download model (one-time, 638 MB)
make model

# 3. Build PicoClaw
cd ../picoclaw && make deps && make build

# 4. Configure (~/.picoclaw/config.json)
{
  "agents": {
    "defaults": {
      "provider": "picolm",
      "model": "picolm-local"
    }
  },
  "providers": {
    "picolm": {
      "binary": "~/.picolm/bin/picolm",
      "model": "~/.picolm/models/tinyllama-1.1b-chat-v1.0.Q4_K_M.gguf",
      "max_tokens": 256,
      "threads": 4,
      "template": "chatml"
    }
  }
}
# 5. Chat — fully offline!
picoclaw agent -m "What is photosynthesis?"

或者一键安装所有内容

curl -sSL https://raw.githubusercontent.com/RightNow-AI/picolm/main/install.sh | bash

真实硬件性能表现

设备 价格 生成速度 占用内存
Pi 5 (4 核) 60 美元 ~10 词元/秒 45 MB
Pi 4 (4 核) 35 美元 ~8 词元/秒 45 MB
Pi 3B+ 25 美元 ~4 词元/秒 45 MB
Pi Zero 2W 15 美元 ~2 词元/秒 45 MB
LicheeRV Nano 10 美元 ~1 词元/秒 45 MB

JSON 工具调用

当需要结构化输出时,PicoClaw 会自动激活 --json 语法模式。这保证了即使是从 10 亿参数模型生成的 JSON 也是语法有效的——对于在微型硬件上可靠地进行工具调用至关重要:

picoclaw agent -m "Search for weather in Tokyo"
# → PicoLM generates: {"tool_calls": [{"function": {"name": "web_search", "arguments": "{\"query\": \"weather Tokyo\"}"}}]}

如需完整的 PicoClaw 文档,请参阅 PicoClaw README


PicoLM 是什么?

PicoLM 是一个用约 2,500 行 C11 代码编写的极简从头构建的 LLM 推理引擎。它能在大多数推理框架甚至不会考虑运行的硬件上运行 TinyLlama 1.1B(以及以 GGUF 格式的其他 LLaMA 架构模型):

  • Raspberry Pi Zero 2W(15 美元,512MB RAM,ARM Cortex-A53)
  • Sipeed LicheeRV(12 美元,512MB RAM,RISC-V)
  • Raspberry Pi 3/4/5(1-8GB RAM,ARM NEON SIMD)
  • 任何 Linux/Windows/macOS x86-64 机器

模型文件(638MB)保留在磁盘上。PicoLM 对其使用内存映射(memory-mapping),并通过 RAM 逐层流式传输。总运行时内存:约 45MB,包括 FP16 KV 缓存。

                    ┌──────────────────────────────────────────┐
   What goes        │         45 MB Runtime RAM                │
   in RAM           │  ┌─────────┐ ┌──────────┐ ┌───────────┐  │
                    │  │ Buffers │ │ FP16 KV  │ │ Tokenizer │  │
                    │  │  1.2 MB │ │ Cache    │ │   4.5 MB  │  │
                    │  │         │ │  ~40 MB  │ │           │  │
                    │  └─────────┘ └──────────┘ └───────────┘  │
                    └──────────────────────────────────────────┘

                    ┌──────────────────────────────────────────┐
   What stays       │        638 MB Model on Disk              │
   on disk          │       (mmap — OS pages in layers         │
   (via mmap)       │        as needed, ~1 at a time)          │
                    └──────────────────────────────────────────┘

功能特性

功能 描述
GGUF Native 直接读取 GGUF v2/v3 文件 — 无需转换
K-Quant 支持 Q2_K, Q3_K, Q4_K, Q5_K, Q6_K, Q8_0, Q4_0, F16, F32
mmap 层流式加载 模型权重保留在磁盘上;OS 逐页加载一层 (mmap 内存映射)
FP16 KV 缓存 减少一半 KV 缓存 (Key-Value Cache) 内存 (2048 上下文下 44MB vs 88MB)
Flash Attention 在线 Softmax — 无需 O(seq_len) Attention (注意力机制) 缓冲区
预计算 RoPE cos/sin 查找表消除热点循环中的超越函数 (RoPE 旋转位置编码)
SIMD 加速 ARM NEON (Pi 3/4/5) 和 x86 SSE2 (Intel/AMD) 自动检测 (SIMD 单指令多数据流)
融合点积 反量化 + 点积一次完成 — 无中间缓冲区
多线程矩阵乘法 跨 CPU 核心并行矩阵向量乘法
语法约束 JSON --json 标志强制输出有效 JSON(用于工具调用)
KV 缓存持久化 --cache 保存/加载提示状态 — 重新运行时跳过预填充 (Prefill)
BPE 分词器 基于分数的字节对编码 (BPE),从 GGUF 元数据加载
Top-p 采样 温度 + 核采样,可配置种子
管道友好 从 stdin 读取提示:echo "Hello" | ./picolm model.gguf
零依赖 仅 libc, libm, libpthread。无外部库。
跨平台 Linux, Windows (MSVC), macOS。ARM, x86-64, RISC-V。

快速开始

一键安装 (树莓派 / Linux)

curl -sSL https://raw.githubusercontent.com/RightNow-AI/picolm/main/install.sh | bash

这将执行以下操作:

  1. 检测你的平台 (ARM64, ARMv7, x86-64)
  2. 安装构建依赖项 (gcc, make, curl)
  3. 使用针对你 CPU 优化的 SIMD 标志构建 PicoLM
  4. 下载 TinyLlama 1.1B Q4_K_M (638 MB)
  5. 运行快速测试
  6. 生成 PicoClaw 配置
  7. picolm 添加到你的 PATH

从源码构建

git clone https://github.com/rightnow-ai/picolm.git
cd picolm/picolm

# 自动检测 CPU (在 x86 上启用 SSE2/AVX,在 ARM 上启用 NEON)
make native

# 下载模型
make model

# 运行它
./picolm /opt/picolm/models/tinyllama-1.1b-chat-v1.0.Q4_K_M.gguf \
    -p "The meaning of life is" -n 100

Windows 构建 (MSVC)

cd picolm
build.bat
picolm.exe model.gguf -p "Hello world" -n 50

特定平台构建

make native      # x86/ARM 自动检测 (推荐用于本地机器)
make pi          # Raspberry Pi 3/4/5 (64 位 ARM + NEON SIMD)
make pi-arm32    # Pi Zero / Pi 1 (32 位 ARM)
make cross-pi    # 从 x86 交叉编译给 Pi (静态二进制)
make riscv       # RISC-V (Sipeed LicheeRV 等)
make static      # 用于单文件部署的静态二进制
make debug       # 带符号、无优化的调试构建

使用方法

PicoLM — 超轻量级大语言模型推理引擎

用法:picolm <model.gguf> [选项]

生成选项:
  -p <prompt>    输入提示 (或通过 stdin 管道输入)
  -n <int>       最大生成词元数 (默认:256)
  -t <float>     温度 (默认:0.8, 0=贪婪)
  -k <float>     Top-p / 核采样 (默认:0.9)
  -s <int>       RNG 种子 (默认:42)
  -c <int>       上下文长度覆盖
  -j <int>       线程数 (默认:4)

高级选项:
  --json         语法约束 JSON 输出模式
  --cache <file> KV 缓存文件 (保存/加载提示状态)

示例

基本生成:

./picolm model.gguf -p "Once upon a time" -n 200

贪婪解码(确定性,temperature=0):

./picolm model.gguf -p "The capital of France is" -n 20 -t 0
# 输出:Paris. It is the largest city in France and...

与 TinyLlama 聊天 (ChatML 格式):

./picolm model.gguf -n 200 -t 0.7 -p "<|user|>
What is photosynthesis?</s>
<|assistant|>
"

强制 JSON 输出(用于工具调用/结构化数据):

./picolm model.gguf --json -t 0.3 -n 100 -p "<|user|>
Return the current time as JSON.</s>
<|assistant|>
"
# 输出:{"time": "12:00 PM"}

从 stdin 管道输入:

echo "Explain quantum computing in one sentence" | ./picolm model.gguf -n 50

KV 缓存 — 跳过重复预填充:

# 第一次运行:处理提示 + 保存缓存
./picolm model.gguf --cache prompt.kvc -p "Long system prompt here..." -n 50

# 第二次运行:加载缓存,跳过提示预填充 (快 74%)
./picolm model.gguf --cache prompt.kvc -p "Long system prompt here..." -n 50
# 输出:"Skipping 25 cached prompt tokens"

Pi 4 多线程(4 核):

./picolm model.gguf -p "Hello" -n 100 -j 4

性能

基于 TinyLlama 1.1B Q4_K_M(638 MB 模型)测量:

指标 x86-64 (8 线程) Pi 4 (4 核,NEON) Pi Zero 2W
预填充 ~11 tok/s ~6 tok/s ~1.5 tok/s
生成 ~13 tok/s ~8 tok/s* ~2 tok/s*
运行时内存 45 MB 45 MB 45 MB
首词时间 ~2.3s ~4s ~16s
二进制大小 ~80 KB ~70 KB ~65 KB

*估计启用 NEON SIMD。实际数字取决于 SD 卡速度和热节流。

为何如此快速

 原始 C 推理          ████████████░░░░░░░░  13.5 tok/s  (基准:1.6)
 + 融合点积           ████████████████░░░░  (消除反量化缓冲区)
 + 多线程矩阵乘法     █████████████████░░░  (4-8 核并行)
 + FP16 KV 缓存       █████████████████░░░  (减半内存带宽)
 + 预计算 RoPE        ██████████████████░░  (热点循环中无 sin/cos)
 + Flash Attention    ██████████████████░░  (无 O(n) 注意力分配)
 + NEON/SSE2 SIMD     ███████████████████░  (4 宽向量运算)
 + KV 缓存持久化      ████████████████████  (完全跳过预填充)

架构

                          ┌─────────────────────────────────┐
                          │           picolm.c              │
                          │     CLI + Generation Loop       │
                          └──────┬──────────────┬───────────┘
                                 │              │
                    ┌────────────┘              └────────────┐
                    │                                        │
           ┌────────┴────────┐                    ┌──────────┴──────────┐
           │    model.h/c    │                    │    sampler.h/c      │
           │  GGUF Parser    │                    │  Temperature +      │
           │  mmap Layer     │                    │  Top-p Sampling     │
           │  Streaming      │                    └──────────┬──────────┘
           │  Forward Pass   │                               │
           │  KV Cache I/O   │                    ┌──────────┴──────────┐
           └───┬────────┬────┘                    │    grammar.h/c      │
               │        │                         │  JSON Constraint    │
      ┌────────┘        └───────┐                 │  Logit Masking      │
      │                         │                 └─────────────────────┘
┌─────┴──────┐          ┌───────┴────────┐
│ tensor.h/c │          │ tokenizer.h/c  │
│ matmul     │          │ BPE Encode     │
│ rmsnorm    │          │ Decode         │
│ softmax    │          │ Vocab Lookup   │
│ rope       │          └────────────────┘
│ silu       │
│ threading  │
└─────┬──────┘
      │
┌─────┴──────┐
│  quant.h/c │
│ Q4_K, Q6_K │
│ Q3_K, Q2_K │
│ FP16, F32  │
│ NEON + SSE │
│ Fused Dots │
└────────────┘

LLaMA 前向传播(每个 Token 发生了什么)

Input Token
    │
    ▼
┌───────────────┐
│ Embedding     │  Dequantize row from token_embd → x[2048]
│ Lookup        │
└───────┬───────┘
        │
        ▼
┌───────────────┐  ×22 layers
│ RMSNorm       │─────────────────────────────────────────┐
│               │                                         │
│ Q = xb @ Wq   │  Matrix-vector multiply (quantized)     │
│ K = xb @ Wk   │  Store K,V in FP16 KV cache             │
│ V = xb @ Wv   │                                         │
│               │                                         │
│ RoPE(Q, K)    │  Rotary position encoding (table lookup)│
│               │                                         │
│ Attention     │  Flash attention with online softmax    │
│ (GQA 32→4)    │  Grouped-query: 32 Q heads, 4 KV heads  │
│               │                                         │
│ x += Out@Wo   │  Output projection + residual           │
│               │                                         │
│ RMSNorm       │                                         │
│               │                                         │
│ SwiGLU FFN    │  gate=SiLU(xb@Wg), up=xb@Wu             │
│               │  x += (gate*up) @ Wd                    │
└───────┬───────┘─────────────────────────────────────────┘
        │
        ▼
┌───────────────┐
│ Final RMSNorm │
│ x @ W_output  │─→ logits[32000]
└───────┬───────┘
        │
        ▼
┌───────────────┐
│ Grammar Mask  │  (if --json: force valid JSON structure)
│ Sample Token  │  temperature → softmax → top-p → pick
└───────────────┘

内存预算

对于上下文长度为 2048 的 TinyLlama 1.1B Q4_K_M:

组件 大小 备注
FP16 KV Cache (键值缓存) ~40 MB 22 层 x 2 x 2048 x 256 x 2 字节
分词器 ~4.5 MB 32K 词表字符串 + 分数 + 排序索引
激活缓冲 ~0.14 MB x, xb, xb2, q, hb, hb2
Logits 缓冲 ~0.12 MB 32000 x 4 字节
反量化临时区 ~0.02 MB Max(n_embd, n_ffn) 浮点数
归一化权重(反量化前) ~0.35 MB 45 个归一化向量 x 2048 x 4 字节
RoPE 表 ~0.03 MB cos + sin x 2048 x 32 项
总运行时 ~45 MB
模型文件(磁盘上) 638 MB 内存映射,每次约 1 层在 RAM 中

使用 512 上下文(针对受限设备):

组件 大小
FP16 KV Cache (键值缓存) ~10 MB
其他所有内容 ~5 MB
总计 ~15 MB

优化深度解析

PicoLM 实现了 9 项优化,将 x86 上的生成速度从 1.6 tok/s 提升至 13.5 tok/s,预计基于 ARM 和 NEON 的增益更大:

1. ARM NEON SIMD (单指令多数据流)

所有热点路径均采用 4 宽浮点向量操作。示例:使用 vmovl_u8vmovl_u16vcvtq_f32_u32 对 Q4_K 半字节进行反量化,以及使用交错的 vld2q_f32 / vst2q_f32 处理 RoPE。

2. x86 SSE2 SIMD

在 Intel/AMD 上自动检测。用于点积、RMSNorm 和向量操作的 4 宽 __m128 操作。

3. FP16 KV Cache (键值缓存)

键值向量以 16 位浮点数而非 32 位存储。KV 缓存内存减少一半,从 ~88MB 降至 ~44MB。转换使用软件 fp32_to_fp16() / fp16_to_fp32() —— 无需硬件 FP16 支持。

4. 预计算 RoPE 表

所有位置的正弦和余弦值在模型加载时计算一次。前向传播执行表查找,而不是每个 token 调用 64 次 sinf() / cosf() / powf()

5. Flash Attention (在线 Softmax)

单次通过注意力机制,带有运行最大值重缩放。消除了 O(seq_len) 注意力分数缓冲区 —— 对于内存受限设备上的长上下文至关重要。

6. 融合反量化 + 点积

vec_dot_q4_K_f32() 在一个传递中完成反量化和累加。权重行没有中间浮点缓冲区。将矩阵乘法的内存流量减少约 50%。

7. 多线程矩阵乘法

matmul() 使用 pthreads 将输出行分发到各个线程。每个线程独立处理其块并使用融合点积。可扩展至约 8 个核心。

8. 语法约束 JSON

--json 模式在加载时预先分析词表中的每个 token(大括号差值、方括号差值、引号配对)。生成期间,它屏蔽 logits 以确保语法有效的 JSON —— 对于小模型的函数调用至关重要。

9. KV 缓存持久化

--cache file.kvc 在提示词处理后保存 FP16 KV 缓存状态。下次使用相同提示词运行时,它加载缓存并完全跳过预填充。重复系统提示可降低 74% 延迟


支持的模型

PicoLM 支持任何 GGUF 格式的 LLaMA 架构模型:

模型 参数量 GGUF 大小 (Q4_K_M) 所需 RAM
TinyLlama 1.1B 1.1B 638 MB ~45 MB
Llama 2 7B 7B 4.1 GB ~200 MB
Phi-2 2.7B 1.6 GB ~90 MB

嵌入式推荐: TinyLlama 1.1B Q4_K_M —— 可舒适地运行在 256MB+ RAM 的设备上。

支持的量化格式

Q2_K Q3_K Q4_K Q4_0 Q5_K Q6_K Q8_0 F16 F32

文件结构

PicoLM/
├── README.md              ← you are here
├── BLOG.md                ← technical deep-dive blog post
├── install.sh             ← one-liner Pi installer
│
├── picolm/                ← the inference engine (pure C)
│   ├── picolm.c           ← CLI entry point, generation loop (273 lines)
│   ├── model.h/c          ← GGUF parser, mmap, forward pass (146 + 833 lines)
│   ├── tensor.h/c         ← matmul, rmsnorm, softmax, rope (44 + 298 lines)
│   ├── quant.h/c          ← dequantization, SIMD kernels (140 + 534 lines)
│   ├── tokenizer.h/c      ← BPE tokenizer (32 + ~200 lines)
│   ├── sampler.h/c        ← temperature + top-p sampling (19 + ~100 lines)
│   ├── grammar.h/c        ← JSON grammar constraints (64 + 175 lines)
│   ├── Makefile           ← build targets for all platforms
│   └── build.bat          ← Windows MSVC build script
│
└── tinyllama-1.1b-chat-v1.0.Q4_K_M.gguf  ← model file (638 MB, not in git)

**总计 C 源代码:约 2,500 行。**这就是整个推理引擎——包括 GGUF 解析、内存映射(mmap)、反量化、矩阵运算、注意力机制、分词、采样和语法约束。


工作原理

mmap 技巧

传统的推理引擎将整个模型加载到 RAM(随机存取存储器)中。PicoLM 则不然。相反:

  1. 模型文件被内存映射(Linux/macOS 上使用 mmap,Windows 上使用 MapViewOfFile
  2. 权重指针直接指向映射的文件——无需复制
  3. 在**前向传播(forward pass)**期间,每一层的权重按顺序访问
  4. 操作系统会自动将需要的权重调入页面并淘汰旧的
  5. madvise(MADV_SEQUENTIAL) 向内核提示访问模式

结果: 638MB 的模型可以在拥有 256MB RAM 的设备上运行。任何时刻只有约 30MB 的模型数据在物理内存中。

量化

权重以 4 位量化格式存储(Q4_K_M)。对于 TinyLlama:

  • 原始大小: 11 亿参数 x 4 字节 = 4.4 GB
  • Q4_K: 11 亿参数 x ~0.56 字节 = 638 MB
  • 质量损失: 极小——Q4_K 每 32 个权重的子块保留 6 位缩放比例

分组查询注意力 (GQA)

TinyLlama 使用 32 个查询头,但只有 4 个键/值头。每个 KV 头由 8 个查询头共享。与完整的**多头注意力(multi-head attention)机制相比,这使KV 缓存(KV cache)**大小减少了 8 倍。


构建与测试

前置条件

平台 要求
Linux/Pi gcc, make(通过 apt install build-essential 安装)
macOS Xcode 命令行工具(xcode-select --install
Windows Visual Studio 构建工具(cl.exe)

验证构建

# Build
make native

# Test with greedy decoding (deterministic output)
./picolm model.gguf -p "The capital of France is" -n 20 -t 0
# Expected: "Paris. It is the largest city in France..."

# Test JSON mode
./picolm model.gguf --json -p "Return JSON with name and age" -n 50 -t 0.3
# Expected: valid JSON like {"name": "...", "age": ...}

# Test KV cache
./picolm model.gguf --cache test.kvc -p "Hello" -n 10 -t 0
./picolm model.gguf --cache test.kvc -p "Hello" -n 10 -t 0
# Second run should say "Skipping N cached prompt tokens"

内存验证

PicoLM 将内存统计信息打印到标准错误输出(stderr):

Memory: 1.17 MB runtime state (FP16 KV cache separate)

总计 = 运行时状态 + FP16 KV 缓存。对于上下文长度为 2048 的 TinyLlama:约 45 MB。


常见问题

问:能运行 Llama 2 7B 吗? 答:可以,前提是你有足够的 RAM 用于 KV 缓存(4096 上下文下 7B 模型约需 1.4 GB)。模型文件通过 mmap 保留在磁盘上。在配备 4GB RAM 的 Pi 4 上可以运行,但速度较慢(约 1-2 tok/s)。

问:为什么不使用 llama.cpp? 答:llama.cpp 很优秀,但在小模型上运行时仍需约 200MB+ 内存,构建依赖复杂,且主要针对桌面/服务器用例。PicoLM 专为嵌入式设计:仅需 45MB RAM,80KB 二进制文件,零依赖。

问:输出质量好吗? 答:TinyLlama 1.1B 是一个小模型——它能很好地处理简单任务(问答、摘要、基本推理、JSON 生成)。它无法与 GPT-4 相媲美,但能在没有网络的 10 美元开发板上运行。对于结构化输出,--json 语法模式可确保生成有效的 JSON,无论模型质量如何。

问:关于 GPU 加速呢? 答:PicoLM 设计上仅支持 CPU。目标硬件(10-15 美元的开发板)没有 GPU。在 x86/ARM CPU 上,SIMD(单指令多数据流)(NEON/SSE2)可提供显著的速度提升。

问:我可以使用不同的模型吗? 答:任何 LLaMA 架构的 GGUF 模型均可。从 HuggingFace 下载并将 PicoLM 指向该模型。推荐的量化方式:Q4_K_M(最佳质量/大小平衡)或 Q2_K(最小,质量较低)。


路线图

  • AVX2/AVX-512 内核(现代 CPU 上生成速度提升 2-4 倍)
  • 使用草稿模型的投机解码
  • 上下文滑动窗口(超出 max_seq_len 的无限生成)
  • 权重剪枝以进一步减少内存
  • 服务器模式的连续批处理
  • 支持 Mistral / Phi 架构

技术博客

有关优化历程的详细文章(包含代码片段和实战经验),请查看 BLOG.md


许可证

MIT 许可证。详情见 LICENSE


PicoLM —— 因为智能不应需要数据中心。

常见问题

相似工具推荐

stable-diffusion-webui

stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。

162.1k|★★★☆☆|今天
开发框架图像Agent

everything-claude-code

everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上

139k|★★☆☆☆|今天
开发框架Agent语言模型

ComfyUI

ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。

107.7k|★★☆☆☆|2天前
开发框架图像Agent

NextChat

NextChat 是一款轻量且极速的 AI 助手,旨在为用户提供流畅、跨平台的大模型交互体验。它完美解决了用户在多设备间切换时难以保持对话连续性,以及面对众多 AI 模型不知如何统一管理的痛点。无论是日常办公、学习辅助还是创意激发,NextChat 都能让用户随时随地通过网页、iOS、Android、Windows、MacOS 或 Linux 端无缝接入智能服务。 这款工具非常适合普通用户、学生、职场人士以及需要私有化部署的企业团队使用。对于开发者而言,它也提供了便捷的自托管方案,支持一键部署到 Vercel 或 Zeabur 等平台。 NextChat 的核心亮点在于其广泛的模型兼容性,原生支持 Claude、DeepSeek、GPT-4 及 Gemini Pro 等主流大模型,让用户在一个界面即可自由切换不同 AI 能力。此外,它还率先支持 MCP(Model Context Protocol)协议,增强了上下文处理能力。针对企业用户,NextChat 提供专业版解决方案,具备品牌定制、细粒度权限控制、内部知识库整合及安全审计等功能,满足公司对数据隐私和个性化管理的高标准要求。

87.6k|★★☆☆☆|今天
开发框架语言模型

ML-For-Beginners

ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程,旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周,包含 26 节精炼课程和 52 道配套测验,内容涵盖从基础概念到实际应用的完整流程,有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。 无论是希望转型的开发者、需要补充算法背景的研究人员,还是对人工智能充满好奇的普通爱好者,都能从中受益。课程不仅提供了清晰的理论讲解,还强调动手实践,让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持,通过自动化机制提供了包括简体中文在内的 50 多种语言版本,极大地降低了全球不同背景用户的学习门槛。此外,项目采用开源协作模式,社区活跃且内容持续更新,确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路,ML-For-Beginners 将是理想的起点。

85k|★★☆☆☆|今天
图像数据工具视频

ragflow

RAGFlow 是一款领先的开源检索增强生成(RAG)引擎,旨在为大语言模型构建更精准、可靠的上下文层。它巧妙地将前沿的 RAG 技术与智能体(Agent)能力相结合,不仅支持从各类文档中高效提取知识,还能让模型基于这些知识进行逻辑推理和任务执行。 在大模型应用中,幻觉问题和知识滞后是常见痛点。RAGFlow 通过深度解析复杂文档结构(如表格、图表及混合排版),显著提升了信息检索的准确度,从而有效减少模型“胡编乱造”的现象,确保回答既有据可依又具备时效性。其内置的智能体机制更进一步,使系统不仅能回答问题,还能自主规划步骤解决复杂问题。 这款工具特别适合开发者、企业技术团队以及 AI 研究人员使用。无论是希望快速搭建私有知识库问答系统,还是致力于探索大模型在垂直领域落地的创新者,都能从中受益。RAGFlow 提供了可视化的工作流编排界面和灵活的 API 接口,既降低了非算法背景用户的上手门槛,也满足了专业开发者对系统深度定制的需求。作为基于 Apache 2.0 协议开源的项目,它正成为连接通用大模型与行业专有知识之间的重要桥梁。

77.1k|★★★☆☆|2天前
Agent图像开发框架