ryugyosoft/Ternary-Bonsai-2-4B-onwx

Source: 🤗image-text-to-textapache-2.04B activated2.3 GBother✓ 111 checksumsupdated 4d ago
or submit a torrent

Ternary Bonsai 2 4B for onwx — 2 ビットの 4B を AMD Ryzen AI の NPU で(画像も読めます)

日本語 | English

Prism ML の Ternary-Bonsai-2-4B(Qwen3.5-4B を三値の重みで学習し直したモデル)を、onwx 用に変換したものです。onwx は LLM を AMD Ryzen AI の NPU(XDNA2)だけで 動かすアプリで、このリポジトリにはモデルと、このモデル専用の NPU プログラムが入っています(アプリは別にインストールします)。

重みは三値(−1・0・+1)を 2 ビットのまま NPU に載せ、行列計算・DeltaNet・アテンション・LM ヘッドまで 1 トークンの計算をすべて NPU の 32 個の AI エンジンで行います。同じ大きさの int4 のモデルよりダウンロードもメモリも小さく、生成も速くなります。画像のエンコーダー(ViT)は CPU で動きます。NPU 向けのプログラムはビルド済みなので、PC の上でコンパイルを待つことはありません。

Ryzen AI Max+ 395(Windows)
プロンプトの読み込み 約 1.8 秒 / 約 5.8 秒(1,000 / 4,000 トークン。2 万トークンで約 34 秒)
文章の生成 約 29 tok/s
画像 1 枚のエンコード 約 2 秒(CPU、384×288 ピクセルの画像。初回は読み込みに約 1.8 秒)
ダウンロード 2.3 GB
使用メモリ 約 3.3 GB + 文脈 1k トークンあたり約 13 MB(画像を使うと+約 1.3 GB)
ロード 数秒(コンパイルなし)

(onwx 0.7.0、Ryzen AI Max+ 395(Windows)で NPU の電力モードを performance にして測定。Ryzen AI 300 シリーズ(HX 370 など)も NPU は同じ 32 個の AI エンジンで、同じ方式で動きます。標準の電力モードでは NPU のクロックが下がって 2 割ほど遅くなります。電力モードは管理者の PowerShell で C:\Windows\System32\AMD\xrt-smi.exe configure --pmode performance。Windows の Copilot+ の AI 機能が NPU を使っていると遅くなることがあります)

使い方

  1. onwx(アプリ)を入れます。 Windows はスタートメニューで「PowerShell」を開き、次の 1 行を貼って Enter(Ubuntu は onwx の README の curl ... | bash)。

    irm https://huggingface.co/ryugyosoft/onwx/resolve/main/install.ps1 | iex
    
  2. タスクトレイの赤い onwx アイコンから開く onwx ウィンドウ の「モデル」タブで Ternary Bonsai 2 4B を選び、「ダウンロード」を押します(2.3 GB)。

  3. 「サーバー」タブで「ロード」を押します。

  4. 「チャット」ですぐ試せます(画像も貼れます)。他のアプリからは OpenAI 互換 API として使えます(base URL は http://127.0.0.1:8100/v1、画像は image_url の data URL で)。

from openai import OpenAI
c = OpenAI(base_url="http://127.0.0.1:8100/v1", api_key="none")
r = c.chat.completions.create(model="Ternary-Bonsai-2-4B-onwx", messages=[{"role": "user", "content": "こんにちは"}])
print(r.choices[0].message.content)

動く PC

  • XDNA2 NPU の AMD Ryzen AI:Ryzen AI 300 シリーズ(Strix Point、例:Ryzen AI 9 HX 370)、Ryzen AI Max シリーズ(Strix Halo、例:Ryzen AI Max+ 395)
  • Windows 11 と AMD の NPU ドライバー(32.0.203 以降で確認)。Ubuntu は試験的(amdxdna ドライバーと XRT が必要)
  • メモリ 16 GB 以上

しくみ

  • 重み:三値の符号を 2 ビット、128 個ごとのスケールを bf16 で持つ元の MLX 2 ビット形式のまま、NPU の各 AI エンジンが読む順に並べ替えています(1 重みあたり約 2.1 ビット)。Prism ML の重みは、入力側を 512 個ずつアダマール行列とランダムな符号で回転した形で保存されているので、NPU 上でも入力を同じように回転してから掛けます。
  • 生成(1 トークンずつ):16 個の AI エンジンが重みを読みながら行列×ベクトルを計算し、8 個が DeltaNet、4 個がアテンションを受け持ちます。元のモデルを CPU で計算した参照との差は、出力の分布の KL で 0.0013 以下です(貪欲法で選ぶトークンは同じ)。
  • プロンプトの読み込み:1,024 / 2,048 トークンずつ、NPU の 32 個の AI エンジン全部で 1 層ずつ計算します(行列計算は bfp16 の行列ユニット。三値の重みはその層の直前に NPU 上で展開するので、使用メモリの増加は作業領域の約 0.5 GB だけ)。アテンション・DeltaNet・行列計算は Qwen3.5-4B 用のプログラムと共通で、512 個ずつの回転を含む合間の小さな処理は CPU で行います(AVX-512 が必要。Ryzen AI 300 / Max は対応)。1 トークンずつ読んだときとの差は KL で 0.0007〜0.0042(最も確率の高いトークンは同じ)。画像を含むプロンプトは今のところ 1 トークンずつ読みます
  • 画像:Qwen3.5 の ViT(24 層。Prism ML のモデルでも元の重みのまま)を numpy で CPU 上で動かし、2×2 パッチごとに 1 トークンとして言語モデルに入れます(位置は MRoPE)。縦横比は保ったまま、最大で 512×512 ピクセル相当(256 トークン)に縮めます。
  • キャッシュ:アテンションのキーと値は、ヘッドごとにアダマール行列で回転してから int8 で持ちます。
  • 文脈:最大 262144 トークン(モデルの上限)。長いほど遅くなります。
  • 思考モードとツール呼び出しに対応しています。動画は読めません。

ファイル

ファイル 中身
blobs/L*.wgt 各層の重み(2 ビット、NPU が読む並び)
blobs/L*.st DeltaNet 層の状態の初期値・畳み込みの重み
blobs/head.wgt、embed.npz LM ヘッド・単語の埋め込み(元のモデルと同じく、LM ヘッドは埋め込みと同じ重み)
vision.npz 画像エンコーダーの重み(bf16、元のまま)
plans/ NPU プログラム(xclbin と命令列:生成用・プロンプト用(pfx/ が 1,024 / 2,048 トークンずつまとめて読む経路))
xdna.json、engine.json プログラムとモデルの設定
tokenizer.json ほか 元のモデルのトークナイザーとチャットテンプレート

ライセンス

元のモデルと同じ Apache-2.0 です(LICENSE、NOTICE.txt)。モデルの重みは Prism ML の Ternary-Bonsai-2-4B(Created using Bonsai by Prism ML)に由来し、そのもとは Alibaba Cloud の Qwen/Qwen3.5-4B です。