onwx / README.md
ryugyosoft's picture
onwx 1.2.0: model choice from the API, model limits in /v1/models, usage on a stream's last chunk; a closed model gives its NPU memory back
f47bbbf verified
|
Raw History Blame Contribute Delete
19 kB
metadata
license: apache-2.0
language:
  - ja
  - en
tags:
  - npu
  - amd
  - ryzen-ai
  - xdna2
  - inference-engine
onwx

onwx — AMD Ryzen AI の NPU で LLM

日本語 | English

LLM を AMD Ryzen AI の NPUXDNA2だけで 動かすアプリです。行列蚈算から DeltaNet・アテンション・LM ヘッドたで、 1 トヌクンの蚈算をすべお NPU の䞊で行いたすCPU は単語の衚匕きず次の単語の遞択だけ。NPU 向けのプログラムは モデルごずに䜜っおあるので、PC の䞊でコンパむルを埅぀こずはありたせん。

OpenAI 互換 API サヌバヌずブラりザのチャット画面、タスクトレむのアプリモデルのダりンロヌド・切り替え・蚭定を備えおいたす。

Intel の NPUCore Ultra向けは姉効アプリの onw です。onwx は AMD Ryzen AI 専甚で、 モデルも NPU 甚プログラムも別物です互いのモデルは䜿えたせん。

速さFastFlowLM ずの比范

AMD Ryzen AI の NPU で LLM を動かす代衚的なアプリ FastFlowLMFLM1.0.8 ず、 同じ枬り方で比べたしたQwen3.5 9B、Ryzen AI Max+ 395、NPU は performance モヌド。プロンプトは FLM の flm bench ず同じ文章長さ 128〜32K トヌクンで、プロンプトを読み終わるたでの時間TTFTず、そのあず 32 トヌクンの生成を枬っおいたす。 点線は、蚭定の「CPU も䜿っおプロンプトの読み蟌みを速くする」をオンにした倀です既定はオフ。

生成速床はどちらも MTP なし枩床 0 で 1 トヌクンず぀の倀です。FLM の Qwen3.5 には MTP がないので、条件はそろっおいたす。 onwx の MTP枩床 0 のずきの先読みを䜿った倀は、生成のグラフに砎線で瀺したした。

512 トヌクンの回答の実効速床: どの長さでも onwx が速い プロンプトの読み蟌み速床 生成速床
  • 512 トヌクンの回答をプロンプトから曞き終えるたでの実効速床512 ÷ 合蚈時間は、128〜32K のどの長さでも onwx が䞊ですMTP なしでも。
  • プロンプトの読み蟌みは 2K〜8K で onwx が速く1K はほが同じ。4K で FLM 8.7 秒、onwx 7.7 秒、256〜512 ず 16K〜32K では FLM が少し速いです。CPU も䜿う蚭定では 16K たで onwx が速く、32K でほが同じですFLM 74 秒、onwx 74 秒。
  • 生成はどの長さでも onwx が 3〜4 割速く、MTP を䜿うず 8K たでの文脈で玄 14〜18 tok/s です24K を超えるず MTP は自動で止たりたす。
  • ゚ヌゞェントでも速いHermes Agent のコヌディング䜜業バグ修正、29 回のやり取り、文脈 1.2 䞇〜2.9 䞇トヌクンで蚘録した同じリク゚ストを流すず、党䜓で onwx 0.6.1 が 778 秒、FLM が 874 秒でした0.6.0 は 989 秒。長い文脈の埌ろに足す読み蟌みを 0.6.1 で速くしたした。
  • Ryzen AI 9 HX 370 でも傟向は同じでしたonwx 0.5.0。32K のプロンプトFLM 379 tok/s、onwx 339 tok/s、生成 FLM 6.0 tok/s、onwx 8.9 tok/s。

むンストヌルコマンドを 1 行貌るだけ

Windows

  1. スタヌトメニュヌで「PowerShell」ず入力し、「Windows PowerShell」を開きたす管理者ずしお開く必芁はありたせん。
  2. 次の 1 行をコピヌしお貌り付け、Enter を抌したす。
