powered by TechFeed
表示モード
Deep Dive

54GBの27B LLMが3.9GBに — PrismMLの「Bonsai 27B」がスマートフォンで動く精度を維持できた理由

7月14日、MarkTechPostが「PrismML Releases Bonsai 27B: 1-bit and Ternary Builds of Qwen3.6-27B That Run on Laptops and Phones」と題した記事を公開した。この記事では、PrismMLがQwen3.6-27BをベースにTernary(三値)および1-bit量子化した27Bクラスのモデル「Bonsai 27B」を公開し、ノートPCやスマートフォン上での動作を実現したことについて詳しく紹介されている。

7月14日、MarkTechPostが「PrismML Releases Bonsai 27B: 1-bit and Ternary Builds of Qwen3.6-27B That Run on Laptops and Phones」と題した記事を公開した。この記事では、PrismMLがQwen3.6-27BをベースにTernary(三値)および1-bit量子化した27Bクラスのモデル「Bonsai 27B」を公開し、ノートPCやスマートフォン上での動作を実現したことについて詳しく紹介されている。


27Bモデルが3.9GBに収まる

LLMの量子化(重みを低ビット精度で表現してメモリを削減する手法)自体は珍しくないが、Bonsai 27Bはその限界を大きく押し下げた。

なお、Qwen3.6-27BはAlibabaが開発・公開する大規模言語モデルシリーズ「Qwen3」の一モデルであり、27Bクラスでは高い性能を持つオープンウェイトモデルとして知られている。

Ternary Bonsai 27B は重みを{−1, 0, +1}の三値で表現し、真の精度は1.71 bits/weight(ビット/重み)。ファイルサイズは5.9GB1-bit Bonsai 27B は{−1, +1}の二値で1.125 bits/weight、わずか3.9GBである。比較対象として、FP16(通常の半精度浮動小数点)のQwen3.6-27Bは54GBであり、それぞれ約9.4倍、約14.2倍の圧縮率だ。

PrismMLは「1-bit Bonsai 27Bは27Bクラスのモデルとしてスマートフォンに初めて収まった」と主張している。

重要なのは、これが新規の事前学習(pretrain)ではないという点だ。アーキテクチャはQwen3.6-27Bそのままで、重みを低ビット表現に変換したものである。BitNetがコラプス(品質崩壊)を避けるためにゼロから事前学習するアプローチを取るのに対し、Bonsai 27Bは既存の学習済みモデルを圧縮する方式を採る。


精度はどこまで保たれるか

PrismMLは15のベンチマークをH100 GPU上のvLLM+EvalScopeで評価した(thinking mode使用)。

バリアント bpw サイズ スコア平均
Qwen3.6-27B FP16 16.0 54GB 85.07
Q4_K_XL("4-bit") 5.2 17.6GB 84.99
IQ2_XXS("2-bit") 2.8 9.4GB 72.73
Ternary Bonsai 27B 1.71 5.9GB 80.49
1-bit Bonsai 27B 1.125 3.9GB 76.11

Ternaryは**FP16比94.6%、1-bitは89.5%**を維持する。

カテゴリ別では以下の通りだ。

カテゴリ FP16 Ternary 1-bit
数学 95.33 93.40 91.66
コーディング 88.74 85.96 81.88
知識・推論 83.15 76.96 73.39
エージェント・ツール呼び出し 80.00 74.01 66.03
指示追従 78.47 71.77 65.74
ビジョン 72.61 65.19 59.57

特筆すべきは、従来の「2-bit」相当のIQ2_XXSとの比較だ。IQ2_XXSはMMLU-Redux(大規模マルチタスク言語理解ベンチマークの再評価版。短答式の知識問題が中心)では88.93と高スコアを出す一方、AIME26で57.5、LiveCodeBenchで56.4まで崩壊する。短答式ベンチマークでは品質劣化が見えにくく、推論・コーディングタスクで顕著に崩れるパターンだ。Bonsai 27BのTernaryはAIMEやLiveCodeBenchでもこの崩壊を示さない点が差別化要因となっている。


スマートフォンへの搭載を可能にするメモリ設計

スコアより実用面で重要なのがメモリ管理だ。iOSは単一アプリが使えるメモリをおよそ物理メモリの半分に制限する。つまり12GBのiPhoneでは約6GBが上限となる。

KVキャッシュ(過去トークンの計算結果を保持するバッファ)も予算を圧迫する。Qwen3.6-27Bは64層中16層のみがフルアテンションキャッシュを持つ設計のため、FP16では約64 KiB/トークンで済む。262Kトークンのコンテキストでも、4-bit KVキャッシュを使えば約4.3GBに抑えられる。

100Kトークン時のピークメモリは以下のとおりだ。

  • 1-bit Bonsai 27B:11.6GB
  • Ternary Bonsai 27B:14.7GB
  • Q4_K_XL(参考値):約25.6GB

スループットと投機的デコーディング

各プラットフォームでの生成速度(tg128: 128トークン生成、pp512: 512トークンプリフィル)は以下のとおり。

プラットフォーム バリアント tg128 pp512
M5 Max Binary 66.4 tok/s 874 tok/s
M5 Pro Ternary 26.2 tok/s 393 tok/s
iPhone 17 Pro Max Binary 11.0 tok/s 111 tok/s
H100(CUDA) Binary 104.8 tok/s 2755 tok/s

PrismMLはBonsai 27B向けにDSparkという投機的デコーダー(ドラフトモデルが先読みした候補をターゲットモデルが検証する手法)も同梱する。H100でdraft depth k=4のとき、受理長τ=3.6となり143.8 tok/s(1.37倍)のスループット向上を達成する。検証はlosslessで、出力分布は変わらない。


実行方法

GitHubリポジトリのデフォルトはTernary 27Bだ。サーバー起動とCLI直接実行の両方に対応しており、以下はサーバー起動およびllama.cpp経由でのCLI実行例だ。

# OpenAI互換API + チャット/ビジョンUI(:8080)を起動
./scripts/start_llama_server.sh

# llama.cpp CLI(GGUF形式)
./llama-cli -m ./Ternary-Bonsai-27B-gguf/Ternary-Bonsai-27B-Q2_0.gguf \
  --mmproj ./Ternary-Bonsai-27B-gguf/mmproj.gguf -c 0 \
  -p "Explain KV cache growth."

MLX経由での実行も可能だ(mlx_lm.generate --model prism-ml/Ternary-Bonsai-27B-mlx-2bit)。ツール呼び出しはOpenAI互換のtools配列を使う。llama.cpp(CUDA・Metal対応)とMLXの両方で動作し、ライセンスはApache 2.0。モデル重みはHugging Faceから取得できる。ノートPC上でのTernaryビルドによる262Kトークン対応のコードリポジトリ全体への問い合わせ、単一GPUでの24GBカードへの27Bクラス品質のサービング提供なども想定されている。なお1-bitビルドについては、iPhoneのバッテリー1%あたり672トークンという消費効率が計測されている。


詳細はPrismML Releases Bonsai 27B: 1-bit and Ternary Builds of Qwen3.6-27B That Run on Laptops and Phonesを参照していただきたい。