画像・動画生成
Pruna-Qwen-Image-2.1をローカル実行:5・8ステップのアダプターを選ぶ
陶器のマグカップの構図候補を早く選ぶなら5ステップ、縁や取っ手まで見て決めるなら8ステップから比べます。
陶器のマグカップの構図を選ぶときは、5ステップで照明と構図を素早く見て、最終候補を8ステップ版とベースモデルで再確認してください。Pruna-Qwen-Image-2.1は独立した小型モデルではなく、既存のQwen-Image-2.1に重ねるLoRA1アダプターで、v0.1の品質はベースモデルを下回ります。この比較はCUDA2環境で行います。
最初に選ぶのは完成画像ではなく照明と構図です
結論から言うと、照明と構図の候補を素早く見るには5ステップを使い、縁や取っ手を判断するときは8ステップでもう一度確認します。小さなテーブルの陶器のマグカップを例に、窓辺の柔らかな光と暗めのスタジオ照明を比べましょう。背景やカメラ角度も変えるなら、1枚を長く仕上げる前に、光の向き、画面の余白、全体の色合いを比べる候補を作る方が役立ちます。
Pruna-Qwen-Image-2.1は、ベースモデルに追加の重みを重ねるLoRAアダプターです。ベースモデルの40ステップを単に8ステップへ減らしたのではなく、少ないステップで画像を生成するよう別途学習されています。ステップとは、ノイズから始まる画像表現を繰り返し更新する処理で、このアダプターは5または8ステップを使います。ただし開発元によると、v0.1の品質はまだベースモデルを下回ります。そのため、候補生成の速度と完成画像の品質は分けて確認する必要があります。
ステップ数だけを見ると、8ステップは40ステップのベースモデルに対してノイズ除去の反復が5分の1、5ステップは8分の1です。ただしこの割り算は反復回数の比較であり、生成時間全体が5倍または8倍短くなるという意味ではありません。各ステップの計算量、プロンプトのエンコード、画像のデコード3も全体の作業時間に含まれ、GPU4によって実際の速度も異なります。候補生成が速くなる可能性として捉え、同じPCで時間と画質を確かめてください。

小さなチェックポイントではなく既存モデルに重ねるアダプターです
Prunaという名前が付いていても、Qwen-Image-2.1の小さな独立モデルをダウンロードするわけではありません。元のQwen/Qwen-Image-2.1チェックポイント5を読み込み、その上にLoRA重みを適用します。パイプライン6は画像生成の各段階をつなぐ実行構成、テキストエンコーダーはプロンプトをモデルが扱える表現へ変換する部分、VAE7は内部表現と最終ピクセル画像の間を変換する部分です。これらはベースモデルの構成を使います。
アダプターファイルはそれぞれ約335.6MBです。追加ダウンロード量の目安にはなりますが、画像生成中にGPUが必要とするメモリ全体ではありません。ベースの重み、テキストエンコーダー、VAE、解像度によって変わる中間作業領域も使います。したがってファイルサイズだけを見て「8GBのGPUで十分」とは判断できません。このモデルカードはVRAM8削減や、より小さなGPUで実行できることを実証していません。
実行例はCUDA GPUを使う非商用の研究・評価を前提とします。商用利用には別途ライセンスが必要です。まずベースモデルを動かすメモリとCUDA環境を用意し、その後アダプターを追加します。この記事の挿絵は説明用で、Prunaが生成したサンプルではありません。

