検証機は Minisforum N5 Pro(AMD Ryzen AI 9 HX PRO 370 + Radeon 890M、Ubuntu 26.04 LTS / kernel 7.0.0-30-generic)。
Ryzen AI Software のインストールも専用カーネルのビルドも不要で、Ubuntu のパッケージ(XRT)+ FastFlowLM(flm)だけで NPU 推論まで持っていける。NPU が見えているかの確認 → インストール → OpenAI 互換 API として常駐 → 実測ベンチ → つまずいた点、の順でまとめる。
検証時のバージョン: XRT 2.21.75 / FastFlowLM 1.0.6 / amdxdna 0.7(in-tree) / NPU FW 1.1.2.64。
lspci / /dev/accel/accel0 / xrt-smi)flm serve で OpenAI 互換 API を立て、systemd で常駐させるまでamd_iommu=off / memlock / firmware / HW コンテキストは 1 プロセスだけ など)/v1/chat/completions が返す usage の prefill_speed_tps / decoding_speed_tps をそのまま読んだ値(日本語プロンプト、200 トークン上限、2026-10-01 実測)。
| モデル | 実サイズ | 初回トークン (TTFT) | prefill | 生成 (decode) | メモ |
|---|---|---|---|---|---|
| qwen3.5:0.8b | 740 MB | 0.35 s | 32〜45 tok/s | 約 40 tok/s | 要約・分類・下書きなら十分 |
| qwen3.5:4b | 3.2 GB | 0.8〜1.1 s | 13〜24 tok/s | 約 12 tok/s | 日本語の質はこちら。常駐させているのはこれ |
| whisper-v3:turbo | 623 MB | – | – | – | ASR 用(後述)。30 秒の音声で 2.85 s |
model.q4nx / 量子化 Q4_K)。4B は vision_weight.q4nx も含めて 3.2 GB。systemctl show flm-npu -p MemoryCurrent で約 4.8 GiB(5,180,563,456 B)。NPU は iGPU / dGPU の VRAM を食わない。xrt-smi examine -r platform の Total Columns = 8)。Estimated Power はこの機体では N/A で、消費電力は測れなかった。| エンジン | 実測の傾向 | 向いている用途 |
|---|---|---|
| NPU (XDNA2) | 4B で約 12 tok/s。GPU を空けたまま推論できる | 常駐させる LLM(チャット・要約・翻訳)。他の処理と同居させたいとき |
| iGPU (Radeon 890M / ROCm fp16) | Whisper は NPU の約 2 倍速(RTF 0.129 対 0.262) | ASR、画像・行列演算が重い処理 |
| dGPU (RTX 3090 など) | 別ハードウェアなので NPU / iGPU と同時に回せる(NPU 推論中も nvidia-smi は変化しない) |
大型モデル、速度が要る処理 |
「NPU を足す=既存のエンジンを壊さず 1 本増える」というのが実感。ASR は iGPU、LLM は NPU 常駐、という分担が今のところ一番素直だ。
lspci -nn | grep -i "Neural Processing"
# → 1022:17f0(rev 10 = Strix Point / rev 11 = Strix Halo)。N5 Pro では c8:00.1 に見えた
ls -l /dev/accel/accel0 # カーネルドライバがデバイスを作れているか(root:render 660)
lsmod | grep amdxdna
modinfo -F filename amdxdna # in-tree (kernel/drivers/accel/amdxdna) か DKMS (updates/dkms) か
ls /lib/firmware/amdnpu/ # 17f0_10 / 17f0_11 など。FW は 1.1.0.0 以上が必要
grep -o 'amd_iommu=[a-z]*' /proc/cmdline # ← これが出たら NPU は動かない(後述)
ulimit -l # unlimited であること
amdxdna が in-tree(kernel/drivers/accel/amdxdna/)。Ubuntu 26.04(kernel 7.0.0-30)の in-tree amdxdna 0.7 で XRT 2.21.75 + FLM 1.0.6 は問題なく動いた。DKMS のビルドは不要。journalctl -k | grep -i amdxdna に firmware ロードと Initialized amdxdna_accel_driver が出ていれば OK。Ubuntu universe の XRT パッケージに XDNA プラグイン(libxrt_driver_xdna.so)と xrt-smi が入っている。flm の deb が要求する libxrt2 >= 1:2.21.75+dfsg を universe の 2.21.75 が満たすので、外部 PPA を足す必要はない。
apt-get install -y --no-install-recommends libxrt2 libxrt-npu2 libxrt-utils
# FastFlowLM は配布ページからディストロに合う deb を落として入れる
# 例: fastflowlm_1.0.6_ubuntu26.04_amd64.deb
apt-get install -y ./fastflowlm_1.0.6_ubuntu26.04_amd64.deb
ln -sf /opt/fastflowlm/bin/flm /usr/local/bin/flm # deb は PATH を張らないので自分で作る
memlock(NPU の BO 確保に必須。既定 8 MB のままだと failed to allocate BO 系で落ちる):
printf '* soft memlock unlimited\n* hard memlock unlimited\n' > /etc/security/limits.d/99-amdxdna.conf
新しいログイン(SSH し直し)から ulimit -l が unlimited になる。systemd のサービスには limits.d が効かないので LimitMEMLOCK=infinity を明示する(後述)。
既存の NVIDIA / GPU 環境を壊さないために: 追加されるのは XRT / boost / fastflowlm だけ。先に apt-get install -s(シミュレート)で Remv や既存パッケージのアップグレードが出ないことを確認してから実行する。apt upgrade / apt autoremove は実行しない(カーネルと NVIDIA ドライバを巻き込む)。
xrt-smi examine # XRT Version / amdxdna / NPU Firmware Version / RyzenAI-npu4
xrt-smi examine -r platform # Total Columns = 8
flm validate # Kernel / NPU / FW / amdxdna / Memlock Limit を一括チェック
flm list --filter installed # 入っているモデルだけ表示
flm pull qwen3.5:4b # ~/.config/flm/models へ落ちてくる
flm serve qwen3.5:4b --host 0.0.0.0 -p 52625
flm validate の実出力:
[Linux] Kernel: 7.0.0-30-generic
[Linux] NPU: /dev/accel/accel0 with 8 columns
[Linux] NPU FW Version: 1.1.2.64
[Linux] amdxdna version: 0.7
[Linux] Memlock Limit: infinity
flm run <model> は対話専用なので、非対話で確かめるなら flm serve + curl が確実。速度(tok/s)まで返ってくる。
curl -s http://127.0.0.1:52625/v1/models
curl -s http://127.0.0.1:52625/v1/chat/completions \
-H 'Content-Type: application/json' \
-d '{"model":"qwen3.5:4b","messages":[{"role":"user","content":"自己紹介して"}],"max_tokens":200}'
返る usage に prefill_speed_tps / decoding_speed_tps / prefill_duration_ttft が入っているので、これがそのままベンチマークになる(上の表はこの値)。
本当に NPU で走っているかの確認は xrt-smi examine -r aie-partitions --batch の Status=Active と Completions の増加で行う。CPU にフォールバックしていても API は普通に応答してしまうので、ここは省かない。
/etc/systemd/system/flm-npu.service:
[Unit]
Description=FastFlowLM LLM server on AMD XDNA2 NPU
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User=<user>
Group=<user>
SupplementaryGroups=render video
WorkingDirectory=/home/<user>
Environment=HOME=/home/<user>
ExecStart=/opt/fastflowlm/bin/flm serve qwen3.5:4b --host 0.0.0.0 -p 52625
Restart=on-failure
RestartSec=5
LimitMEMLOCK=infinity
StandardOutput=append:/var/log/flm-npu.log
StandardError=append:/var/log/flm-npu.log
[Install]
WantedBy=multi-user.target
systemctl daemon-reload && systemctl enable --now flm-npu
systemctl status flm-npu --no-pager
SupplementaryGroups=render video は /dev/accel/accel0 が root:render の 660 だから必要。--host 0.0.0.0 は LAN の他マシン(Open WebUI など OpenAI 互換を指定できるツール)から使うため。--pmode(powersaver / balanced / performance / turbo)で速度と電力のバランスを切り替えられる。amd_iommu=off は NPU を殺す。NPU は SVA/PASID に IOMMU を使うので、GPU チューニングでこのカーネルパラメータを入れていると flm が動かない。まず /proc/cmdline を見る。failed to allocate BO 系で失敗する。limits.d はサービスに効かないので LimitMEMLOCK=infinity を書く。/lib/firmware/updates/amdnpu/... が /lib/firmware/amdnpu/... より優先されるので、updates 側に古いものが残っていないか確認する。flm pull が All files verified successfully を出す前にサーバを起動すると、出力が ! の連続になる。落とし切るまで起動しない。flm serve を立ち上げると DRM_IOCTL_AMDXDNA_CREATE_HWCTX IOCTL failed (err=-22) でモデルロードに失敗する(Web サーバ自体は起動するので紛らわしい)。同居させたいときは --asr 1 を付けて 1 プロセスにまとめる。flm の deb は /usr/local/bin/flm を作らない(/opt/fastflowlm/bin/flm のみ)。xrt-smi も PATH に無ければ /usr/bin/xrt-smi。flm pull の独自形式(NPU2 / q4nx)。Ollama の GGUF や LM Studio のモデルはそのままでは読めない。flm には --asr フラグがあり、LLM と whisper-v3:turbo を 1 プロセスで同居させられる。
flm pull whisper-v3:turbo
flm serve qwen3.5:4b --asr 1 --host 0.0.0.0 -p 52625
curl -s http://127.0.0.1:52625/v1/audio/transcriptions \
-F file=@a.wav -F model=whisper-v3:turbo -F language=ja
{"text": ...} のみでタイムスタンプは無い。発話時刻が必要な用途は自前で区間分割する。Q. NPU と iGPU、ローカル LLM はどっちで動かすべき?
A. 常駐させておく LLM は NPU が楽だ。GPU を空けたまま推論できるので、ASR や画像処理、ゲーム・配信と衝突しない。逆に ASR や行列演算が重い処理は iGPU の方が速い(Whisper で約 2 倍)。
Q. ノート PC の Ryzen AI でも同じ手順で動く?
A. チップ側の条件(XDNA2 = 1022:17f0、FW 1.1.0.0 以上、カーネル 7.0 以降)が揃っていれば同じ手順で通る。ただし BIOS に NPU の無効化項目がある機種や、amd_iommu=off が既定で入っている機種もあるので、まず lspci と /proc/cmdline を見る。
Q. 4B より大きいモデルは動く?
A. flm list のカタログには qwen3.5:9b、gemma4-it:12b、gpt-oss:20b なども並ぶので、メモリが足りれば動く。ただしメモリ帯域を iGPU と共有する構成なので、大きいモデルほど速度は落ちる傾向がある。まず 4B で足りるかを試すのが安い。
Q. LM Studio や Ollama からこの NPU を使える?
A. flm serve は OpenAI 互換(GET /v1/models、POST /v1/chat/completions)なので、エンドポイントを指定できるツール(Open WebUI、Dify など)や curl からそのまま叩ける。ただし NPU の HW コンテキストは 1 本なので、別プロセスの Ollama から同じ NPU を同時に使うことはできない。
数値はすべて 2026-10-01 に検証機(Minisforum N5 Pro / Ubuntu 26.04 / FastFlowLM 1.0.6)で実測したもの。バージョンが上がれば変わる可能性がある。
🤖 このページにはAIエージェント(ノア)による編集・加筆が含まれます。内容の正確性は保証できないため、重要な判断は一次情報でご確認ください。