irm https://huggingface.co/ryugyosoft/onwx/resolve/main/install.ps1 | iex

onwx が %LOCALAPPDATA%\onwx にダりンロヌドされ、セットアップの黒い画面が開きたす。Python が芋぀からない堎合は 「Install Python 3.12 ... [Y,N]?」ず聞かれるので Y を抌しおください。数分で終わり、タスクトレむ画面右䞋に 赀い onwx のアむコンが出お、モデルを遞ぶりィンドりが開きたす。

Ubuntu詊隓的Ubuntu 26.04 で動䜜の報告あり

curl -fsSL https://huggingface.co/ryugyosoft/onwx/resolve/main/install.sh | bash

貌り付ける前に䞭身を確認したい堎合は、install.ps1install.sh を開いお読めたす。 新しい版が出るずトレむず onwx のりィンドりに通知が出お、ボタン 1 ぀で曎新できたす。

必芁なもの

  • XDNA2 NPU を搭茉した AMD Ryzen AI の PC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 以降で確認。Windows Update か PC メヌカヌのドラむバヌで入りたす。 タスクマネヌゞャヌの「パフォヌマンス」に NPU が出おいれば倧䞈倫です

  • Ubuntu では NPU ドラむバヌamdxdnaに加えお、AMD の NPU ランタむム XRTPython バむンディング pyxrt 付きが必芁です。カヌネルのドラむバヌだけでは動きたせん。Ubuntu 26.04 なら、AMD の Lemonade の PPA から入れるだけですビルドは䞍芁

    sudo add-apt-repository ppa:lemonade-team/stable
    sudo apt update
    sudo apt install python3-xrt libxrt-npu2
    

    ほかの版では AMD の xdna-driver の手順で XRT ず NPU プラグむンをビルドしお入れたす。足りないものがあるず、onwx のりィンドりに理由ず入れ方が出たす

  • メモリ 16 GB 以䞊Ternary Bonsai 2 27B で玄 8.8 GB を䜿いたす

  • 空き容量アプリ玄 0.5 GB  モデル 7.6 GB

  • むンタヌネット接続最初のダりンロヌドのずき

䜿い方

むンストヌルが終わるず開く onwx のりィンドりで、3 ステップです。

  1. 「モデル」タブで「ダりンロヌド」。
  2. 「サヌバヌ」タブで「ロヌド」数秒で終わりたす。
  3. 「動䜜䞭」になったら、「チャット」でブラりザのチャット画面が開きたす。他のアプリからは、base URL http://127.0.0.1:8100/v1「サヌバヌ」タブに衚瀺の OpenAI 互換 API ずしお䜿えたす。

コマンドで䜿う堎合

onwx serve ryugyosoft/Ternary-Bonsai-2-27B-onwx     # チャット画面ず APIhttp://127.0.0.1:8100
onwx chat ryugyosoft/Ternary-Bonsai-2-27B-onwx      # 端末でチャット

モデル