5ステップと8ステップは同じ作業の別の場面で使います
同じマグカップのプロンプトとシードで両方を並べると、使い分けが見えます。8ステップアダプターは品質重視の初期設定として推奨され、5ステップ版は速い一方で画質が目に見えて低くなります。背景色、光の向き、カップの位置を見て候補を絞るには5ステップを試せます。縁の楕円形や取っ手の自然さまで判断したい候補は、8ステップかベースモデルでもう一度確認するのが適切です。「候補を早く選ぶのに使える」ことは「完成画像にも十分」という意味ではありません。
二つのアダプターは、それぞれ専用のシグマスケジュール9で学習されています。シグマは各ステップのノイズレベルで、スケジュールはその値がステップごとにどう変わるかを並べたものです。5ステップのファイルには5ステップ用、8ステップのファイルには8ステップ用を合わせます。アダプターは一度に一つだけ読み込み、LoRA強度は1.0にします。シグマが二重に変換されないよう動的シフトをオフにし、shift=1を指定します。最後の0はスケジューラーが自動で追加するため、自分では加えません。CFG10はプロンプト条件にどれだけ従うかを調整します。この例ではtrue_cfg_scale=1.0とし、ネガティブプロンプトは使いません。
実行するには、下のPythonブロックをpruna_mug.pyとして保存し、パッケージを導入したCUDA対応のPython環境でpython pruna_mug.pyを実行します。まず8ステップで1枚生成し、設定を確認してください。その後5に変えると、ファイル名とシグマ一覧が一緒に切り替わります。同じシード42を使えば実行間の初期ノイズ条件をそろえられますが、二つの結果の構図が同じになる保証はありません。
参照画像のマグカップの背景を変える編集にも、同じパイプラインを使います。学習で扱った範囲は1K解像度と最大3枚の参照画像です。まず自分で用意した画像1枚と1024×1024の出力から始め、カップの形を保つ指示が守られるか確認します。参照画像を増やすことや解像度を上げることは、基本の編集が動いてから別に試す条件です。
pip install 'torch>=2.4.0' 'transformers>=5.17' accelerate peft pillow
pip install git+https://github.com/huggingface/diffusers@6256aa7666cedd47443adc8f82da9a10e110b09cimport torch
from diffusers import FlowMatchEulerDiscreteScheduler, QwenImage21Pipeline
STEPS = 8 # 8: quality-first default; 5: faster candidate selection
SIGMAS = {
5: [1.0, 0.94, 6 / 7, 2 / 3, 0.4],
8: [1.0, 14 / 15, 6 / 7, 10 / 13, 2 / 3, 6 / 11, 0.4, 2 / 9],
}[STEPS]
pipe = QwenImage21Pipeline.from_pretrained(
"Qwen/Qwen-Image-2.1", torch_dtype=torch.bfloat16
).to("cuda")
pipe.load_lora_weights(
"PrunaAI/Pruna-Qwen-Image-2.1",
weight_name=f"p_qwen_image_2.1_{STEPS}step_v0.1.safetensors",
)
pipe.scheduler = FlowMatchEulerDiscreteScheduler.from_config(
pipe.scheduler.config, use_dynamic_shifting=False, shift=1.0, shift_terminal=None
)
image = pipe(
prompt=(
"A ceramic mug on a small table, soft window light from the left, "
"warm neutral background, three-quarter view, realistic still life"
),
width=1024, height=1024,
generator=torch.Generator("cuda").manual_seed(42),
num_inference_steps=STEPS, sigmas=SIGMAS,
true_cfg_scale=1.0, use_kv_cache=True,
).images[0]
image.save(f"mug-{STEPS}-step.png")from PIL import Image
source = Image.open("mug-reference.png").convert("RGB")
edited = pipe(
prompt="Keep the ceramic mug shape; change the background to a warm gray studio.",
image=source,
width=1024, height=1024,
generator=torch.Generator("cuda").manual_seed(42),
num_inference_steps=STEPS, sigmas=SIGMAS,
true_cfg_scale=1.0, use_kv_cache=True,
).images[0]
edited.save("mug-edited.png")公表された6.3倍は機器と作業条件と合わせて読みます
モデルカードには最大6.3倍速いという結果があります。H100 80GB 1基、BF1611、バッチサイズ121で行った試験で報告された最大倍率です。Qwenモデルカードの例示プロンプトを使い、ウォームアップ1回の後、3回生成した中央値を示しています。プロンプトのエンコード、ノイズ除去、デコードを含み、PNG保存、モデル読み込み、ウォームアップは除外されています。そのため、PCで実行を始めてからファイル保存までの総待ち時間ではありません。この数値から個人用デバイスの秒数は計算できません。
チャートでは、ベースのQwen-Image-2.1は40ステップでKV cache13を有効にし、Prunaの5・8ステップは無効にしています。KV cacheは中間結果の一部を保存して再利用する機能です。チャートではLoRAをマージせず、CFG・コンパイル・CPU14オフロード15を使っていません。一方、公式クイックスタートではPrunaの推論時にuse_kv_cache=Trueを指定するため、前の例を実行しても公表チャートの設定は再現されません。
手元で比較するときは、プロンプト、解像度、シード、実行環境、保存方法をそろえ、両アダプターの候補を目で確認します。時間を測る場合はモデル読み込みと最初のウォームアップを繰り返し生成から分け、同じ条件で複数回実行して中央値を比べます。CUDA処理が終わる前にCPU側のタイマーが止まると実際より短く記録されるため、同期しない計測は避けてください。丁寧に測っても、そのGPUとソフトウェア構成での結果であり、他の機器に当てはまる保証ではありません。
最終候補のマグカップは細部を個別に確認します
5ステップで背景と照明の候補を絞ったら、選んだ場面を8ステップでもう一度生成します。カップの口の楕円、取っ手と本体のつなぎ目、釉薬のハイライトを拡大して確認してください。小さなプレビューでは目立たない乱れも、実際のサイズやトリミング後には見つかることがあります。「左から柔らかな窓光」のように条件を具体的に書くのも有効です。モデルカードも、詳細なプロンプトの方がよい結果につながると説明しています。
8ステップだからアダプターがベースモデルの品質に達した、という意味ではありません。v0.1の説明では全体の品質がまだベースモデルを下回り、5ステップでは低下がさらに目立ちます。完成画像の細部が重要なら、同じ場面を元の40ステップのベースモデルとも比べてください。処理は長くなる可能性がありますが、用途にどちらが合うかを直接判断できます。公表された2Kチャートは速度のみを示し、2Kの画質を検証したものではありません。学習は1K解像度のみなので、比較は1024正方形から始めるのが適切です。

