--- license: apache-2.0 base_model: - TokenRhythm/NeoHorse-1-4B language: - ja - en pipeline_tag: text-generation tags: - openvino - npu - intel - onw - agent - tool-use library_name: onw --- # NeoHorse-1-4B for onw — Intel NPU だけで動く **日本語** | [English](README_en.md) [TokenRhythm/NeoHorse-1-4B](https://huggingface.co/TokenRhythm/NeoHorse-1-4B) を **[onw](https://huggingface.co/ryugyosoft/onw)**(俺のNPUがこんなに動くわけない)用に変換したモデルです。onw は LLM を Intel NPU だけで動かすエンジンで、このリポジトリにはモデルだけが入っています(エンジンは別にダウンロードします)。 TokenRhythm の [NeoHorse-1-4B](https://huggingface.co/TokenRhythm/NeoHorse-1-4B) は、[Qwen/Qwen3.5-4B](https://huggingface.co/Qwen/Qwen3.5-4B) をエージェント用のハーネス・ツール呼び出し・コーディング・指示への従い方に向けて追加学習したモデルです(元のカードでは、エージェント系の評価でQwen3.5-4B より 6〜10 ポイント、10 種の評価の平均で 58.9 → 64.9)。構造は Qwen3.5 と同じ Gated DeltaNet+ゲート付きアテンションの 4B で、テキスト専用です。ダウンロード 2.4 GB・使用メモリ約 6 GB と軽く、16 GB の PC でも余裕があります。 **ツール呼び出し**:OpenAI 互換 API の `tools` に対応(並列呼び出しも可)。思考モードでは思考が `reasoning_content` で返ります。元のカードの推奨設定は temperature 1.0・top_p 0.95・top_k 20 です(onw の既定は貪欲生成)。 | NPU 3720(Core Ultra 9 285HX) | | |---|---| | 入力 | テキスト | | 生成速度 | **6.3〜6.5 tok/s(同じ NPU の Qwen3.5-9B の約 1.6 倍)** | | プロンプト処理 | 23 トークンで約 0.8 秒 | | ダウンロード | **2.4 GB** | | 使用メモリ(読み込み後の作業セット) | 約 6 GB | | 初回起動(NPU 向けコンパイル)/2 回目以降 | 約 6 分/約 20 秒 | **対応 PC**:NPU 付きの Intel Core Ultra(シリーズ 1/2:Meteor Lake・Arrow Lake・Lunar Lake、シリーズ 3:Panther Lake)、Windows 11 または Ubuntu 22.04 以降。上の数値はテスト機(NPU 3720)での実測で、NPU やメモリ量によって変わります。 ## 使い方 1. **onw(エンジン)を入れます。** まだの場合は、[onw の「インストール」](https://huggingface.co/ryugyosoft/onw) のとおり 1 行貼るだけです。Windows はスタートメニューで「PowerShell」を開き、次の 1 行を貼って Enter(Ubuntu は onw の README の `curl ... | bash`)。 ```powershell irm https://huggingface.co/ryugyosoft/onw/resolve/main/install.ps1 | iex ``` 2. タスクトレイの onw アイコンから開く **onw ウィンドウ** の「モデル」タブで **NeoHorse-1-4B** を選び、「ダウンロード」を押します(2.4 GB)。 3. 「サーバー」タブでモデルを選んで「ロード」を押します。初回だけ NPU 向けの準備に約 6 分かかります。 4. 「チャット」ですぐ試せます。他のアプリからは **OpenAI 互換 API** として使えます(base URL は `http://localhost:8000/v1`)。 onw ウィンドウの「モデル」タブ 「サーバー」タブ 「設定」タブ ```python from openai import OpenAI c = OpenAI(base_url="http://localhost:8000/v1", api_key="none") r = c.chat.completions.create(model="NeoHorse-1-4B-onw", messages=[{"role": "user", "content": "こんにちは"}]) print(r.choices[0].message.content) ``` 上級者向け:`hf download ryugyosoft/NeoHorse-1-4B-onw` で取得したフォルダを `onw serve フォルダ` で起動することもできます。Git LFS なしの `git clone` では重みが入らないので使わないでください(onw が検出して止めます)。 ## 仕組み - 32 層(Gated DeltaNet 24+ゲート付きアテンション 8)を 8 層ずつ 4 区間にし、グループ 128 の INT4。出力層は埋め込みと共有(元のモデルと同じ)で、ロジットが不要なプロンプト処理では飛ばします。 - DeltaNet は、生成時は 1 トークン用の行列形式、16 トークンのプロンプト処理はブロック倍々の厳密な逆行列によるチャンク並列形式。FP16 で小さくなりすぎる出力は 1024 倍し、直後のゲート付き RMSNorm は溢れないよう前処理しています。 - 詳しくは [onw の技術解説](https://huggingface.co/ryugyosoft/onw/blob/main/TECHNICAL.md)。 ## ファイル | ファイル | 内容 | |---|---| | `seg*_S1.xml`, `seg*_S16.xml` + `seg*.bin` | 4 区間+出力層(重みは区間ごとに 1 ファイル) | | `shared.bin` | INT8 の出力層(埋め込みと共有)、INT4 の埋め込み(ホストで参照) | | `engine.json`、トークナイザー/設定ファイル | onw 用のメタデータ、元のリポジトリの設定 | ## 品質 区間の重みはグループ 128 の INT4、出力層 INT8、埋め込み INT4。元のモデル(bf16、CPU)と教師強制で比べると、思考あり 24/24 トークン、思考なしは回答の終わり(`<|im_end|>`)まですべて一致しました。日本語の 20 問の最初のトークンは 18/20 が一致(残り 2 問は元のモデルでも 1 位と 2 位が同点・僅差のもの)で、NPU と CPU(FP32)の結果は同じでした。2 つのツールの並列呼び出しと結果を使った回答、思考の分離を確認済みです。 ## ライセンス Apache 2.0(元モデルと同じ。Qwen の著作権表示を含む元の LICENSE をそのまま同梱)。重みは元モデルから再量子化・再構成したものです。学習はしていません。