//編集者メモ
//このページを最初に書いた人より、補足
//11月リリース時点ではニュースは過大評価しているようにも見える(気がする)。LCMを使用した様々なアプリが乱立&本質が評価できていない感があるので、しばらくメモ段階にとどめておこうかと。
//しかし、もし「LCMは今後も通用する花形技術で、wikiでも大々的に書こうぜ」という強い情熱を持った執筆の方がいらっしゃるなら、ご自由にどうぞ。
//個人的にはLCMには好感を持っていますが、他人にオススメするには導入の敷居が高い(理想は、使い方の説明だけではなく、効果を知った上で必要な人に届けるための文言を考えないと・・・)、学習に使い難い(個人的にsd-scriptsへの実装検証中)というスタンスであり、本格的に執筆するのは大分先になりそうでして、ページ校正のみ携わることになりそうです。

//2024/1/2 更新されていないようなので勝手に内容を整理・追記しました
// 2024-08-15 導入手順を最新のWeb UIベースに更新

//2026-06-20 ページを最初に書いた人
//結局そんなにLCMは流行りませんでしたね。このページは現状、wikiメニュー「執筆中のページ」に配置されているのでなくても困らないし、迷って来た(または迷ってきた)人向け、という項目があるわけですからgoogle検索などから誘導できているでしょうし、メニューに残す意味がなくなってしまいました。今後は「よく見る用語集」ページから辿るのがベターです。
//どうしてもメニューに残したい人がいるなら戻してもいいけど...

#contents

