Snapdragon端末で言語モデルを実行する開発者に、超低ビットモデルをニューラル処理装置(NPU)で動かす選択肢が生まれた。モデルの重みを少ないビットで表現する形式と必要な演算が追加され、1ビット・2ビットモデルを端末のアクセラレーターで実行する基盤が整った。

1. 2つのリリースで分担して整えた対応

公開日はb11716が2026年10月17日、b11717が18日だ。日付は協定世界時に基づき、先行リリースが低ビット行列積を導入し、後続リリースが変換と行抽出演算を補った。

新たに対応する形式は、1ビット量子化のQ1_0と2ビット量子化のQ2_0だ。量子化とは、モデルの重みをより少ないビットで表現する方法だ。最初の変更には、モデルの読み込み時に重みの配置を再パックし、任意のバイト範囲を再読み込みする機能も含まれる。

行列積は、ベクトル演算ユニットのHVXと行列アクセラレーターのHMXの両方で対応する。単にファイルを読むだけでなく、新形式の重みを実際の計算経路につなぐ変更だ。

2. 行抽出とアダマール変換の追加

後続の変更では、必要な行だけを選んで読むGET_ROWSを、フラット配置とタイル配置の両方に追加した。タイル配置は行列を小さなブロックに分けて連続して保存する方式で、アクセラレーターが計算用データを取得しやすくする。

アダマール行列積も追加された。これは入力値を加算と減算で混ぜる変換だ。この経路では、処理長が32以上の2の累乗であり、重みと出力は32ビット浮動小数点、入力は32ビットまたは16ビット浮動小数点でなければならない。

入力の各行と出力は連続して配置され、入力と出力のサイズも同じでなければならない。デバイス内部の作業メモリに収まるかどうかも対応判定に含まれる。そのため、新たな低ビット重みへの対応とアダマール演算のデータ型の条件は区別して読む必要がある。

3. 保存容量の利点と実行中の変換コスト

後続の変更の提案者は、Bonsai-2の1ビット・2ビット経路が完全に利用可能になったと説明した。ただし、4ビット以上の形式より削減されたメインメモリ使用量をより生かすには、追加の最適化が必要だと述べた。利用可能という宣言が、そのまま最適な実行効率を意味するわけではない。

開発者向け文書によると、行列アクセラレーター経路では576バイトの1ビットタイルを実行中に16ビット浮動小数点タイル4個、合計8192バイトに展開し、デバイス内部メモリに置く。同じ576バイトの2ビットタイルは2個、合計4096バイトに展開するため、保存表現の縮小とは別に、変換処理と中間保存領域が必要だ。

4. 検証結果と性能の根拠の境界

最初の変更提案には、複数のアーキテクチャでビルドに成功し、AndroidのSM8850端末でv81を用いて試験した記録がある。1ビットと2ビットの対応は、それぞれ128件のテスト中128件に合格した。これは最初の変更の検証記録であり、後続の変更まで同じ範囲で検証したことを意味しない。

2つの変更提案には、新形式の処理速度や実際のメモリ削減幅を比較した測定値は示されていない。したがって、テストの合格数を速度向上の根拠にはできない。

5. 配布版と演算テストから着手

リリースにはSnapdragon向けLinuxおよびAndroid arm64配布版と、インストール案内へのリンクがある。この配布版にはCPU、Adreno GPU、Hexagon NPUが含まれる。自分でビルドする場合は、案内文書の統合ビルドツールがDockerコンテナーとプリセットを使ってコンパイルとデプロイを支援する。

以下は、保存されたSnapdragon案内文書の行列積テストコマンドをそのまま転載したものだ。指定したNPUで演算を試験する例であり、Bonsai-2モデルの実行コマンドや性能測定結果ではない。

~/src/llama.cpp$ ./scripts/snapdragon/run.py --target adb --devices HTP0:0 -- test-backend-ops -b HTP0:0 -o MUL_MAT

モデルの実行は、実行ツールでNPUデバイスを選び、モデルのパスを渡す方式だ。ただし、新形式のモデルを作る具体的な変換コマンドは、提供された資料には示されていない。

今回の変更は超低ビットモデルをNPUで試す基盤を広げたものであり、導入の判断では演算への対応と実行効率を分けて確認する必要がある。