クラウドなし、APIキーなし、月額費用なし。10ドルのボードでLLMを動かせるOSSが登場しました。

この記事でわかること:

  • PicoLMの概要と動作原理
  • なぜ256MBのRAMで638MBのモデルが動くのか
  • 対応ハードウェアと実測パフォーマンス
  • インストール方法と基本的な使い方
  • llama.cppとの違い

PicoLMとは

https://github.com/RightNow-AI/picolm

PicoLMは、C11で書かれた軽量LLM推論エンジンです。「$10のボードで256MB RAMがあれば1Bパラメータのモデルが動く」というコンセプトのもとに設計されました。コードは約2,500行、バイナリは80KB以下、外部ライブラリへの依存はゼロです。

ターゲットはRaspberry PiやSipeed LicheeRV NanoなどのSBCですが、Linux・Windows・macOSのx86-64マシンでも動作します。ライセンスはMITで、GitHubのスター数は現在1,500以上です。

PicoLMはもともとPicoClawのローカルブレインとして開発されました。PicoClawはGoで書かれたAIアシスタントで、TelegramやDiscord、CLIからメッセージを受け取り、PicoLMを呼び出して返答を生成します。この組み合わせで、完全オフラインのAIエージェントが成立します。

なぜ256MBのRAMで638MBのモデルが動くのか

TinyLlama 1.1BのGGUFファイルは638MBです。一般的な推論エンジンはモデルをRAMに丸ごと読み込むため、同等以上のメモリが必要になります。

PicoLMはこの問題をmmap(メモリマップI/O)で解決しています。モデルファイルはディスクに置いたまま、OSのページキャッシュを通じて1層ずつストリーミングします。物理RAMには常に約30MBのモデルデータしか乗りません。

ランタイム全体のRAM使用量は次の通りです。FP16 KVキャッシュ(コンテキスト2048)が約40MB、トークナイザーが約4.5MB、活性化バッファなどが約0.5MBで、合計約45MBになります。モデルファイル自体はディスクに638MB必要ですが、RAM要件は45MBで収まります。コンテキストを512に絞れば15MBまで削減できます。

対応ハードウェアとパフォーマンス

実機での測定値は以下の通りです(TinyLlama 1.1B Q4_K_M使用)。

ボード 価格 生成速度 RAM使用量
LicheeRV Nano $10 約1 tok/s 45MB
Pi Zero 2W $15 約2 tok/s 45MB
Pi 3B+ $25 約4 tok/s 45MB
Pi 4(4コア) $35 約8 tok/s 45MB
Pi 5(4コア) $60 約10 tok/s 45MB

$10のLicheeRV Nanoでは約1 tok/sと速くはありませんが、インターネットなしで動き続けます。Pi 4なら8 tok/s程度出るため、問答や要約といった用途では実用的な速度です。

主な最適化技術

PicoLMはベースラインの1.6 tok/sから、x86では13.5 tok/sまで高速化しています。組み合わせている最適化のうち、特に重要な4つを紹介します。

ARM NEON / x86 SSE2 SIMD。CPUアーキテクチャを自動検出し、4要素幅のベクトル演算を使います。Pi 3/4/5ではARM NEON、Intel/AMD CPUではSSE2が有効になります。

FP16 KVキャッシュ。KeyとValueベクトルを32bitではなく16bitで保存します。KVキャッシュのメモリ消費が半分になり、約88MBから約44MBに削減されます。

フラッシュアテンション。オンラインソフトマックスを使ったシングルパスのアテンション実装です。O(seq_len)のバッファが不要になり、メモリ制約の強いデバイスで長いコンテキストを扱えます。

KVキャッシュ永続化--cacheオプションでプロンプトのKV状態をファイルに保存できます。同じシステムプロンプトで再実行するとプレフィル処理をスキップでき、初回レイテンシを74%削減します。

インストールと使い方

Raspberry Pi / Linuxでの一発インストールは次のコマンドです。

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

このスクリプトはCPUのアーキテクチャを検出してSIMDフラグ付きでビルドし、TinyLlama 1.1B Q4_K_Mモデル(638MB)をダウンロードします。ソースからビルドする場合は次の通りです。

git clone https://github.com/rightnow-ai/picolm.git
cd picolm/picolm
make native       # x86/ARM自動検出
make model        # モデルダウンロード
./picolm model.gguf -p "重力を説明してください" -n 100

プロンプトはstdinからパイプで渡すこともできます。

echo "量子コンピュータを一文で説明してください" | ./picolm model.gguf -n 50

JSON出力モードとツール呼び出し

--jsonフラグを付けると文法制約付きのJSON出力モードが有効になります。このモードは全語彙トークンをロード時に事前解析し、生成時にロジットをマスクします。1Bの小さなモデルでも構文的に正しいJSONを保証します。

echo "現在時刻をJSONで返してください" | ./picolm model.gguf --json -n 100 -t 0.3
# 出力例: {"time": "14:30"}

PicoClawはこの機能を使って、Telegramからのメッセージに対してツール呼び出しを実行し、結果を返します。インターネットなしでAIエージェントのループが完結します。

llama.cppとの違い

llama.cppは多くのモデルに対応し、GUIや各言語バインディングも充実した高性能エンジンです。ただし小型モデルでも200MB以上のランタイムメモリが必要で、ビルド依存も複雑です。

PicoLMの立ち位置は明確です。ランタイム45MB、バイナリ80KB、依存ゼロ。$10〜$15のSBCで動かすことを前提に設計されており、llama.cppが想定しないハードウェアをターゲットにしています。GGUF形式のモデルはどちらでも使えるため、手持ちのGGUFファイルをそのまま試せます。

TinyLlama以外にもLlama 2 7B(約200MB RAM必要)やPhi-2(約90MB RAM必要)など、LLaMAアーキテクチャのGGUFモデルであれば動作します。

まとめ

PicoLMは「クラウドを使わずAIをデバイス上で動かしたい」という要件に対して、シンプルな構造で答えるツールです。

純粋なCコード2,500行で、638MBのモデルを45MBのRAMで動かします。Raspberry Pi Zeroのような$15のボードでも実用できます。オフライン環境、プライバシーを重視する用途、組み込みデバイスへのAI搭載を検討しているなら、選択肢に入れる価値があります。