ryugyosoft/Ternary-Bonsai-2-27B-onw

Source: 🤗text-generationapache-2.027B activated8.1 GBother✓ 11 checksumsupdated today
or submit a torrent

Ternary Bonsai 2 27B for onw — 2 ビットの 27B を Intel NPU で(Lunar Lake 以降専用)

日本語 | English

Prism ML の Ternary-Bonsai-2-27B(Qwen3.8-27B を三値の重みで学習し直したモデル)を、onw(俺のNPUがこんなに動くわけない)用に変換したものです。重みは三値(−1・0・+1)を 2 ビットのまま NPU に載せます。27B のモデルが、メモリ 16 GB の Lunar Lake の NPU で動きます。

まず断っておくと、これは実用というよりロマンです。 NPU で 27B が動く、というのを確かめるためのモデルです。回答は 4 tok/s 前後で、しかもプロンプトの処理が 1 トークンずつなので、長い文章を貼ると読み終わるまでに何分もかかります(下の「制限」を読んでください)。短い質問を投げて、27B の答えをゆっくり眺める用途に向いています。

Lunar Lake(Core Ultra シリーズ 2、NPU 4000)以降の NPU 専用です。 2 ビットの重みは NPU 4 以降のハードウェアでしか計算できず、Meteor Lake・Arrow Lake(NPU 3720)ではコンパイルできません。onw ウィンドウは Lunar Lake 以降の PC でだけ一覧に出します。

64 トークン用のグラフは試作したが失敗(onw 3.2.0)

4B・9B は onw 3.2.0 で 64 トークン用のグラフ(プロンプトを 10 倍以上速く処理)を入れましたが、27B は試作して、出すのをやめました。

  • 作って動かすことはできました(Panther Lake でプロンプト約 60 tok/s、生成約 4.5 tok/s)。
  • ただし NPU のメモリを 13.8 GB 使い、メモリ 16 GB の PC に載りません。2 ビットの重みを NPU で計算するには、128 個の重みごとに 16 バイトの「重みテーブル」がグラフごとに必要で、27B ではグラフ 1 組あたり 3.4 GB になります。1 トークン用と 64 トークン用の 2 組で、テーブルだけで重み(6.8 GB)と同じ大きさです。
  • 初回のコンパイルも Panther Lake で 36 分かかりました。

このため 27B は、これまでどおり 1 トークン用のグラフだけです。テーブルを持たずに済む方法を Intel に要望しています。

測定(onw 1.4.9)

Lunar Lake(NPU 4000、メモリ 16 GB) Panther Lake(NPU 5010、メモリ 64 GB)
生成速度(思考オフ) 約 4.2 tok/s 約 3.9 tok/s
プロンプト処理 約 4 tok/s(1 トークンずつ) 約 4 tok/s(1 トークンずつ)
使用メモリ(プロセス) 約 9.6 GB 約 9.9 GB
初回起動(NPU 向けコンパイル) 約 10 分 約 2 時間半
2 回目以降の起動 約 15 秒 約 20 秒
ダウンロード 7.6 GB 7.6 GB

2 台で、同じ質問に一字一句同じ答えが返りました(日本語・英語・俳句で確認)。

制限

  • プロンプトは 1 トークンずつ処理します。 Intel の NPU コンパイラー(8.3・8.4)は、2 ビットの重みを複数トークンのブロックで計算すると結果を間違えます(1 トークンなら正しい)。そのため、このモデルには 1 トークン用のグラフしか入れていません。1,000 トークンのプロンプトなら 4 分ほど待ちます。会話の続きは前回の分を再利用するので、2 回目以降の質問は新しく書いた分だけ待ちます。コンパイラーの不具合は onw の NPU キットで直しましたが、64 トークン用のグラフはメモリに収まらないため入れていません(上の「試作したが失敗」)。
  • 思考(reasoning)は既定でオフにしています。Bonsai 2 は思考をオンにすると何千トークンも考え続けることがあり、この速度では答えにたどり着きません。思考を使うなら、チャット画面の思考の段階を「少し」か「普通」にしてください(このモデルのテンプレートは low・medium・xhigh の 3 段階で、「しっかり」は xhigh になります)。
  • MTP 先読み・先読み検証(PLD)は使えません(どちらも複数トークンのブロックが要るため)。
  • 画像は読めません(元の Bonsai 2 には画像エンコーダーが付いていますが、このモデルには入れていません)。
  • 精度は、三値で学習した 27B の精度です。Prism ML の説明では元の Qwen3.8-27B に近いとされていますが、INT4 の 27B よりは落ちます。

仕組み

  • 重み:Bonsai の MLX 版(2 ビット、グループ 128)の値をそのまま使い、OpenVINO の u2 型の定数として NPU に渡します。詰め直しや再量子化はしていません(損失なし)。NPU 上では 2.125 ビット/重み(三値 2 ビット+グループごとの f16 の倍率)で、27B の層が 6.5 GB です。
  • アダマール回転:Bonsai 2 は、重みを「ブロック 1,024 のウォルシュ・アダマール変換で回した基底」で学習しています。そのため、行列の掛け算の前に入力を同じように回す必要があり、onw はこれをグラフの中で計算します(32×32 の 2 段に分けた形。1 層あたりのコストは 1% 未満)。
  • 埋め込み:回した状態で保存されている行を、読み込み時に元の基底に戻して INT8 の表にしています(ホスト側で参照)。
  • そのほかは Qwen3.5 系の onw モデルと同じ作りです(Gated DeltaNet+ゲート付きアテンション、ページ式の INT8 KV キャッシュ)。詳しくは onw の技術解説。

使い方

  1. onw 1.4.9 以降を入れます(onw の「インストール」)。
  2. onw ウィンドウの「モデル」タブで Ternary Bonsai 2 27B (2-bit) を選び、「ダウンロード」を押します(Lunar Lake 以降の PC でだけ表示されます)。
  3. 「サーバー」タブで「ロード」。初回は NPU 向けのコンパイルに Lunar Lake で約 10 分、Panther Lake で約 2 時間半かかります。

上級者向け:hf download ryugyosoft/Ternary-Bonsai-2-27B-onw で取得したフォルダを onw serve フォルダ で起動できます。

ライセンス

Apache-2.0(元モデルと同じ)。重みは Prism ML の Ternary-Bonsai-2-27B の 2 ビットの値をそのまま並べ直したもので、学習も再量子化もしていません。Created using Bonsai by Prism ML.