現在の状況¶
バージョン 0.1.0a2(2026年11月)時点の内容です。このページでは、検証済みのこと(とその方法)、実装だけのこと、未解決のことを分けて書いています。迷ったときの根拠はリポジトリの証拠の記録です: CLIの実装・検証状況、 検証の記録、 研究のロードマップ、 実験ログ。
ひとことで¶
道具は動きます。 調査・量子化・校正・packed化・書き出し・評価・比較・探索は最後まで動き、Windows・WSL・AMDの GPUで、本物のライブラリと人工のモデルを使って試験しています。PyPIで公開しており、TUIもあります。研究の目標はまだ達成していません。 研究対象のGemma 4 E2Bを三値化したもので品質Gateを通ったものはなく、最新の実験は、今の校正の方式に構造上の限界があることを示しています。
CLIと環境¶
人工のモデル(シード固定でランダムに初期化したLlamaとStable Diffusionのpipeline)、本物のライブラリ、導入した wheelで検証しました:
| Windows CPU | WSL Ubuntu 24.04 CPU | Windows、Radeon RX 9070 XT | |
|---|---|---|---|
| 人工Llama: 三値の変換、pass、層ごとのpreserve、packedの往復 | ✔ 検証済み | ✔ 検証済み | ✔ FP32/BF16のforward、別プロセスでの再読込 |
| TorchAO 0.18.0のINT8: 変換・保存・再読込 | ✔ 検証済み | ✔ 検証済み | ✔ FP32/BF16のforward、別プロセスでの再読込 |
| Diffusers 0.40.0: UNetの差し替え、32×32、2 step | ✔ 検証済み | ✔ 検証済み | ✔ FP32/BF16の生成、有限値、保存 |
| 品質レポートschema 3、探索のworker、再開 | ✔ 人工fixture | ✔ 人工fixture | 計算と資源の計測まで。探索の品質はCPUで確認 |
| 固定版のGGUF converter | ✔ 隔離したconverterとreader、人工LlamaのFP32 | ✔ CPUのruntimeで最大8トークン生成 | ○ GPUでの実行は未検証 |
| wheelの導入、本物のentry pointのplugin | ✔ 検証済み | ✔ 検証済み | ✔ 複製したROCm環境にwheelを導入 |
| 学習済みのモデル・画像の品質 | ○ 未検証 | ○ 未検証 | ○ 未検証 |
| nativeのpacked三値カーネル | – 提供なし | – 提供なし | – 提供なし |
最終の検証(オフライン、Windows CPU): 326件合格、2件スキップ、失敗0件。スキップした2件はROCmが必要な試験で、 ROCm環境で別に合格しています。Ruff・format・mypyは全ファイルで通過しました。GPUのメモリの計測値は最大約84.6MiB でした。人工のモデルでの結果を、Gemma・Mistral・Qwenなどの実際のモデルに広げて解釈はしません。
それ以降の変更は、すべてLinuxとWindowsのGitHub CIを通しています。TUIの試験、Windowsでの本物のCtrl+Breakによる中止の試験、ジョブ管理の試験も含みます。
実機でのPyTorchの環境構築¶
オーナーのPC(Windows 11、Radeon RX 9070 XT、gfx1201)で、openternary setup はGPUを検出し、AMDの
torch 2.14.0+rocm10.1.0 をgfx1201用のカーネルだけで入れ、FP32・BF16のデバイスの試験に合格しました。PyPIのリリース(uv tool install openternary)からも、同じ構成で動くことを確認しています。NVIDIAとAppleの経路は公式の一覧に沿って実装していますが、プロジェクトとしては実機で動かしていません。
研究¶
研究対象は Gemma 4 E2B(google/gemma-4-E2B-it-qat-q4_0-unquantized、revision 6befbaca…)で、正準の205の線形層をグループ単位(G128)で量子化し、BF16で評価します。
| Phase | 結果 |
|---|---|
| 0 基盤 | ✔ 完了 |
| 1 調査とBF16のsmokeの基準 | ✔ 完了: 実際のCPUでの2回の実行で、fingerprintが一致 |
| 2 三値の中核とpackedの集計 | ✔ 完了: 19のGate、実際のテンソルでの往復がビット単位で一致 |
| 3 モデル全体の三値化 | ✔ 完了: テンソル単位とグループ単位G128の、モデル全体のsnapshot(12 shard、10.2GB)が読み込めてsmokeを実行できる。出力は想定どおり基準と異なる |
| 4.1 校正: scaleの学習 | ✔ 完了: fixtureで学習とホールドアウトの再構成損失が下がる。実際のモデルで流れが動く |
| 4.2 閾値の学習 | 実装済み。AMD GPUのruntimeのGateに合格。変わる符号はごくわずか(scaleだけと比べて0.009%) |
| 4.3 soft-to-hard | 3つのスケジュールを205の全層で実行。hard化のあとはすべて崩壊(指示スコア0、8件中8件が崩壊)。合格したスケジュールはない |
| 5以降 日本語、特殊な部分、packedの書き出し、大きなモデル | 研究のPhaseとしては未着手 |
品質Gateを通った量子化モデルはありません。 soft-to-hardの結果の分析では、最適化が扱うのはscaleだけで、符号の割り当てとhard化の境界は固定されたままであることが分かりました。attentionの q_proj がホールドアウトの誤差の86%を占め、layer 0のものだけで約47%です。再設計の判断を待っている状態です(判断の記録)。それまでは、OpenTernaryで作った三値モデルは、元のモデルよりはるかに性能が低いと考えてください。
リリース¶
| バージョン | 日付 | 内容 |
|---|---|---|
| 0.1.0a2 | 2026-11-03 | バックグラウンドのジョブを持つ全画面のTUI。選択式のコマンドプロンプト。変更履歴を参照 |
| 0.1.0a1 | 2026-11-03 | 最初のPyPIリリース |
どちらもプレリリースで、安定版はまだありません。
まだ検証していないこと¶
- 実際の重みでの三値モデルの品質(研究の問い)
- native低bitでの実行(カーネルを提供していない)
- GPUでのGGUFと、Llama以外の構造のGGUF
- 実際のNVIDIAとAppleのハードウェアでの
setup - TUIから見守る長い校正と、実際のWindowsでのTUIからの中止(CIでのみ確認)