-
BitLlama = Pure Rust 製ローカル LLM 推論エンジン(
pip install bit-ttt-engineで即使える) - 世界初(OSS)の TTT(Test-Time Training) 搭載 — 推論しながらモデルが学習する
-
Soul Learning:
bitllama learn "私の名前はOnokoです"→ AI が覚えてくれる、ローカル完結の記憶システム - RTX 4060 Ti で Llama-2 7B: 47 tok/s(llama.cpp の 90%)、追加で学習機能付き
- 1.58-bit ternary 対応ロードマップで 0.4 GB で 7B 相当品質 を目指す
なぜ作ったのか
2025年、ローカル LLM は Ollama や llama.cpp のおかげで「動かすだけ」なら簡単になりました。
でも 学習 はどうでしょう?
- OpenAI の Memory、Claude の Memory — すべて クラウド側 で処理
- あなたの好みや文体は、他社のサーバーに保存される
- ローカルで動く LLM は「忘れる AI」のまま
「ローカルで学習して、育てられる AI が欲しい」 — これが BitLlama の出発点です。
アーキテクチャ概要
┌─────────────────────────────────────────────────┐
│ BitLlama │
│ │
│ ┌──────────┐ ┌──────────┐ ┌───────────────┐ │
│ │ GGUF │ │ TTT │ │ Soul Learning │ │
│ │ Loader │ │ Engine │ │ (LoRA) │ │
│ │ │ │ │ │ │ │
│ │ Q4/Q8 │ │ Test-Time│ │ learn → save │ │
│ │ 量子化 │ │ Training │ │ → load → chat │ │
│ └──────────┘ └──────────┘ └───────────────┘ │
│ │
│ ┌──────────┐ ┌──────────┐ ┌───────────────┐ │
│ │ Chat │ │ OpenAI │ │ Desktop GUI │ │
│ │ Templates│ │ API互換 │ │ (Tauri+Svelte)│ │
│ │ 6モデル │ │ SSE対応 │ │ ストリーミング│ │
│ └──────────┘ └──────────┘ └───────────────┘ │
│ │
│ Pure Rust / candle (HuggingFace) / CUDA 対応 │
└─────────────────────────────────────────────────┘
技術スタック:
- 推論バックエンド: candle(HuggingFace の Rust ML フレームワーク)
- 量子化: GGUF フォーマット(Q4_K_M / Q8_0)
- GPU: CUDA + Flash Attention
- Python バインディング: PyO3 + maturin
- Desktop: Tauri 2.0 + Svelte + Tailwind CSS
- テスト: 116 テスト(CI で
--no-default-features検証)
クイックスタート
Python(pip install)
pip install bit-ttt-engine
import cortex_rust
# モデルを自動ダウンロード&ロード
model = cortex_rust.load("TheBloke/Llama-2-7B-Chat-GGUF")
# チャット
response = model.chat([
{"role": "user", "content": "Rustの良いところを3つ教えて"}
])
print(response)
CLI(シングルバイナリ)
# チャット(モデルパス指定)
bitllama run ./llama-2-7b-chat.Q4_K_M.gguf
# HuggingFace から pull
bitllama pull TheBloke/Llama-2-7B-Chat-GGUF
# OpenAI 互換 API サーバー
bitllama serve ./model.gguf --port 8000
起動したら、既存の OpenAI SDK がそのまま使えます:
from openai import OpenAI
client = OpenAI(base_url="http://localhost:8000/v1", api_key="unused")
response = client.chat.completions.create(
model="local",
messages=[{"role": "user", "content": "こんにちは!"}],
stream=True,
)
for chunk in response:
print(chunk.choices[0].delta.content, end="")
Soul Learning — 「育てる AI」の核心
BitLlama 最大の特徴が Soul Learning です。
仕組み
Soul = LoRA アダプタの永続化。推論モデル本体を変更せず、軽量な差分(~50MB)を追加学習して保存します。
Base Model (数GB, 不変)
↓
+ Soul (LoRA, ~50MB)
↓
パーソナライズされた推論
使い方
# 新しい Soul を作成(テキストから学習)
bitllama learn "私の名前はOnokoです。Rustが好きで、BitLlamaを開発しています。" \
--model ./model.gguf \
--save onoko.soul \
--epochs 3
# Soul を読み込んでチャット
bitllama run ./model.gguf --soul onoko.soul
# 追加で教える(既存 Soul に追記学習)
bitllama learn "最近はTauri 2.0でデスクトップアプリも作っています。" \
--model ./model.gguf \
--soul onoko.soul \
--epochs 2
なぜ LoRA なのか
| 手法 | メモリ | 保存サイズ | 品質 |
|---|---|---|---|
| Full Fine-tuning | GPU全部 | モデル全体 | 最高 |
| LoRA | +数百MB | ~50MB | 十分実用的 |
| Prompt Engineering | 0 | テキストのみ | コンテキスト長に依存 |
LoRA なら 8GB VRAM のゲーミング PC でも学習可能。保存サイズも小さく、Soul の共有も簡単です。
TTT(Test-Time Training)とは
従来の LLM は推論時に重みが固定されています。TTT は 推論中に内部状態を更新 する仕組みです。
従来: Input → [固定モデル] → Output
TTT: Input → [モデルが入力から学習] → Output(文脈適応済み)
Stanford/NVIDIA の TTT-E2E(2025年12月発表)では、128K トークンで 2.7 倍の高速化、200 万トークンで 35 倍 という結果が出ています。BitLlama はこの TTT を OSS で初めて実装したエンジンです。
ベンチマーク
推論速度(RTX 4060 Ti, Q4_K_M)
| モデル | BitLlama | llama.cpp | 対 llama.cpp |
|---|---|---|---|
| Llama-2 7B | 45.4 tok/s | 50.5 tok/s | 89.9% |
| Llama-3 8B | 36.8 tok/s | — | — |
| Mistral 7B | 42.1 tok/s | 47.3 tok/s | 89.0% |
| Gemma-2 2B | 75.1 tok/s | 101.8 tok/s | 73.8% |
| Qwen2.5 1.5B | 70.4 tok/s | — | — |
llama.cpp は C/C++ で 10 年以上最適化された実装です。Pure Rust で 90% の速度 を出しつつ、Soul Learning という付加価値を持つのが BitLlama の立ち位置です。
VRAM 使用量
| フォーマット | 7B モデル | 備考 |
|---|---|---|
| FP16 | ~14 GB | そのまま |
| Q4_K_M | ~5 GB | 精度ほぼ維持 |
| Q8_0 KV Cache | — | KV キャッシュ 82% 削減 |
Q8 KV Cache は BitLlama 独自実装で、長いコンテキストでの VRAM 消費を大幅に削減します。
他ツールとの比較
| 機能 | BitLlama | Ollama | llama.cpp | vLLM |
|---|---|---|---|---|
| Soul Learning(AI が覚える) | 唯一 | — | — | — |
| TTT(推論中学習) | 唯一 | — | — | — |
| マルチターン会話 | ✅ | ✅ | — | ✅ |
| OpenAI 互換 API | ✅ | ✅ | — | ✅ |
| LoRA ホットスワップ | ✅ | — | — | — |
| Q8 KV Cache | ✅ | — | — | — |
| Pure Rust シングルバイナリ | ✅ | Go | C++ | Python |
| デスクトップ GUI | ✅ (Tauri) | — | — | — |
pip install |
✅ | — | ✅ | ✅ |
対応モデル
現在 6 つのアーキテクチャに対応しています:
| モデル | テンプレート | 推奨サイズ |
|---|---|---|
| Llama-2 | llama2 |
7B, 13B |
| Llama-3 / 3.1 / 3.2 | llama3 |
1B, 3B, 8B |
| Gemma-2 | gemma |
2B, 9B |
| Qwen2.5 | chatml |
0.5B, 1.5B, 7B |
| Mistral | mistral |
7B |
| Phi | chatml |
3.8B (mini) |
GGUF フォーマットであれば、HuggingFace からワンコマンドでダウンロード可能です。
Desktop GUI(BitLlama Desktop)
Tauri 2.0 + Svelte で構築したネイティブデスクトップアプリも開発中です。
実装済み機能:
- モデル一覧表示・選択
- ストリーミングチャット(Tauri events でリアルタイム表示)
- 生成中のキャンセルボタン
- マルチターン会話履歴
- Windows インストーラー(NSIS)
フロントエンドとバックエンドの通信は Tauri の invoke + emit を使い、トークン単位でストリーミング表示しています。
1.58-bit — 次のフロンティア
1.58-bit ternary とは
通常の量子化は 4-bit(16段階)や 8-bit(256段階)。1.58-bit ternary は重みを {-1, 0, +1} の 3 値だけで表現します。
FP16: [-0.0234, 0.1523, -0.0891, 0.0012, ...] → 2 bytes/weight
INT4: [-2, 3, -1, 0, ...] → 0.5 bytes/weight
1.58-bit: [-1, 1, -1, 0, ...] → 0.2 bytes/weight
なぜ注目されているのか
BitNet 2B4T(2025年4月、Microsoft)の衝撃的な結果:
| BitNet 2B (1.58-bit) | Qwen2.5 1.5B (FP16) | Llama 3.2 1B (FP16) | |
|---|---|---|---|
| ARC-Challenge | 49.91 | 46.67 | 37.80 |
| HellaSwag | 68.44 | 68.28 | 60.80 |
| メモリ | 0.4 GB | 2.6 GB | 2.0 GB |
| CPU レイテンシ | 29 ms | 65 ms | 48 ms |
0.4 GB で FP16 の 2B モデルを凌駕。乗算が不要(加減算のみ)なので、CPU でも高速に動作します。
BitLlama のロードマップ
Phase 14.5 で native 1.58-bit 推論に対応予定です:
- Native 推論対応 — BitNet 2B4T / Falcon-Edge を直接実行
- GGUF TQ フォーマット — llama.cpp エコシステムとの互換
- サイズガード — 7B 未満の品質崩壊を防止
目標: $500 のノート PC で実用的な LLM
技術的なこだわり
キャンセル機能
LLM の生成は長時間かかることがあります。BitLlama では すべての長時間処理にキャンセル機能 を組み込んでいます。
// AtomicBool でイテレーション毎にチェック
let cancel_flag = Arc::new(AtomicBool::new(false));
for token in 0..max_tokens {
if cancel_flag.load(Ordering::Relaxed) {
break; // ユーザーがキャンセル
}
// トークン生成...
}
インクリメンタルデコード
マルチバイト文字(日本語)を正しくストリーミング表示するため、差分デコード を採用しています。
❌ 単一トークンデコード: token → decode → "?" (不正なバイト列)
✅ 差分デコード: [全トークン列] → decode - 前回分 = 正しい差分
1 トークンだけをデコードすると、UTF-8 のマルチバイト文字が途中で切れて文字化けします。全トークン列をデコードして前回との差分を取ることで、安全にストリーミングできます。
Q8 KV Cache
推論時のメモリボトルネックは KV Cache です。BitLlama は KV Cache を 8-bit に量子化することで、82% のメモリ削減 を実現しています。長いコンテキスト(4096+トークン)で特に効果が大きくなります。
開発の裏話
Pure Rust を選んだ理由
- シングルバイナリ配布 — Python 環境不要、CUDA バージョン地獄なし
- メモリ安全性 — LLM の長時間推論でメモリリークは致命的
- candle エコシステム — HuggingFace 公式の Rust ML フレームワーク
- クロスコンパイル — Windows / Linux / macOS を同一コードベースから
実際に開発してみると、Rust のおかげで「量子化の bit 操作」と「安全なメモリ管理」の両立ができ、unsafe をほぼ使わずに済んでいます。
テスト戦略
現在 116 テスト が CI で回っています。特徴的なのは:
- Soul Learning e2e テスト: LoRA 重み更新・Loss 減少・保存/復元の往復確認
- マルチターン会話テスト: 全 5 テンプレート × 複数パターン
-
CI は
--no-default-features: CUDA なし環境でも全テスト通過を保証
CUDA 依存のテストは --features cuda で別途実行する設計にしています。
今後の展望
| フェーズ | 内容 | 状態 |
|---|---|---|
| Phase 13 | 配布 & GUI(Desktop, Installer, PyPI) | ✅ ほぼ完了 |
| Phase 14 | ハードウェア自動検出 | 🟡 次期 |
| Phase 14.5 | Native 1.58-bit 推論 | 🔴 最大 ROI |
| Phase 15 | MCP 統合(Agent 化) | ⬜ 計画中 |
| v1.0.0 | 安定版リリース | ⬜ 計画中 |
特に Phase 14.5(Native 1.58-bit) は、0.4 GB で実用的な LLM を動かせるインパクトから最優先で開発を進めます。
まとめ
BitLlama は「ローカルで育てられる AI」を目指す Pure Rust LLM 推論エンジンです。
-
すぐ試せる:
pip install bit-ttt-engine→ 3 行で推論開始 - 育てられる: Soul Learning でパーソナライズ、データはローカルに残る
- 軽い: Q4 量子化 + Q8 KV Cache で 8GB VRAM あれば 7B モデルが動く
- 速い: llama.cpp の 90% の速度を Pure Rust で実現
- 未来がある: 1.58-bit ternary で「$500 PC で実用 LLM」が見えてきた
興味があれば、ぜひ触ってみてください。Star も歓迎です!
GitHub: https://github.com/imonoonoko/Bit-TTT-Engine
PyPI: https://pypi.org/project/bit-ttt-engine/
この記事は BitLlama v0.8.0 時点の内容です。