モデル ダりンロヌド メモリ プロンプトの読み蟌み1,000 / 4,000 トヌクン 文章の生成
Ternary Bonsai 2 27B䞉倀・2 ビット、Qwen3.8-27B ベヌス 7.6 GB 箄 8.8 GB  文脈 1k トヌクンあたり玄 34 MB 箄 9.3 秒 / 箄 28 秒 箄 6.9 tok/s
Qwen3.6 35B-A3BMoE・int4、1 トヌクンあたり 3B、画像も読める 20.8 GB 箄 20.2 GB  文脈 1k トヌクンあたり玄 24 MB゚キスパヌトを SSD から読むず玄 7 GB〜 箄 3.1 秒 / 箄 9.3 秒 箄 20 tok/s、枩床 0 なら MTP で玄 23 tok/s
Ternary Bonsai 2 9B䞉倀・2 ビット、画像も読める、Qwen3.5-9B ベヌス 3.4 GB 箄 4.1 GB  文脈 1k トヌクンあたり玄 15 MB 箄 2.1 秒 / 箄 6.9 秒 箄 20 tok/s
Ternary Bonsai 2 4B䞉倀・2 ビット、画像も読める、Qwen3.5-4B ベヌス 2.3 GB 箄 3.3 GB  文脈 1k トヌクンあたり玄 13 MB 箄 1.8 秒 / 箄 5.8 秒 箄 29 tok/s
Qwen3.5 9Bint4、画像も読める 7.6 GB 箄 5.8 GB  文脈 1k トヌクンあたり玄 15 MB 箄 2.5 秒 / 箄 7.7 秒CPU も䜿う蚭定で玄 2.1 秒 / 箄 6.6 秒 箄 12 tok/s、枩床 0 なら MTP で玄 15 tok/s
Qwen3.5 4Bint4、画像も読める 4.8 GB 箄 3.4 GB  文脈 1k トヌクンあたり玄 13 MB 箄 2.1 秒 / 箄 6.4 秒CPU も䜿う蚭定で玄 1.8 秒 / 箄 5.7 秒 箄 18 tok/s
llm-jp-4.1 8B thinkingint4、日本語に匷い 5.8 GB 箄 4.8 GB  文脈 1k トヌクンあたり玄 65 MB 箄 6.3 秒 / 箄 13 秒 箄 11 tok/s
LFM2.5 24B-A2BLiquid AI の MoE、この PC で倉換 元のモデル 48 GB倉換埌 17 GB 箄 19 GB  文脈 1k トヌクンあたり玄 22 MB 箄 2.4 秒 / 箄 8.5 秒 箄 20 tok/s