*迷って来た(または迷ってきた)人向け [#y507c3ca]

君の手元におそらくあるLCM_LoRA_Weightsとかpytorch_lora_weightsとかの名前のついたファイルは「Dreamshaper-V7を短ステップ数で再現できるLoRA」である。古い情報では「LCMを導入したモデルが必要なので探してみよう」等書かれていることがあるが、その直後のLCM_LoRAの登場で不要となった(LoRAなので好きなモデルと併用できる)。''そのファイルさえあればよい''。ちなみにHash値が同じなら名前違っても同じファイルである。1個でいいよ。
Dreamshaperはわりと汎用的なモデルではあるが、特定のモデルのデータがLoRAとしてくっついてきてしまうため絵柄がどうしても変わるのが難点。
1111はLCM用の収束設定をする項目がないので、AnimateDiffを導入することでもれなくついてくるLCMサンプラーを使うとよい(このサンプラーの挙動が気に入らない場合、プロンプト上で<lora:LCM_LoRAなんとか:0.4>のように影響を弱めると通常サンプラーでもそれなりにできることがわかっている。後述)。

なお、収束(完成)に必要なステップ数が通常よりは少なくて済むはず、という以外の利点はない(Step1周あたりの時間は短くならない)。LCM使用時にイイ構図が出たとしても、いつもの生成手段に切り替えるとすべてが変わってしまう。モデルによってはわりと馴染む、または独特な雰囲気になって意外とステキ、ということがあるので、それが気に入ったor今日はこれでいいやという場合向けといえる。

日常的な生成が(体感上)充分速い、困ってない、という人は、完成品質を犠牲にしてまでLCM/LCM_LoRAを導入する理由は薄い。
&br;
…つまりはロースペ救世主である。ようこそ。
&br;
&br;

*概要 [#z2de1e9d]
-''LCM'' (Latent Consistency Model)は、少ステップ数で画像を生成できるように学習された''モデル''のこと。
-LCMは通常のサンプラーで機能するよう設計されていないので、専用のサンプラーを用いる必要がある。
--diffusersでは、v0.23.0で「LCMScheduler」という名称で実装されている
https://github.com/huggingface/diffusers/releases/tag/v0.23.0

#shadowheader(3,効果)
-画像生成の生成速度が上がる。リアルタイム生成に貢献する。((原理は[[arXiv論文>https://arxiv.org/abs/2311.05556]]を参照。低Stepでスコアが高い))
-Step数を増やしても、従来のsamplerと生成結果は異なる模様。((このページ内の説明や、[[diffuser公式サンプル画像>https://github.com/huggingface/diffusers/releases/tag/v0.23.0]]の後期Stepを参照のこと))
-Step数を増やした後の、数値上のスコアは従来のsamplerと同等。(([[arXiv論文>https://arxiv.org/abs/2310.04378]]のCLIP scoreを参照。8step以上になるとLCMの優位性はなくなる。))

#shadowheader(3,原理)
Stable Diffusionなどの拡散生成モデルの理論は、2つの過程によって構成される。
-''拡散過程''
モデル学習時に元の画像に少しずつノイズを加えていく過程。ノイズを加えるだけなので、理論的にも扱いやすい非常にシンプルなアルゴリズムで実装されている。
-''生成過程''
完全なノイズから少しずつノイズを除去して画像を生成していく過程。ノイズを除去する機能をニューラルネットワーク(=モデル)で学習している。

生成過程について理論的な研究が進められていて、現在は2種類の微分方程式「''PF-ODE''」「''reverse-time SDE''」のいずれかに沿って生成することが多い。(これらの微分方程式については複雑すぎるのでここでは詳しく解説しない)
これらの微分方程式を数値的に近似して解く方法が''サンプラー''。お馴染みのEuler, Heun, PLMS, DPM, DPM++, UniPCなども、その正体はPF-ODEあるいはreverse-time SDEを数値的に解くアルゴリズム。

ある完全なノイズから出発して、PF-ODEによって画像を生成するまでの連続した軌跡のことを''PF'' (Probability Flow)という。
(PF-ODEで画像検索してイメージを掴んでもらいたい)

「同じPFに属する値からは同じ画像が生成されるはず」という前提に基づいて学習されたモデルが''CM'' (Consistency Model)。
-このように学習することで、ノイズが小さいときの予測結果と、ノイズが大きいときの予測結果が一致するようになり、結果的にノイズが大きいときにも高い品質で画像を生成できるようになる。
-「ノイズが小さいときの予測結果」には学習対象のモデルではなく、既存のモデル(=教師モデル)を使う。このように、既存のモデルを使って新しいモデルを学習する方法のことを「''蒸留''」という。
-「同じ画像が生成される」という部分を''Consistency'' (=一貫性)と表現している模様。
-この技術は2023年3月に公開されたが、いまいち話題にならないまま忘れられてしまった。

Consistency ModelをLDM(=Stable Diffusion)((Stable Diffusionなどの''LDM'' (Latent Diffusion Model)は、画像そのものにノイズを加えるのではなく、VAEでエンコードされた''潜在ベクトル''(Latent)に対してノイズを加えるという原理で動いている。))に適用したものが''LCM'' (Latent Consistency Model)。
-LCMは2023年10月に公開されてじわじわと話題になって、現在はリアルタイム生成に活用されている。

*としあき達の反応 [#m8e26e7b]
すごく沢山の意見があるので、ざっくりまとめると、下記の感じ
(とりあえず、こんな感じですということを知ってもらうための'23/11月リリース時点の傾向です。大勢は今後変わります。)

-LCMに対する反応
--たくさん画像生成する人
「早くていいやん!」
--生成品質を求める人
「なんとか、品質下げんで済む方法はないかな?」「LCM4step&#10005;2回のガチャをするより、他のsamplerで8step&#10005;1回すれば良いのでわ?」
--学習メインの人
「sd-scriptsに対する[[PR]]が来ているけど、学習は品質が大事なので、安易に導入するのはちょっと・・・(意訳)」by kohya氏

#fold(もっと見る){{
>28無念Nameとしあき23/11/10(金)12:04:19 ID:Dpr61MtsNo.1155757225
&color(#789922){昨日みたときLCMのlora?くらいしか理解してなかったけど};
&color(#789922){>便利そうなので注目しておくのですよ…};
&color(#789922){> https://huggingface.co/blog/lcm_lora [link]};
正しく要約できるかはまた課題として こうしてざっくり英文記事の要約を出してもらえるのは凄く便利だよなあ

>76無念Nameとしあき23/11/10(金)13:51:45 ID:YyG4B9XENo.1155783218+
&color(#789922){>多分だけどSDXLとかがデカすぎるからモデルを蒸留(?)することで4ステップで十分な品質の画像が生成出来るようになるよ! 速度10倍くらいになるよ!};
今まではモデルの蒸留作業必要だったけど今回はLoraを使うだけでモデルをlcm化できるというすごいもの
最新のcomfyUIならlcm用のサンプラーもついてるのでお手軽にためせる
注意点としてCFGは1か2にする

>83無念Nameとしあき23/11/10(金)14:05:40 ID:Dpr61MtsNo.1155785996そうだねx1
&color(#789922){>今まではモデルの蒸留作業必要だったけど今回はLoraを使うだけでモデルをlcm化できるというすごいもの};
&color(#789922){>最新のcomfyUIならlcm用のサンプラーもついてるのでお手軽にためせる};
LCMのマッピングとかの情報をLoRaって感じで外だしにしてるって感じなのかな? 
最近は1111webuiよりcomfyUIのほうが最新技術の対応が早いね

>8無念Nameとしあき23/11/10(金)18:38:14 ID:dd3ZXL8YNo.1155848222そうだねx3
たておつ
LCMは下地を出すのに良かった
4枚7秒

>16無念Nameとしあき23/11/10(金)18:45:12 ID:xIO2etT.No.1155850334
LCMのloraの学習コードさえ出してくれたらよく使うモデルでLCM化lora作っておくってできるんだが…

>138無念Nameとしあき23/11/10(金)20:45:05 ID:8Sij1mXUNo.1155893697そうだねx1
たておつ
https://huggingface.co/blog/lcm_lora [link]
https://huggingface.co/latent-consistency/lcm-lora-sdv1-5 [link]
ステップ8ガイダンススケール1
ガイダンススケール1だとネガティブプロンプト無効ってことで困る時は困ると思うし絵作りの方法が全然変わってきてしまう
2まで上げる範囲でネガティブがどう効いてくるのが探り探りだ
数ステップ数秒でまともな絵がでてくるのは衝撃的だ

>194無念Nameとしあき23/11/11(土)15:15:21 ID:u0XH.ABMNo.1156127477そうだねx2
たておつpussycat
Latent Consistency Modelの2-8step生成は非力なPCで輝くはずだけど
今のところLCMを使えるComfyUIでは--directmlと--lowvramは併用できない感じで
VRAM不足のうちでは--cpuを選ばざるをえない
A1111 webuiのDirectML版の方は生成できてるのでこっちがLCMに対応するのを待つ形になる
}}

*実装・利用方法 [#had4ad60]
**Stable diffusion web UIにおけるLCMの使用(1.8.0以上) [#ufbf606c]

'24/03/02にリリースされた WebUI 1.8.0より実装が組み込まれているので、拡張のインストール等は不要。
1.8.0より前のバージョンを使っている場合は、「[[Web UI 1.8.0以前のバージョンを使っている場合>#mc9a24d4]]」を参考のこと

+LCM LoraをダウンロードしてLoraフォルダに配置します
[[latent-consistency/lcm-lora-sdv1-5 at main (huggingface.co)>https://huggingface.co/latent-consistency/lcm-lora-sdv1-5/tree/main]]
pytorch_lora_weights.safetensorsをダウンロードしてLoraフォルダに配置してください
+実際に生成する
特別なタブページとかは無く、いつもどおりの生成する感じ。下記のように設定する。
①<lora:pytorch_lora_weights:1>をプロンプトに入れて指定します
②Sampling methodを「LCM」に設定し、Stepsを6~8程度にします
③CFG Scaleを1~2に設定します
④生成(Generate)ボタンを押す
※いつも通りのプロンプト、モデル、Loraを利用できます

実のところsamplerを追加しなくてもLoRAさえ利用すれば
Euler aなどでも低Steps(≒高速化)で出力できる様だ

参考①
>https://pc.watch.impress.co.jp/docs/column/nishikawa/1547611.html
の後半 >入稿後、AUTOMATIC1111にSampling method: LCMを追加する方法が分かった

参考②
>https://github.com/continue-revolution/sd-webui-animatediff/tree/master#lcm
>I provide a "gift" to everyone who update this extension to >= v1.12.1 - you will find LCM sampler in the normal place you select samplers in WebUI. You can generate images / videos within 6-8 steps if you
>select Euler A / Euler / LCM sampler (other samplers may also work, subject to further experiments)
>use LCM LoRA
>https://civitai.com/models/195519/lcm-lora-weights-stable-diffusion-acceleration-module
>use a low CFG denoising strength (1-2 is recommended)

**LCMサンプラーを使用しない LCM LoRAの出力設定 [#rfa9717b]
「LCM LoRAは高速なんだけど、絵柄がLCM LoRAに引っ張られて雰囲気がかなり変わっちゃうよね…」
という欠点の緩和に役立つ設定。
関連記事リンクにもあるが、下記の内容が詳しい。推奨値などの説明もあるので一読をおすすめ。
[[【西川和久の不定期コラム】Stable Diffusion高速化の決定版登場!?品質落とさず制限もほぼなしで2~3倍速に - PC Watch>https://pc.watch.impress.co.jp/docs/column/nishikawa/1547611.html]]

標準出力よりRTX3060 12GBで約3割の生成時間短縮効果が得られた
・LCM LoRAを強度0.3で使用
  Civitai LCM-LoRA Weights - Stable Diffusion Acceleration Module(上のhuggingfaceと同じ物)
  https://civitai.com/models/195519?modelVersionId=225222
・<lora:LCM_LoRA_Weights_SD15:0.3>
・Sampling method : DPM++ 2S a Karras
・CFG Scale : 2.5~3程度
・Step 6~8程度
・hiresfix step : 0(生成と同数を自動設定)
・hiresfix Sampling method : same (更に早くするならEuler a)
ステップ減少分書込みが少なくなるのは[[flat>https://civitai.com/models/81291/flat2]]のマイナス適用や同系LoRAを使用して補正可能

**Web UI 1.8.0以前のバージョンを使っている場合 [#mc9a24d4]

LCMを使うには、下記いずれかの方法による。どちらも最近更新されていないため、素直にWeb UIを更新したほうがよさそう。

#fold(拡張機能sd-webui-lcmを導入する方法){{
https://github.com/0xbitches/sd-webui-lcm
--diffusers v0.23.0へ手動更新が必要。

1. stable-diffusion-webui/venv/Scriptsに移動し、[[venv]]を有効化する。
2. pip show diffusers を実行し、現在のバージョンを確認する
3. 入ってなかったりバージョンが古い場合は、pip3 install --upgrade diffusers を実行してインストールする
4. pip show diffusers を実行し、現在のバージョンを確認して更新されてるかチェック
5. 入ってたらvenvを抜けて普通にwebuiを起動
6. webuiでLCMタブがあればOK

- タブ出てこないんだけど→stable-diffusion-webui\venv\Lib\site-packages に古いdiffusersがあったら消してやり直す
}}

#fold(LCM samplerを追加する拡張をインストールする方法){{{{
[[GitHub - light-and-ray/sd-webui-lcm-sampler: LCM Sampler for sd-webui>https://github.com/light-and-ray/sd-webui-lcm-sampler]]

Web UI 1.8.0で取り込まれたものとほぼ同様なので、利用方法は上記参照。
ただし、Sampling methodは「LCM」ではなく「LCM Test」。

#fold(手動で改造する場合){{{
手動で改造する場合
&color(red){※ファイルを書き換えますので必要に応じてバックアップを取ってください};
++k_diffusionにsamplerを追加する
以下のファイルを書き換えます
&color(blue){stable-diffusion-webui\repositories\k-diffusion\k_diffusion\sampling.py};
ファイルの最後に次のコードを追加してください
#pre{{
@torch.no_grad()
def sample_lcm(model, x, sigmas, extra_args=None, callback=None, disable=None, noise_sampler=None):
    extra_args = {} if extra_args is None else extra_args
    noise_sampler = default_noise_sampler(x) if noise_sampler is None else noise_sampler
    s_in = x.new_ones([x.shape[0]])
    for i in trange(len(sigmas) - 1, disable=disable):
        denoised = model(x, sigmas[i] * s_in, **extra_args)
        if callback is not None:
            callback({'x': x, 'i': i, 'sigma': sigmas[i], 'sigma_hat': sigmas[i], 'denoised': denoised})

        x = denoised
        if sigmas[i + 1] > 0:
            x += sigmas[i + 1] * noise_sampler(sigmas[i], sigmas[i + 1])
    return x
}}
++WebUIでsamplerを呼び出せるようにする
以下のファイルを書き換えます
&color(blue){stable-diffusion-webui\modules\sd_samplers_kdiffusion.py};
ファイルの39行目(Restartの下)あたりに追加してください
#pre{{
    ('LCM Test', 'sample_lcm', ['lcm'], {}),
}}
++WebUIを再起動する
}}}
}}}}

*関連技術 [#pf868d99]
LCM同様に高速化出来る技術がいくつかあるのでざっくり紹介
概ねの性質はLCMとほぼ同じで高速化出来るが代わりにCFGなどを下げる必要があり、ネガティブプロンプトなどが通りにくくなる。
モデルによって絵柄への影響など相性があるのでよく使うモデルと相性の良いものを使おう。
メジャーなモデル(Ponyなど)は専用にチューンされたLoraがある事もある。
個々の使い方は別途ググって欲しい。

-[[Turbo-LoRA>https://civitai.com/models/215485/sdxl-turbo-lora-stable-diffusion-xl-faster-than-light]]

-[[Lightning>https://huggingface.co/ByteDance/SDXL-Lightning/tree/main]]

-[[Hyper-SD>https://huggingface.co/ByteDance/Hyper-SD]]
他の技術より若干新しい高速化。それ故か比較的多くのモデルと相性良く使える傾向にある。(ただし他のLoraまで絡むと絵柄が崩壊したりすることもあるので崩壊しがちなら外そう)
技術的にもByteDanceリポジトリの中で一押しなのかFlux.1やSD3向けのLoraもある(3.5はここには残念ながらない)。
CFGと名前についてるモデルは通常のサンプラーと通常のCFG(7付近)で使えるため比較的扱いやすいか?
ただし特にCFGモデル(通常モデル同様にCFG7付近まで挙げられネガティブプロンプトが効きやすい)はLCMに比べて必要ステップが多く必要になりやすい。(実際に推奨されてる数字より1~2ステップは多く入力したほうが良い結果がでやすい)

*関連記事リンク [#laf4abbb]
**記事 [#l1a13104]
-2023/11/9 [[SDXL in 4 steps with Latent Consistency LoRAs>https://huggingface.co/blog/lcm_lora]]
-2023/11/9 [[PC Watch:Stable Diffusion高速化技術続々登場!TensorRT、SSD-1B、LCMなどを試してみる>https://pc.watch.impress.co.jp/docs/column/nishikawa/1545342.html]]
-2023/11/13 [[ASCII.jp:爆速化する画像生成AI。0.5秒で4枚出力、リアルタイム生成できるレベルに>https://ascii.jp/elem/000/004/168/4168599/]]
-2023/11/20 [[Stable Diffusion高速化の決定版登場!?品質落とさず制限もほぼなしで2~3倍速に>https://pc.watch.impress.co.jp/docs/column/nishikawa/1547611.html]]

**論文 [#l6854403]
-[[Consistency Models>https://arxiv.org/abs/2303.01469]]
-[[Latent Consistency Models>https://arxiv.org/abs/2310.04378]]
-[[LCM-LoRA>https://arxiv.org/abs/2311.05556]]