安く速く出すためのパラメータを、論文から決める — ステップ数・CFG・サンプラー
目次(9 項目)
PixAI で SDXL 系のモデルを使うとき、DMD2 という高速化 LoRA を重ねると、生成がぐっと速く安くなります。
ではそのとき、ステップ数と CFG とサンプラーをいくつにすればいいのか。論文と公式ドキュメントだけを見て、一から決めてみます。
先に言うと、PixAI の設定画面では公式の想定どおりにできない部分があり、そこをどう埋めるかが本題になります。
まず DMD2 が何をしているのか
DMD2 は蒸留(distillation)という手法で作られたモデルです。
たくさんのステップをかける「教師モデル」の出力を、少ないステップで再現できるように別のモデルを訓練し直す。これが蒸留です。論文(Improved Distribution Matching Distillation for Fast Image Synthesis)は、1ステップでの生成を実現し、推論コストを500倍削減、ImageNet 64×64 で教師モデルを上回る FID 1.28 を達成した、と報告しています。
つまり DMD2 は「設定でステップを削っている」のではなく、途中を飛ばしても同じ場所に着くように作り直されたモデルです。
ここから、公式が想定している3つの条件が出てきます。
この3つが出発点です。 順番に、PixAI で実現できるかを見ていきます。
ステップ数:理論値は4
公式が4ステップを想定しているなら、まず4で試すのが筋です。8という数字の根拠は、少なくとも論文側にはありません。
では8はどこから来たのか。PixAI のクレジットの仕組みを見ると、理由が見えます。
PixAI のクレジット消費はステップ数で階段状に上がるので、4ステップでも8ステップでも支払う額が同じになる区間があります(3:5 なら10ステップまで同額 → クレジットの記事)。
そうであれば、判断はこうなります。
同じ値段なら、多いほうを選んでおくほうが安全。
8ステップはコスト最適化の結果ではなく、コストが変わらない範囲での品質保険であって、「8が最適」という話ではありません。
CFG:理論値は「かけない」。PixAI の 1 がそれに当たる
公式実装は guidance_scale=0 を指定しています。CFG を一切かけないということです。
これは PixAI の CFG 1 と同じ設定です。 diffusers の実装は guidance_scale > 1 のときにしか CFG を計算しません。
@property
def do_classifier_free_guidance(self):
return self._guidance_scale > 1 and self.unet.config.time_cond_proj_dim is None
0 でも 1 でもこの条件は偽になり、条件つき予測だけが使われます。式に当てても同じで、w=1 なら x_u + 1×(x_c − x_u) = x_c です。つまり CFG 1 は妥協ではなく、公式実装の指定そのものです。
なぜかというと、蒸留の過程で guidance がすでにモデルの重みに焼き込まれているからです。
教師モデルは CFG をかけた状態で絵を作ります。DMD2 の論文は、その値まで書いています。
We set the guidance scale for the real diffusion model to be 8.
SDXL では教師を CFG 8 で回して蒸留しています(付録F.4)。生徒モデルはその結果を再現するように学ぶので、CFG 8 ぶんの guidance を最初から内側に持っています。そこへ生成時にもう一度 CFG をかけると、8 の上に重ねることになります。結果が、焦げたような濃さ、飛んだ彩度、潰れたコントラストです。英語圏では burnt(焦げた)と呼ばれます。
「なぜ 4 や 7 ではいけないのか」の答えがこれです。 数字が大きすぎるのではなく、すでに 8 がかかっているものに重ねているからです。
そして論文は、これを制約として認めています。
Like most previous distillation methods, we use a fixed guidance scale during training, limiting user flexibility.
guidance の強さは学習時に固定されていて、使う側は変えられない。 つまり DMD2 では、CFG はそもそも調整用のつまみとして設計されていません。モデルカードの使用例が guidance_scale=0 なのも、そういうことです。
ところが、CFG をかけないと別の問題が起きます。
CFG の計算式を整理すると、こうなります(w が CFG の値)。
出力 = (1 − w) × プロンプトを無視した場合 + w × 見た場合
ネガティブプロンプトは「無視した場合」の側に入ります。 つまりネガティブにかかる係数は (1 − w) です。ここから2つのことが分かります。
w = 1 のとき、係数はちょうど 0 になります。 ネガティブが数学的に消えます。
そして w が 1 を超えると、ネガティブの効きは (w − 1) に比例して強くなります。
| CFG (w) | ネガティブの係数 | プロンプト側の係数 |
|---|---|---|
| 1.0 | 0(無効) | 1.0 |
| 1.1 | 0.1 | 1.1 |
| 1.5 | 0.5 | 1.5 |
| 2.0 | 1.0 | 2.0 |
| 4.0 | 3.0 | 4.0 |
「CFG 2くらい」と「1.1」では、ネガティブの効きが10倍違います。 同じ「低い CFG」として語られがちですが、まったく別の設定です。
そして表を見ると、押し出し(w)とネガティブ(w − 1)が同じノブで動いていることが分かります。分離できません。ネガティブを効かせようとすれば、必ず押し出しも強くなる。蒸留モデルは押し出しがすでに焼き込まれているので、その余地がほとんどない状態でノブを回すことになります。
だから理論からは最適値が決まりません
板挟みの構造は説明できますが、どこで手を打つべきかは、モデルにどれだけ guidance が焼き込まれているかで変わります。これは公開されていません。
決められるのは探し方だけです。
- ネガティブを使わないなら 1。生成時の上乗せがゼロで、焦げの原因を足さない
- ネガティブを効かせたいなら 1.1 から。ここから 0.1 ずつ上げていく
- 焦げ始めたら、ひとつ手前に戻す
上限を先に決めて「2にする」のではなく、下から上げて止まるところを探すのが、式に沿った手順です。
このサイトの実測は、どれも CFG 2 で回しています。上で導いた 1〜1.1 と違う値なので、正直に書いておきます。
⚠️ 検証のために 2 を選んだのではありません。 測った当時この構成を使っていたので、そのまま 2 で回しました。上の 1〜1.1 は、あとから式をたどって出てきた値です。順序はこちらが逆です。
あとから見ると、結果的に都合はよかったと言えます。1.1 だとネガティブの係数は 0.1 で、2 の10分の1。そこで差が出なかったときに「弱いから出なかった」のか「そもそも効かないから出なかった」のかを区別できません。2 で測っていたぶん、その曖昧さは避けられていました。
⚠️ ただし「2 なら十分」「1.1 では足りない」は測っていません。 下の「まだ分かっていないこと」に挙げたとおりで、1.1 と 2 で絵にどれだけ差が出るかは未確認です。実測が2だったという事実と、2を勧める根拠は別のものです。
⚠️ 「CFG 2 は 7 より弱い」という比較もできません。 係数の式は同じモデルの中でしか使えません。蒸留モデルは教師の CFG 8 を内側に持っているので、生成時の CFG はその上乗せになります。CFG++ の論文も、蒸留モデルほど guidance の変更に敏感だと報告しています。
We find that the improvement gain from CFG++ is even more dramatic for distilled diffusion models such as SDXL-{turbo, lightning}.
同じ数字でも、蒸留モデルでは強く出る側に振れます。 どれだけ強いかは測られていないので、通常モデルとの換算はできません。
サンプラー:ここが一番ずれている
公式実装は LCM スケジューラを前提にしています。ところが PixAI に LCM はありません。
選べるのは12種類で、そのどれも LCM ではありません(2026年9月6日にアプリの画面で確認)。噛み合うかどうかは、名前の末尾で分かれます。
| サンプラー | |
|---|---|
| 収束する側(σ=0) | DDIM / DPM++ 2M Karras / Euler / LMS / Heun / DPM2 Karras |
| ノイズを足し続ける側 | Euler a(既定) / DPM2 a Karras / DPM++ 2S a Karras / DPM++ SDE Karras / DPM++ 2M SDE Karras / Restart |
末尾の a(ancestral)と SDE が、毎ステップで乱数を引く印です。ステップ数を増やしても絵が落ち着かず、変わり続けます。DDIM の論文でいう σ を残した側にあたります(ステップ数の記事)。⚠️ 実際に出して確かめたのは DDIM と Euler a だけで、残りは名前からの分類です。
PixAI の既定サンプラーがこの Euler a です。
そして σ=0 側には、同じ初期ノイズから出発すれば経路が違っても高レベルの特徴が保たれるという性質があります。ここが実務に効きます。8ステップで当たりを探し、そのシードのままステップを上げて仕上げるという二段構えは、σ=0 側でしか成立しません。既定の Euler a では、上げた瞬間に別の絵になります。
蒸留モデルは「少ないステップで収束させる」ために作られています。そこへ収束しない方式を組み合わせるのは、設計思想として逆向きです。理屈だけで言えば、LCM が無い環境で最も近い挙動を期待できるのは、ancestral ではない DDIM か DPM++ 2M Karras のほうです。
PixAI の既定値のまま使うと、DMD2 の前提から二重に外れます。 ステップ数は4でなく28、サンプラーは LCM でなく Euler a。
ステップ数のほうは手で下げれば済みますが、サンプラーは代わりが無いぶん厄介です。ここが埋まらないなら、その不足をステップ数で補うという考え方になります。逆に言えば、ancestral でないサンプラーに替えれば、より少ないステップで足りる可能性があります。
理論から組み立てた設定
以上をまとめると、論文と公式ドキュメントだけから導かれる出発点はこうなります。
| 項目 | 理論値 | PixAI での現実解 |
|---|---|---|
| ステップ | 4 | 同じ値段の上限まで踏んで 8(品質保険) |
| CFG | 0(=かけない) | ネガティブが要らないなら 1(0と同じ設定)、要るなら 1.1 から上げていく |
| サンプラー | LCM | 無いので DDIM か DPM++ 2M Karras を試す価値がある |
| アスペクト比 | — | 測った3つでは 9:16 が最も安い(1:1・16:9 は未測定 → クレジットの記事) |
⚠️ これは理論からの推論です。 ただしサンプラーの件だけは、実際に出して確かめました。
DDIM なら、同じシードで 8ステップ と 28ステップ がほぼ同じ絵になります。 既定の Euler a では 8ステップ と 28ステップ が別の絵になり、目の色まで変わりました。
「当たりを探して仕上げ直す」をやるなら、サンプラーの変更は必須です。
この構成でのプロンプトの書き方
⚠️ 「CFG が低いからプロンプトが効かない」は、蒸留モデルには当てはまりません。 guidance は学習時に重みへ焼き込まれているので、生成時に 1 で回してもプロンプトを緩くしか聞かないわけではありません。CFG の値から言えるのはネガティブ側の係数だけです。
プロンプトの長さと順序の制約は、CFG とは別のところから来ます。75トークンで区切られることと、前にあるタグほど後続の解釈に影響することです(SDXL 系の書き方)。20個程度に絞り、大事な順に前へ置くのは、この構成に限った話ではありません。
- 人数と主体(
1girl, solo) - キャラの永続的な特徴(髪色・髪型・目の色)
- 構図(
upper bodyなど) - 最低限の背景(
simple backgroundは情報量が減るぶん人物に容量が回るので相性がいい)
この構成で本当に効いてくるのは、ネガティブのほうです。 ネガティブは全体で1つの方向になるので、語を足すほど狙いが鈍ります(ネガティブの記事)。そこへ低い CFG が重なると、鈍った方向に小さい係数がかかることになります。⚠️ CFG 1 なら係数はちょうど 0 で、何を書いても効きません。
worst quality, low quality, signature, watermark
足りなければ、実際に出た失敗に対応する語だけ足してください。
重み付け((tag:1.2) の形)より、そのタグを前に動かすほうが確実です(SDXL 系の書き方)。⚠️ 低 CFG で重み付けの効きがどう変わるかは測っていません。
⚠️ DMD2 自体が LoRA の枠を1つ使います。 PixAI で同時に使える LoRA は無料プランで3、Starter で5です。キャラ LoRA や画風 LoRA を重ねるときは、1枠減った状態で考えてください。
向いている使い方・向いていない使い方
⚠️ 低ステップで画質がどれだけ落ちるかは測っていません。 実測したのは「DDIM なら同じシードの 8 と 28 がほぼ同じ絵になる」ところまでで、細部を並べて比べてはいません。「線が甘くなる」「手が崩れやすくなる」とは、この記事からは言えません。
向き不向きは、画質ではなく課金構造とサンプラーの性質から言えます。
向いているのは、構図・衣装・ポーズの当たりを探す段階です。8ステップ以下なら4枚まとめても総額が変わらず、1枚あたり50まで下がります(クレジットの記事)。数を出して選別する工程と噛み合う理由は、ここです。
仕上げに回すつもりなら、当たりを探す時点で σ=0 側のサンプラーにしておく必要があります。 同じシードでステップだけ上げ直せるのはそちら側だけで、既定の Euler a では別の絵になります。⚠️ ステップを上げて実際に細部が良くなるかどうかも、まだ確かめていません(修正ツールの記事)。
まだ分かっていないこと
- 4ステップで足りるのか。理論値は4ですが、実測したのは8ステップまでです
- DDIM や DPM++ 2M Karras に替えると、より少ないステップで足りるのか。この記事の推論からはそうなりますが、ステップを下げて確かめてはいません
- CFG 1.1・1.5・2 の実際の差。式の上では効きが10倍違いますが、絵としてどれだけ変わるかは測っていません
- どこから焦げ始めるか。モデルにどれだけ guidance が焼き込まれているかで変わり、公開されていません
- 蒸留モデルでは同じ CFG がどれだけ強く出るのか。教師の CFG 8 の上に乗るぶん強く振れる方向は分かっていますが、通常モデルとの換算は測られていません
- 低ステップと高ステップで、絵の細部がどう違うのか。8と28で「ほぼ同じ絵」になることは確かめましたが、拡大して線や指を比べてはいません。「低ステップは荒い」という前提自体、このサイトでは裏を取っていません
- PixAI の DMD2 がどのバージョンか。公式ドキュメントに記載がありません
出典
- DMD2: Improved Distribution Matching Distillation for Fast Image Synthesis(arXiv 2405.14867) — 蒸留の手法、1ステップ生成、推論コスト500倍削減、FID 1.28。SDXL は教師を CFG 8 で回して蒸留(付録F.4)、および「学習時に guidance を固定するので使う側の自由度が無い」という制約の明記
- CFG++: Manifold-constrained Classifier Free Guidance for Diffusion Models(arXiv 2406.08070) — 蒸留モデル(SDXL-turbo / lightning)ほど guidance の変更に敏感だという報告
- diffusers の SDXL パイプライン(GitHub) —
do_classifier_free_guidanceがguidance_scale > 1のときだけ真になる実装。guidance_scale=0と 1 が同じ挙動になる根拠 - DMD2 モデルカード(HuggingFace) — SDXL 向け4step LoRA、
guidance_scale=0、LCM スケジューラ - Classifier-Free Diffusion Guidance(Ho & Salimans, 2022 / arXiv) — CFG の原論文
- Latent Consistency Models(HuggingFace Diffusers) — 蒸留モデルにおける guidance の扱い
- Few-Step Diffusion Models: Hyper-SD, Lightning, and Turbo — 蒸留モデルで CFG を上げると焦げる理由
- モデルパラメータ(PixAI公式) — 既定は Steps 28・CFG 5・Euler a。⚠️ サンプラーを3種としているが、実際の画面には12種ある(2026年9月6日にアプリで確認)
2026年9月4日確認。9月7日に、CFG から言えることと言えないことを切り分けました(「低 CFG だからプロンプトが効かない」「低ステップだと細部が甘い」はどちらも根拠が出せず、撤回しています)。