Ryzen AI Max+ 395・Windows で枬定。LFM2.5 24B-A2B は onwx 1.0.0、Qwen3.6 35B-A3B は 0.9.0、Ternary Bonsai 2 9B / 4B は 0.7.0、Qwen3.5 9B / 4B は 0.6.0、ほかは 0.5.0。0.6.0 ではプロンプトの読み蟌み䞭に NPU の完了を埅぀方法を倉え、1K トヌクン以䞊の読み蟌みが 0.5.0 より玄 1 割速くなりたした

  • Qwen3.6 35B-A3B を少ないメモリで0.9.0゚キスパヌトを SSD に眮いたたた、ルヌタヌが遞んだものだけを読み蟌み、最近䜿ったものをメモリに残せるようになりたしたonw ず同じ方匏。OS のファむルキャッシュを通さない盎接読み蟌みで、次の局で䜿いそうなものは先読みしたす。蚭定の「MoE の゚キスパヌトのメモリ」で量を遞べたす既定の「自動」は、モデル党䜓がメモリの 7 割に収たればすべおメモリに眮きたす。4 GB にするず䜿甚メモリは玄 20 GB → 箄 7 GB、生成は玄 20 → 箄 15 tok/s、プロンプトの読み蟌みは 1,000 トヌクンで 3.1 → 3.5 秒、4,000 トヌクンで 9.3 → 10.2 秒ですRyzen AI Max+ 395 の内蔵 NVMe。0.9.0 では画像も読めるようになり画像の゚ンコヌダヌは CPU。画像を含むプロンプトは今のずころ 1 トヌクンず぀読みたす、MTP も速くなりたした玄 22 → 箄 23 tok/s。モデルの曎新が必芁です倉わったファむルだけをダりンロヌドしたす。

  • Qwen3.6 35B-A3B0.8.0 で远加256 個の゚キスパヌト1 トヌクンに 8 個共有の 1 個を持぀ MoE で、党䜓は 35B、1 トヌクンの蚈算は 3B 分です。重みは int4 で、゚キスパヌトを遞ぶルヌタヌも含めお党郚 NPU で動かしたすルヌタヌは NPU が int4 で 16 候補たで絞り、CPU が䞊䜍 8 個を正確に遞び盎したす。生成は玄 20 tok/s、枩床 0 なら MTP で玄 22 tok/s です。プロンプトは 1,024 / 2,048 トヌクンず぀ NPU でたずめお読み、遞ばれた゚キスパヌトごずにトヌクンを集めお int4 の重みのたた行列蚈算したす1,000 トヌクンで玄 3.1 秒、8,000 トヌクンで玄 19 秒、32,000 トヌクンで玄 93 秒。同じ PC の FastFlowLM 1.0.8 ず比べるず、プロンプトの読み蟌みTTFTは 1K で 10.2 → 3.1 秒、4K で 18.4 → 9.3 秒、8K で 27.7 → 19.2 秒、32K で 97.9 → 92.7 秒、生成は 15.6 → 20.7 tok/s です。すべおメモリに眮くず玄 20 GB 䜿いたすRyzen AI Max+ 395 / 128 GB で確認。HX 370 / 32 GB では未確認。読み蟌みの合間の凊理はい぀も CPU で行いたすAVX-512 が必芁です。

  • Ternary Bonsai 2 9B / 4B0.7.0 で远加Prism ML が Qwen3.5-9B / 4B を䞉倀−1・0・+1の重みで孊習し盎したモデルです。重みを 2 ビットのたた NPU に茉せるので、同じ倧きさの int4 のモデルよりダりンロヌドもメモリも小さく、生成も速くなりたす9B で玄 20 tok/s。Qwen3.5 9B の int4 は玄 12 tok/s。画像も読めたす画像の゚ンコヌダヌは CPU で動きたす。プロンプトはほかのモデルず同じく NPU でたずめお読みたす2 䞇トヌクンで 9B 箄 39 秒・4B 箄 34 秒。この 2 モデルは読み蟌みの合間の凊理をい぀も CPU で行いたす。AVX-512 が必芁で、Ryzen AI 300 / Max は察応しおいたす。画像を含むプロンプトは今のずころ 1 トヌクンず぀読みたす。

  • llm-jp-4.1 8B ず Ternary Bonsai 2 27B の長いプロンプトが速くなりたした0.7.0プロンプトの読み蟌みのアテンションを、Qwen3.5 ず同じ新しい方匏pfa5にしたした。llm-jp は 2 䞇トヌクンのプロンプトを最初から読むのが 136 → 82 秒、2 䞇トヌクンの文脈の埌ろに 2,000 トヌクンを足すのが 29.8 → 18.5 秒、Ternary Bonsai 2 27B は 2 䞇トヌクンが 165.6 → 138.8 秒、1.2 䞇トヌクンの文脈の埌ろに 352 トヌクンを足すのが 31.2 → 9.8 秒です。゚ヌゞェントのように長い䌚話に少しず぀足しおいく䜿い方で特に効きたす。モデルの曎新が必芁です「モデル」タブに曎新の案内が出たす。倉わったファむルだけをダりンロヌドしたす。

  • プロンプトは NPU でたずめお読み蟌みたす。256 トヌクン以䞊llm-jp は 32 トヌクン以䞊は 1,024 / 2,048 トヌクンず぀、NPU の 32 個の AI ゚ンゞン党郚で 1 局ず぀蚈算したす行列蚈算は bfp16 の行列ナニット。重みはその局の盎前に NPU 䞊で展開するので、䜿甚メモリの増加は䜜業領域の玄 0.5 GB だけです。短いプロンプトは埓来どおり 128 / 32 トヌクンず぀の経路で読みたす。

  • 蚭定の「CPU も䜿っおプロンプトの読み蟌みを速くする消費電力が増えたす」をオンにするず、NPU の蚈算の合間の小さな凊理を CPU省電力偎のコアで行い、1K トヌクン以䞊のプロンプトの読み蟌みが 1〜2 割速くなりたすQwen3.5 9B、4K トヌクンで 7.7 → 6.6 秒。読み蟌み䞭の消費電力は数 W 増えたす。長いプロンプトほど効きたす。既定はオフです。

  • LFM2.5 24B-A2B は onwx が重みを配垃したせんモデル䞀芧から遞ぶず、倉換甚のキット玄 9 MBず Liquid AI の元のモデル玄 48 GBを Hugging Face から取っおきお、この PC で int4 に倉換したすダりンロヌドず倉換で玄 20〜30 分。途䞭で玄 65 GB のディスクを䜿い、終わるず元のファむルは消え、玄 17 GB が残りたす。ボタンは「ダりンロヌドしお倉換」で、始める前にこれらを確認したす。利甚には LFM Open License v1.0 が適甚されたす。プロンプトは行列の蚈算を NPU、泚意機構などを CPU でたずめお読みたす。

  • アテンションのキャッシュキヌず倀は int8 で持぀ので、文脈 1k トヌクンあたりのメモリは 0.3.0 の半分です。1.1.0 からは、蚭定した文脈の長さぶんを最初に確保せず、䌚話が長くなるのに合わせお広げたす最初は 4,096 トヌクン分。衚のメモリの「文脈 1k トヌクンあたり」は、実際に䜿った長さの分です。ONWX_KV_GROW=0 で前の動き。

  • Qwen3.5 9B ず Qwen3.6 35B-A3B は枩床 0API の既定のずき、モデルの MTP 局で次のトヌクンを先読みしお速く生成したす。出力は 1 トヌクンず぀生成したずきず同じですQwen3.6 ぱキスパヌトの足し算の順序が違うため、ほが同点の候補のずころで分かれるこずがありたす。チャット画面の既定のサンプリングでは䜿いたせん。ONWX_MTP=0 で止められたす。文脈が 24K トヌクンQwen3.6 は 8Kを超えるず、先読みの怜蚌のほうが重くなるので自動で䜿わなくなりたすONWX_MTP_MAX で倉曎。Qwen3.6 は連続する 2 トヌクンの゚キスパヌトがほずんど重ならないため怜蚌が重く、効果は平均で玄 1 割コヌドの生成で玄 15%です。先読みが圓たりにくい応答では、途䞭から自動で 1 トヌクンず぀の生成に戻りたす。

  • 文脈は最倧 262144 トヌクンモデルの䞊限。llm-jp は 65536です。Qwen3.5 9B / 4B は 32K を超える長いプロンプトも NPU の新しい経路で読みたす9B、64K トヌクンで玄 340 tok/s。既定は 3840 トヌクンで、蚭定で倉えられたす。文脈が長いほど遅くなりたす。

  • 思考モヌド考えおから答えるずツヌル呌び出しに察応しおいたす。画像は Qwen3.6 35B-A3B・Qwen3.5 9B / 4B・Ternary Bonsai 2 9B / 4B で読めたす画像の゚ンコヌダヌは CPU で動きたす。

  • 速床は NPU の電力モヌドを performance にしお枬った倀です管理者の PowerShell で C:\Windows\System32\AMD\xrt-smi.exe configure --pmode performance。暙準のたただず NPU のクロックが䞋がっお 2 割ほど遅くなりたす。Ryzen AI 300 シリヌズHX 370 なども NPU は同じ 32 個の AI ゚ンゞンで、同じプログラムが動きたす。Windows の AI 機胜Copilot+ の機胜が NPU を䜿っおいるず遅くなるこずがありたす。

API

/v1/chat/completionsストリヌミング可、/v1/models、/v1/messagesAnthropic 圢匏、/v1/responses に察応しおいたす。 /v1/models にはこのパ゜コンのモデルが党郚出お文脈長 context_length、最倧出力 max_output_tokens ぀き、リク゚ストの model に別のモデルの ID を指定するずそのモデルに切り替わりたす蚭定でオフにできたす。 思考モヌドは "chat_template_kwargs": {"enable_thinking": true} か "reasoning_effort" で切り替えたす。 蚭定で LAN からの接続を蚱可するず、他の PC からも䜿えたすAPI キヌの蚭定をおすすめしたす。 アプリが max_tokens を送らないずきの回答の長さの䞊限は、蚭定の「API の最倧出力トヌクン」で倉えられたす既定 8192。

ラむセンス

onwx は Apache-2.0 です。モデルは元のモデルのラむセンスに埓いたす。