Downloads · 30 days
0
ryugyosoft/onw
onw is a machine learning model from ryugyosoft. Use it for the machine learning task on the model card, and read the license before you ship it in a product. It is set up for openvino. The card lists the license as apache-2.0.
<img src="images/onw-banner.jpg" alt="onw" width="100%"
Downloads · 30 days
0
Access
Public
Updated Sep 27, 2026
Repo size
148 KB
Likes
0
Public
Click a slice to open those files.
.py290 KB · 33%
From the Hugging Face model README
日本語 | English
LLM を Intel NPU だけで 動かす小さなエンジンです。MoE(専門家混合)モデルや Gated DeltaNet 系のハイブリッドモデル、 画像入力にも対応し、OpenAI 互換 API サーバーとブラウザのチャット画面を備えています。 llama.cpp と GGUF の関係と同じく、エンジンとモデルは別々にダウンロードします。エンジンは一つ、コマンドも一つで、 変換済みのモデルならどれでも動きます。
私たちの知る限り、次の 4 つを NPU で動かして公開している実装は onw が初めてです(2026 年 9 月、Fable 5.1 調べ)。
dpkg -l | grep -i npu で確認できます。Python や git の知識は要りません。Python が入っていなければ、途中で入れるか聞かれます(Windows)。
Windows
irm https://huggingface.co/ryugyosoft/onw/resolve/main/install.ps1 | iex
onw が %LOCALAPPDATA%\onw にダウンロードされ、セットアップの黒い画面が開きます。Python が見つからない場合は
「Install Python 3.12 ... [Y,N]?」と聞かれるので Y を押してください。数分で終わり、タスクトレイ(画面右下)に
onw のアイコンが出て、モデルを選ぶウィンドウが開きます。
Ubuntu
端末(Ctrl+Alt+T)を開き、次の 1 行を貼り付けて Enter を押します。途中で必要な部品を入れるために、ログイン パスワードを 1 回聞かれます。
curl -fsSL https://huggingface.co/ryugyosoft/onw/resolve/main/install.sh | bash
onw は ~/onw に入り、画面右上に onw のアイコンが出ます。
貼り付ける前に中身を確認したい場合は、install.ps1/install.sh を開いて読めます。 同じコマンドをもう一度実行すると、onw を最新版に更新できます。
開いた onw ウィンドウ の「モデル」タブに、使えるモデルの一覧(サイズ、必要なメモリ、この PC で足りるか)が 出ます。迷ったら、16 GB の PC なら LFM2-8B-A1B(最速・4 GB)、画像も使いたいなら Gemma 4 E4B がおすすめです。 選んで「ダウンロード」を押すと、進み具合がバーで表示されます。
<img src="images/onw-models.png" width="640" alt="onw ウィンドウの「モデル」タブ">hf download で入れた、自分で変換した など)は、「ほかの場所」の「追加…」で
そのフォルダ(またはモデルのフォルダをまとめて入れた親フォルダ)を選べば一覧に出ます。コピーは不要です。「サーバー」タブでモデルを選んで「ロード」を押します。初回だけ NPU 向けの準備(コンパイル)に 10〜30 分ほど かかります(モデルと PC によります。テスト機では LFM2 が約 1.5 分、Gemma 4 E4B が約 11 分、Qwen3.5-9B が約 13 分)。 状態が「動作中」になるまで待ってください。その間も PC は普通に使えます。2 回目以降は結果が保存されているので 20 秒ほどで起動します(コンテキスト長を変えたときだけ、もう一度コンパイルします)。
http://localhost:8000/v1、モデル名にウィンドウに表示される
名前を入れれば使えます。API キーの欄は、設定していなければ何を入れても構いません。あとは、タスクトレイ(Ubuntu は右上)の onw アイコンを右クリックすれば、いつでもウィンドウやチャットを開けます。 ウィンドウを閉じてもサーバーは動き続けます。止めるときはメニューの「サーバーを停止」、onw ごと終わるときは「終了」です。
<img src="images/onw-server.png" width="49%" alt="「サーバー」タブ"> <img src="images/onw-settings.png" width="49%" alt="「設定」タブ">
hf download ryugyosoft/onw --local-dir onw(Hugging Face CLI)や git clone https://huggingface.co/ryugyosoft/onw
でも入手できます。その後、フォルダ内の setup.bat(Windows)/bash setup.sh(Ubuntu)を実行してください。hf download ryugyosoft/モデル名
を使ってください。Git LFS なしで git clone すると、重みの代わりに小さな「ポインタ」ファイルしか入りません
(onw はこれを検出して止まります)。start.bat モデル名(Ubuntu は bash start.sh モデル名)。サーバーは OpenAI 互換 API です。 他のアプリからは base URL に http://localhost:8000/v1、モデル名にウィンドウに
表示される名前を指定します。GET / でサーバーの案内(JSON)、/health でモデルの読み込み完了を確認できます。
CORS は開放済みで、LAN に公開する場合は API キー(--api-key または設定画面)で /v1 を保護できます。
動作確認用に、チャット画面(/chat)と、テキスト・先読み検証・2 ターン会話・画像の検証を一括実行して速度を表に
する検証ページ(/check)もあり、どちらもトレイのメニューとウィンドウから開けます。
NPU ドライバーがない環境では CPU で動きます。
onw コマンドonw serve MODEL [--port 8000] [--host 0.0.0.0] [--api-key KEY] [--context 4096] [--device NPU|CPU] [--no-pld] [--open]
onw chat MODEL [--think] [--context 4096] # ターミナルでチャット
onw tray # 常駐アプリ(setup が起動するもの)
onw window [--tab models] # モデル管理・サーバー操作・設定のウィンドウ
onw convert HF_DIR OUT_DIR [--compact] [--prune SAL.json --keep 0.5] [--graphs-only]
onw list # 対応アーキテクチャ
設定を変えたときに何が必要か:
| 設定 | 変え方 | 再コンパイル |
|---|---|---|
| temperature、top_p、top_k、繰り返し抑制(repetition / presence / frequency penalty)、max_tokens、stop、seed、思考モード | リクエストごと(API またはチャット画面) | 不要 |
| ポート、待ち受けアドレス、モデル、デバイス、先読み検証のオン/オフ | サーバーのオプション/設定画面、再起動(約 20 秒) | 不要 |
コンテキスト長(--context) | サーバーのオプション/設定画面 | 長さごとに 1 回(入力の形が変わるだけで、モデルファイルはそのまま) |
| 64 トークン処理(Gemma) | ONW_S64=1/0/設定画面 | 初回のみ |
| エキスパートのメモリ(Qwen3.6 系。上限を超える分は SSD から読む) | ONW_EXPERT_GB=5/設定画面 | 不要 |
| NPUW 重み共有(試験的。auto は Lunar Lake 以降でオン、MoE モデル(LFM2・Qwen3.6)は対象外:重みを 1 コピーにしてメモリとコンパイル時間を削減) | ONW_NPUW=1/0/設定画面 | 初回のみ |
| ブロックサイズ、画像サイズ、量子化 | onw convert | 必要(変換し直し) |
コンテキスト長を長くすると、短い会話でも 1 トークンごとの計算とメモリが増えます(固定長の KV キャッシュ全体を 毎回参照するため)。モデルの最大値ではなく、必要な長さを選んでください。
MODEL には onw 形式のモデルフォルダか Hugging Face のリポジトリ ID を指定します(ID の場合は ./models に
ダウンロードされ、途中から再開できます)。onw コマンドは初回の setup/start のあと .venv に入ります
(Windows は .venv\Scripts\onw、Linux は source .venv/bin/activate)。任意の環境に入れる場合は
pip install --pre -e . --extra-index-url https://storage.openvinotoolkit.org/simple/wheels/nightly です。
Git LFS への対策:Git LFS なしで git clone したモデルには、重みの代わりに約 130 バイトの「ポインタ」ファイルしか
入っていません。onw はこれを検出し、直し方を表示して止まります。hf download を使うか、リポジトリ ID をそのまま
渡してください。
| onw モデル | アーキテクチャ | 入力 | NPU 3720 生成速度 | ダウンロード | 使用メモリ |
|---|---|---|---|---|---|
| ryugyosoft/LFM2-8B-A1B-onw | lfm2_moe(短い畳み込み+GQA+MoE 32 個から 4 個) | テキスト | 16〜17 tok/s(コード修正・要約では先読み検証で 29〜43) | 4.0 GB | 約 5 GB |
| ryugyosoft/gemma-4-E4B-it-onw | gemma4(検証済みの Gemma NPU グラフを取り込み) | テキスト+画像 | 7.2 tok/s | 4.3 GB | 約 6 GB(画像処理中 8.5 GB) |
| ryugyosoft/Qwen3.5-9B-onw | qwen3_5(Gated DeltaNet+ゲート付きアテンション、dense) | テキスト+画像 | 4.1 tok/s | 5.3 GB | 約 11 GB |
| ryugyosoft/Qwen3.6-REAP-18B-A3B-onw | qwen3_5_moe、256 個中 128 個のエキスパートを残す(REAP) | テキスト+画像 | 6.8 tok/s | 9.6 GB | 約 12 GB |
| ryugyosoft/Qwen3.6-35B-A3B-onw | qwen3_5_moe(Gated DeltaNet+ゲート付きアテンション+MoE 256 個から 8 個+共有エキスパート) | テキスト+画像 | 6.8 tok/s | 17 GB | 約 20 GB(SSD から読めば 8〜13 GB) |
使用メモリは、テスト機(Core Ultra 9 285HX、NPU 3720)で、64 トークン処理なし・画像エンコーダーは使ったら解放(メモリ 24 GB 未満の PC の既定)で測ったプロセスのピークです。先読み検証は、16 トークンの検証ブロックが十分安く済むモデル (LFM2、Qwen3.5-9B、Gemma)で自動的に使われます。どのモデルも会話の状態をターン間で保持するので、画像付きの会話でも 2 ターン目は新しいメッセージだけを処理します(約 2 秒)。
onw ウィンドウの「メモリ目安」は、この値にその PC の設定(コンテキスト長、64 トークン処理、エキスパートのメモリ)を 反映した目安です。
同じモデルのままエンジン側だけで、使用メモリを 2〜6 割減らしました(テスト機での実測、ピーク)。
| モデル | onw 0.6 | onw 0.7 |
|---|---|---|
| LFM2-8B-A1B | 約 6 GB | 4.8 GB |
| Gemma 4 E4B | 約 15 GB | 6.0 GB(画像処理中 8.4 GB) |
| Qwen3.5-9B | 約 20 GB | 10.9 GB |
| Qwen3.6-REAP-18B-A3B | 約 15 GB | 12.3 GB |
| Qwen3.6-35B-A3B | 約 23 GB | 19.9 GB(SSD から読んでキャッシュ 5 GB なら 9.9 GB) |
npu_cache/onw_blobs)、ドライバーへ渡したら手放します
(Qwen3.6-35B で 1 トークン版・16 トークン版それぞれ 1.1〜1.4 GB)。ONW_KEEP_VISION=1 で残す)。mem_breakdown.py(段階ごとの内訳)、mem_stages.py(区間の読み込み段階ごと)、mem_import.py
(blob の読み込み方の比較)、mem_vision.py、mem_all.py(全モデル)。--compact:1 トークン用と 16/64 トークン用のグラフが同じ重みファイルを共有します(ダウンロード量・ディスク)。
ホスト側で引くだけの表(出力層と共有していない埋め込み、Gemma の層ごとの埋め込み)は 32 要素ごとのスケール付き
INT4 に、Qwen の画像エンコーダーは INT8 にします。これらは使用メモリも減らしますが、重みファイルの共有だけは
ディスクにしか効きません(NPU はブロックサイズごとにコンパイル済みの重みを持つため)。--prune SAL.json --keep 0.5(MoE):REAP によるエキスパートの刈り込み。python -m onw.prune calibrate HF_DIR SAL.json
で各エキスパートの寄与度(日本語・英語・コードのチャットデータでの「ルーターの重み×出力の大きさ」の平均)を測り、
python -m onw.prune eval で残す割合ごとのパープレキシティを確認できます。Qwen3.6-35B-A3B は 256 個中 128 個を
残してパープレキシティ +8.9%(Qwen3.6-REAP-18B-A3B-onw として公開)。エキスパートが 32 個しかない LFM2 は
半分で +35% と落ち方が大きいため、刈り込んでいません。MoE は 1 トークンごとに一部のエキスパートしか使いません(Qwen3.6-35B-A3B なら 40 層 × 256 個のうち、各層 8 個)。
そこで、エキスパートは SSD に置いたままにして、ルーターが選んだものだけを読み込み、最近使ったものをメモリに残します
(LRU キャッシュ)。読み込みは OS のファイルキャッシュを通さない直接読み込み(Windows は FILE_FLAG_NO_BUFFERING、
Linux は O_DIRECT)で、8 並列です。OS のキャッシュに同じデータがもう一度溜まってメモリを圧迫することはありません。
ONW_EXPERT_GB=5 onw serve …。| すべてメモリ | SSD から(5 GB) | |
|---|---|---|
| メモリ(ピーク、onw 0.7) | 19.9 GB | 9.9 GB(キャッシュ 3 GB なら 7.9 GB) |
| 生成 | 6.8 tok/s | 5.4〜5.8 tok/s(内蔵 NVMe) |
| キャッシュの当たり率 | — | 85〜90% |
| 画像付きの質問(276 トークン)の読み込み | 15 秒 | 15 秒 |
回答はすべてメモリの場合と同じです。速さのための工夫は次のとおりで、どれもメモリを増やしません。
ONW_PREFETCH_K=12 で有効。ルーターの重み 80 MB が増えます)。trace_experts.py(実際の会話で選ばれたエキスパートを記録)、sim_expert_cache.py(キャッシュの大きさごとの
当たり率を計算)、bench_ssd.py(SSD の読み込み速度)、test_stream.py(SSD 読み込みでの速度とメモリ)。NPU は形の決まったグラフしか扱えませんが、MoE はトークンごとに違うエキスパートを選びます。NPU 3720 で Qwen3.6 の 寸法の 1 層・1 トークンを測ると、全エキスパートを計算すると 45 ms、グラフ内の Gather で選ぶ方式は INT4 定数では コンパイルできず、INT8 や詰め込み形式でも 18〜135 ms(NPU が表全体を転送するため)でした。 選んだエキスパートを実行時の入力として渡す方式なら 1.7 ms で、NPU のメモリ帯域いっぱいに出ます。そこで:
set_tensor、コピーなし。全エキスパートは NPU から見えるホストメモリ上の
experts.bin にあります)。| ファイル | 内容 |
|---|---|
onw/ir.py | グラフ部品:量子化線形層、RMSNorm(FP16 で溢れない前処理つき)、RoPE/部分 RoPE、ホスト管理の KV キャッシュ上のアテンション、エキスパート枠、Gated DeltaNet(1 トークン用の行列形式、ブロック倍々の厳密な逆行列によるチャンク並列形式) |
onw/runtime.py | 区間の実行、命名規則による状態管理(KV の行、畳み込み窓、再帰状態)、エキスパートの結び付け、MRoPE、スライディング窓マスク、ホスト側の表引き、先読み検証のための正確な巻き戻し |
onw/chat.py | 生成ループ:画像(Qwen/Gemma)、サンプリング、停止文字列、先読み検証(正確な巻き戻し、再帰状態を持つモデルでは遅延やり直し、効く場合だけ自動で有効)、ターン間の差分処理 |
onw/models/ | アーキテクチャごとの組み立て定義:lfm2_moe、qwen3_5_moe(dense と MoE)、qwen_vision、gemma4 |
onw/hub.py、onw/server.py、onw/web/ | モデルのダウンロードと LFS 対策、OpenAI 互換サーバー、チャット画面(/chat)、検証ページ(/check) |
onw/app.py、onw/tray.py、setup.*、find_python.bat | onw ウィンドウ(モデル/サーバー/設定)、トレイアイコン、インストーラー(Python の検出と winget) |
check_ref.py、check_vision.py、test_chat.py、test_image.py、probe_segments.py、prof_*.py | 元の HF モデルとの比較、生成・画像・複数ターンの検証、区間ごとの NPU と CPU の比較、速度計測 |
--context/設定画面で読み込み時に変えられます(長さごとに NPU 向け
コンパイルが 1 回走ります)。Qwen の画像は 512×512(256 トークン)に縮小し、Gemma の画像は縦横比を保ちます
(最大 280 トークン)。ONW_S64=1/0 で強制)。コードは Apache 2.0。変換済みモデルは元のモデルのライセンスに従います(各モデルのリポジトリを参照)。