onw-Image 0.1 — NPU だけで画像生成
日本語 | English
画像生成 AI Z-Image-Turbo(6B、Apache 2.0)を Intel NPU だけで 動かすデスクトップアプリです。 プロンプトの読み込み(テキストエンコーダー)、画像の生成(DiT)、画像への変換(VAE)まで、すべて NPU で計算します。 LLM を NPU で動かす onw の姉妹アプリです(上のバナーも onw-Image で生成)。
- Panther Lake(Windows):1024×1024 の画像が 1 枚約 76 秒(FP8、9 ステップ)
- Lunar Lake(Ubuntu、メモリ 16 GB):768×768 の画像が 1 枚約 70 秒(INT8、9 ステップ)
- 日本語のプロンプトにも対応
- 生成中もステップごとのプレビューを表示。画像はプロンプトとシード付きで PNG 保存
- 連続生成:同じプロンプトでシードを変えながら、指定した時間(最長 30 日)生成し続けます。 NPU で生成中のチップ全体の消費電力は 15 W 前後なので、つけっぱなしでも電球 1 個ぶん程度です
インストール(コマンドを 1 行貼るだけ)
Windows(Panther Lake)
PowerShell を開き、次の 1 行を貼り付けて Enter を押します。
irm https://huggingface.co/ryugyosoft/onw-image/resolve/main/install.ps1 | iex
アプリは %LOCALAPPDATA%\onw-Image に入ります。Python が無ければ winget で入れるか聞かれます。
続けてモデル(約 11 GB)がダウンロードされ、終わると onw-Image のウィンドウが開きます。
次回からはスタートメニューの「onw-Image」から起動できます。
Ubuntu(Lunar Lake)
端末(Ctrl+Alt+T)を開き、次の 1 行を貼り付けて Enter を押します。途中で必要な部品を入れるために、 ログインパスワードを 1 回聞かれます。
curl -fsSL https://huggingface.co/ryugyosoft/onw-image/resolve/main/install.sh | bash
アプリは ~/onw-image に入ります。続けてモデル(約 10 GB)がダウンロードされ、終わると onw-Image のウィンドウが開きます。
次回からはアプリ一覧の「onw-Image」から起動できます。
どちらも、同じ 1 行をもう一度実行すると最新版に更新されます。
初回だけ NPU 向けのコンパイルがあります
最初に生成ボタンを押すと、モデルをお使いの NPU 向けにコンパイルします(Panther Lake で約 40 分、Lunar Lake で約 25 分)。 進み具合はウィンドウに表示されます。結果は保存されるので、2 回目以降の起動は数秒で生成を始められます。 サイズを初めて変えたときや、長いプロンプト(64 トークン超)を初めて使ったときも、その分だけ同じコンパイルが走ります。
必要なもの
| 項目 | Windows 版 | Ubuntu 版 |
|---|---|---|
| CPU | Core Ultra シリーズ 3(Panther Lake、NPU 5000 以降) | Core Ultra 200V シリーズ(Lunar Lake、NPU 4000) |
| モデル | FP8(1 層 1 グラフ) | INT8(6 層 1 グラフ) |
| メモリ | 32 GB 以上(64 GB で確認) | 16 GB 以上 |
| OS | Windows 11 | Ubuntu 24.04 以降(26.04 で確認)、linux-npu-driver 1.38 以降 |
| ディスク | 約 40 GB(モデル 11 GB、コンパイル結果、Python 環境) | 約 20 GB(モデル 10 GB、コンパイル結果 7 GB、Python 環境) |
速さの目安(9 ステップ)
| 処理 | Panther Lake(1024×1024、FP8) | Lunar Lake(768×768、INT8) |
|---|---|---|
| 1 ステップ(DiT) | 約 8.2 秒(長いプロンプトでは約 11 秒) | 約 5.7 秒 |
| 1 枚(テキストエンコーダー・DiT・VAE の合計) | 約 76 秒(2 枚目以降) | 約 70 秒 |
| 平均消費電力(チップ全体) | 約 15 W | 約 14 W |
1024×1024 の PNG は 1 枚 1.2 MB 前後なので、連続生成で 1000 枚作っても 1.2 GB ほどです。 保存先の空きが 2 GB を切ると、連続生成は自動で止まります。
使い方
- 左側:プロンプト(Ctrl+Enter で生成)、サイズ、ステップ数(4〜12、既定 9)、枚数、シード(固定・ランダム)
- 枚数を 8 の次に進めると「連続」になり、続ける時間(1 時間〜30 日)を選べます
- 中央:生成中のプレビューと進み具合、完成した画像
- 右側:履歴(保存先フォルダの画像も表示)。ファイルの場所を開く、コピー、同じ設定で再生成、ごみ箱へ移動
- 保存先:ピクチャの
onw-Imageフォルダ(設定で変更可)。PNG にプロンプト・シード・サイズなどを書き込みます
仕組み(NPU で動かすための工夫)
- Panther Lake は FP8、Lunar Lake は INT8:FP8 を NPU がそのまま計算できるのは NPU 5000 以降です。 FP8 は INT8 より精度が高く、元のモデルに近い画になります。INT8 版は外れ値の多い FFN の出力側を層ごとに調整しています
- 画像トークンとプロンプトのトークンを分けて量子化:プロンプト側の一部のトークンに巨大な値が出るため、 画像側は静的な尺度、プロンプト側はトークンごとの尺度にしています
- 1×1 畳み込みの形で計算:トークンを画像のマス目として並べると、NPU では行列積の形より約 2.5 倍速くなりました
- アテンションのマスクを q・k に埋め込む:NPU ではマスク付きのアテンションが遅く不正確なため、マスクを q・k の追加次元に入れています
- 16 GB に収める(Lunar Lake):6 層ずつを 1 つのグラフにまとめ、空きメモリに応じて常駐させる数を自動で決めます
- NPU の turbo:コンパイル済みのグラフを書き出し、NPU_TURBO 付きで読み込みます
- NPU 特有の数値の落とし穴を回避:RoPE や RMSNorm の書き方によって NPU の計算結果が崩れる箇所を見つけ、 正しく計算できる形に置き換えています
生成例(Lunar Lake、768×768)
右 2 枚のプロンプトは「アニメ調の夕暮れの港町、猫耳の少女、看板に『NPU』の文字」です。
ライセンス
- アプリ(このリポジトリ):Apache License 2.0
- モデル:FP8 版・INT8 版。 元は Tongyi-MAI/Z-Image-Turbo(Apache License 2.0)を NPU 向けに変換したものです
更新履歴
- 0.1(2026-10-09):Windows・Panther Lake 版(FP8、1024×1024 が既定、1 枚約 76 秒)を追加。連続生成(最長 30 日)を追加。 NPU の turbo を使うように。Lunar Lake では空きメモリに応じて DiT のグラフを常駐させ、1 ステップ 6.5 秒 → 5.7 秒、 生成中の SSD 読み込みと CPU 使用がほぼなくなりました
- 0.1a(2026-10-08):最初の公開版。Ubuntu の Lunar Lake 向け INT8 モデル、768×768 が既定