CUDAの例とMacの実行経路は分けて考えます
公式クイックスタートはCUDA GPUを必要とし、上のコードは.to("cuda")とCUDAの乱数生成器を使います。そのため、このレシピはCUDA環境向けです。このアダプターカードではMac Metal16、MLX17、GGUF18との統合を確認できませんが、別の実装や変換経路が不可能という意味ではありません。他の実行環境を検討する場合は、そのプロジェクトがこのPrunaアダプターとバージョンに対応しているか確認してください。
サイトの/generate画面はPrunaアダプターではなく、ベースQwen-Imageの機器別生成時間を推定します。複数の照明や背景を変えて候補を評価する場合、少ないステップ数が役立つ可能性があります。候補が少なく待てるなら、ベースモデルをそのまま使う方法もあります。どちらの経路でも、選んだ1、2枚を8ステップ版と40ステップのベースモデルで確認し、最終用途に必要な細部が得られているか判断してください。
評価の進め方とは別に重みの利用条件を確認します
PrunaアダプターはQwen-Image-2.1の派生物であり、モデルカードと同梱ライセンスはQwen Research Licenseを示しています。第1条は非商用を研究または評価目的と定義し、第2条は許可される利用をその非商用目的に限定しています。商用目的には別途商用ライセンスが必要と明記されています。記事の著作権とモデル重みの利用条件は別のものであり、記事が公開されているからといって重みの利用範囲が広がるわけではありません。
したがって、マグカップの構図を比べる非商用評価と、販売する商品の画像を制作することは、同じ目的とは扱えません。ここでは法律上の助言ではなく、ライセンスに記載された区別のみを説明します。モデルファイルを取得したり生成物を配布したりする前に、ライセンス全文、最新の公式カード、必要な別途許可を確認してください。画像生成が技術的に動作することと、結果をどの目的に使えるかは別の問いです。
用語の注釈
LoRA — 基本モデルの動作を調整する小さな追加の重みを学習・適用する方法です。アダプター単体で動く独立モデルではなく、画風の調整や少ないステップでの生成などに使われます。
本文に戻るCUDA — NVIDIA GPUで汎用計算を行うソフトウェア基盤です。CUDA向けのプログラムが他のGPUでそのまま動くとは限りません。
本文に戻るデコード — LLMでは入力処理後に出力トークンを生成する段階です。VAEやオーディオコーデックでは、圧縮表現や符号化データから元の形式を復元する処理を指すことがあります。
本文に戻るGPU — 多くの計算を並列に処理するプロセッサーです。AIモデルの実行ではモデル計算を担います。
本文に戻るチェックポイント — 学習済みモデルの重みなどを保存したファイルです。同じモデル系列でも、版や用途によって異なるチェックポイントを使うことがあります。
本文に戻るパイプライン — 入力から出力まで続く処理段階のまとまりです。段階ごとに異なるモデルやツールを使うことがあります。
本文に戻るVAE — Variational Autoencoderの略です。入力を圧縮した潜在表現に変換したり、その表現から出力を復元したりします。
本文に戻るVRAM — グラフィックカードのGPUが使うメモリです。モデルの重みや計算途中の値を置き、システムRAMとは区別されます。
本文に戻るシグマスケジュール — 生成の各ステップで使うノイズの水準を定めた並びです。同じステップ数でも値や配置は異なり、専用に学習したアダプターでは指定のスケジュールを使います。
本文に戻るCFG — 条件付き予測と条件なし予測の差を使い、生成結果が入力条件に従う度合いを調整する手法です。蒸留モデルでは別途有効にしないよう指定されることがあり、推奨値はモデルによって異なります。
本文に戻るBF16 — モデルの数値を保存・計算する16ビット浮動小数点形式です。利用可否はハードウェアと実行環境によります。
本文に戻るバッチサイズ — 1回の処理単位にまとめる入力またはリクエスト数です。大きくすると処理量とメモリ要件の両方が変わることがあります。
本文に戻るKVキャッシュ — 過去トークンのAttention用キー・バリューを保存し、後続トークン生成で再利用するメモリです。容量はコンテキスト長やバッチサイズで変わります。
本文に戻るCPU — コンピューターで汎用のプログラム命令を実行する中央処理装置です。AI処理ではGPUなど他のプロセッサーと役割を分けることがあります。
本文に戻るオフロード — 容量が足りないとき、モデルデータの一部をGPUメモリからシステムRAMやストレージへ移して処理する方法です。データ転送が追加されます。
本文に戻るMetal — Apple機器でグラフィックスやGPUの並列計算を実行する低水準の技術です。モデルを選んで会話するアプリそのものではありません。
本文に戻るMLX — Appleが開発する機械学習フレームワークです。Apple siliconでは統合メモリとMetalを活用し、別途Linux向けの実行経路も提供します。対応モデルや機能はMLXを使うツールごとに異なります。
本文に戻るGGUF — モデル情報を格納するファイル形式で、llama.cpp系のツールで広く使われます。形式だけで特定ハードウェアへの対応や速度が保証されるわけではありません。
本文に戻る