潜在一貫性LoRAsによる4つのステップでのSDXL
潜在一貫性ローアによる4つのステップでのSDXL
潜在的一貫性モデル(LCM)は、ステーブルディフュージョン(またはSDXL)を使用してイメージを生成するために必要なステップ数を減らす方法です。オリジナルモデルを別のバージョンに蒸留し、元の25〜50ステップではなく4〜8ステップ(少ない)だけを必要とするようにします。蒸留は、新しいモデルを使用してソースモデルからの出力を再現しようとするトレーニング手順の一種です。蒸留されたモデルは、小さく設計される場合があります(これがDistilBERTや最近リリースされたDistil-Whisperの場合)または、この場合のように実行に必要なステップ数を減らします。これは通常、膨大な量のデータ、忍耐力、およびいくつかのGPUが必要な長時間かかる高コストのプロセスです。
それが今日までの現状でした!
私たちは、Stable DiffusionとSDXLを、まるでLCMプロセスを使用して蒸留されたかのように、速くする新しい方法を発表できることを喜ばしく思います!3090で7秒の代わりに約1秒、Macで10倍速くSDXLモデルを実行する、というのはどうですか?詳細は以下をご覧ください!
目次
- メソッドの概要
- なぜこれが重要なのか
- SDXL LCM LoRAsによる高速推論
- ベンチマーク
- 今日リリースされたLCM LoRAsとモデル
- ボーナス:通常のSDXL LoRAsとの組み合わせ
- LCM LoRAsのトレーニング方法
- リソース
- クレジット
方法の概要
では、そのトリックは何でしょうか?潜在的な一貫性蒸留には、各モデルを個別に蒸留する必要があります。LCM LoRAの中核となるアイディアは、フルモデルではなく、LoRAレイヤーとして知られる一部の小さなアダプターのみをトレーニングすることです。その結果得られたLoRAsは、それぞれ別個に蒸留することなく、任意の微調整されたモデルに適用することができます。これが実際にどのように見えるかを見たくなった場合は、次のセクションに進んで推論コードを試してみてください。自分自身のLoRAsをトレーニングしたい場合は、次のプロセスを使用します:
- 武士と鬼の世界に入りましょう:GFN Thursdayがカプコンの「鬼武者」をクラウドにもたらします
- 人間と同じように聞くAIモデル「SALMONN」
- AVCLabsフォトエンハンサーAIのレビュー:最高のフォトエンハンサー?
- ハブから利用可能な教師モデルを選択します。たとえば、SDXL (base)や、お好みのチューニング済みやドリームブーストバージョンを使用できます。
- LCM LoRAをトレーニングします。LoRAは、完全なモデルのチューニングよりもはるかに安価に実現できる、性能効率の高いチューニングであるPEFTの一種です。PEFTの詳細については、このブログ記事またはdiffusers LoRAドキュメントをご覧ください。
- 任意のSDXLディフュージョンモデルとLCMスケジューラーを使用してLoRAを使用します。ビンゴ!わずか数ステップで高品質な推論が得られます。
プロセスの詳細については、当社の論文をダウンロードしてください。
なぜこれが重要なのか?
安定したディフュージョンとSDXLの高速推論は、新しいユースケースやワークフローを可能にします。いくつかの例を挙げます。
- アクセシビリティ:最新のハードウェアにアクセスできない人でも、生成ツールを効果的に利用できます。
- より高速な反復:時間の一部でさらに多くの画像や複数のバリアントを取得します。これは、個人用または商業用途のアーティストや研究者にとって素晴らしいものです。
- 異なるアクセラレーター(CPUを含む)でプロダクションワークロードが可能になることもあります。
- より安価な画像生成サービス。
話している速度の違いを測定するために、M1 Mac上でSDXL(base)を使用して単一の1024×1024画像を生成するのに約1分かかります。LCM LoRAを使用すると、わずか6秒(4ステップ)で素晴らしい結果が得られます。これは桁違いに高速であり、結果を待つ必要がないことは大きな変化です。4090を使用すると、ほぼ即座の応答(1秒未満)が得られます。これにより、リアルタイムイベントが必要なアプリケーションでSDXLを使用することができます。
SDXL LCM LoRAによる高速推論
本日リリースされたdiffusers
のバージョンでは、LCM LoRAの使用が非常に簡単です:
from diffusers import DiffusionPipeline, LCMSchedulerimport torchmodel_id = "stabilityai/stable-diffusion-xl-base-1.0"lcm_lora_id = "latent-consistency/lcm-lora-sdxl"pipe = DiffusionPipeline.from_pretrained(model_id, variant="fp16")pipe.load_lora_weights(lcm_lora_id)pipe.scheduler = LCMScheduler.from_config(pipe.scheduler.config)pipe.to(device="cuda", dtype=torch.float16)prompt = "close-up photography of old man standing in the rain at night, in a street lit by lamps, leica 35mm summilux"images = pipe( prompt=prompt, num_inference_steps=4, guidance_scale=1,).images[0]
コードのポイントは次のとおりです:
- SDXL 1.0ベースモデルを使用して標準ディフュージョンパイプラインをインスタンス化します。
- LCM LoRAを適用します。
- 潜在的な一貫性モデルで使用されるLCMSchedulerにスケジューラを変更します。
- それだけです!
これにより、次のフル解像度の画像が生成されます:
LCM LoRAを使用した4ステップでSDXLで生成した画像。
品質の比較
ステップ数が生成の品質にどのように影響するかを見てみましょう。次のコードは、1から8までの合計推論ステップで画像を生成します:
images = []for steps in range(8): generator = torch.Generator(device=pipe.device).manual_seed(1337) image = pipe( prompt=prompt, num_inference_steps=steps+1, guidance_scale=1, generator=generator, ).images[0] images.append(image)
これらはグリッドで表示される8つの画像です:
1から8ステップのLCM LoRA世代。
1ステップだけを使用すると、特徴がなくテクスチャが欠けた近似的な形状が生成されます。しかし、結果はすぐに改善され、通常4〜6ステップで非常に満足のいくものになります。個人的には、前のテストの8ステップの画像が飽和しすぎて「カートゥニー」すぎると感じるので、この例では5と6ステップの間で選ぶことが多いです。生成は非常に高速なので、たった4ステップだけでさまざまなバリエーションを作成し、好みのものを選択して、必要に応じて2つ以上のステップと洗練されたプロンプトを使用して反復することができます。
ガイダンススケールとネガティブプロンプト
前の例では、guidance_scale
に1
を使用しましたが、これは実質的に無効にします。これはほとんどのプロンプトに適しており、最も速いですが、ネガティブプロンプトは無視されます。ガイダンススケールを1
から2
の間の値に設定することで、ネガティブプロンプトを使用することもできますが、大きい値は機能しないことがわかっています。
品質とベースSDXL
品質の点で、これは標準のSDXLパイプラインと比較してどうなのでしょうか?例を見てみましょう!
LoRAの重みをアンロードし、デフォルトのスケジューラに切り替えることで、パイプラインを簡単に標準のSDXLパイプラインに戻すことができます:
from diffusers import EulerDiscreteSchedulerpipe.unload_lora_weights()pipe.scheduler = EulerDiscreteScheduler.from_config(pipe.scheduler.config)
その後、通常のSDXLの推論を実行できます。さまざまなステップ数で結果を収集します:
images = []for steps in (1, 4, 8, 15, 20, 25, 30, 50): generator = torch.Generator(device=pipe.device).manual_seed(1337) image = pipe( prompt=prompt, num_inference_steps=steps, generator=generator, ).images[0] images.append(image)
SDXLパイプラインの結果(同じプロンプトとランダムシード)、1、4、8、15、20、25、30、50ステップを使用しています。
ご覧のように、この例では画像は20ステップまでほとんど使い物にならず、品質はステップ数が増えるごとに明らかに向上しています。最終画像のディテールは素晴らしいですが、そこに到達するまでには50ステップかかりました。
他のモデルでのLCM LoRA
このテクニックは、他のファインチューニングされたSDXLやStable Diffusionモデルに対しても同様に有効です。デモンストレーションとして、Dreamboothを使用してStable Diffusion v1.5からファインチューニングされたcollage-diffusion
モデルでの推論の実行方法を見てみましょう。
コードは前の例で見たものと似ています。ファインチューニングされたモデルをロードし、Stable Diffusion v1.5向けの適切なLCM LoRAをロードします。
from diffusers import DiffusionPipeline, LCMSchedulerimport torchmodel_id = "wavymulder/collage-diffusion"lcm_lora_id = "latent-consistency/lcm-lora-sdv1-5"pipe = DiffusionPipeline.from_pretrained(model_id, variant="fp16")pipe.scheduler = LCMScheduler.from_config(pipe.scheduler.config)pipe.load_lora_weights(lcm_lora_id)pipe.to(device="cuda", dtype=torch.float16)prompt = "コラージュスタイルの子供が星のある夜空を見つめながら座っています"generator = torch.Generator(device=pipe.device).manual_seed(1337)images = pipe( prompt=prompt, generator=generator, negative_prompt=negative_prompt, num_inference_steps=4, guidance_scale=1,).images[0]images
LCM LoRAテクニックとDreambooth Stable Diffusion v1.5モデルを使用した4ステップの推論が可能です。
Full Diffusers Integration
LCMをdiffusers
に統合することで、diffusersツールボックスに含まれる多くの機能やワークフローを活用することができます。例えば:
- Apple Silicon搭載のMacでの箱から出して使える
mps
サポート。 - フラッシュアテンションや
torch.compile()
などのメモリとパフォーマンスの最適化。 - モデルオフロードを含む、低RAM環境向けの追加のメモリ節約戦略。
- ControlNetや画像から画像へのワークフロー。
- トレーニングと微調整スクリプト。
ベンチマーク
このセクションは網羅的なものではなく、さまざまなコンピュータ上で達成した生成速度を示すものです。画像生成をこんなに簡単に試せることは、何よりも解放感があります。
これらのテストはすべてバッチサイズ1で実行され、このスクリプト(Sayak Paul作)を使用しました。
A100などの大容量のカードでは、通常、複数の画像を同時に生成する場合にパフォーマンスが大幅に向上します。これは通常、本番ワークロードの場合です。
本日リリースのLCM LoRAとモデル
-
Latent Consistency Models LoRAs Collection
latent-consistency/lcm-lora-sdxl
。SDXL 1.0ベースのLCM LoRA(上記の例に示すように)。latent-consistency/lcm-lora-sdv1-5
。Stable Diffusion 1.5向けのLCM LoRA。latent-consistency/lcm-lora-ssd-1b
。サイズが元のSDXLの50%小さく、60%速い蒸留SDXLモデルであるsegmind/SSD-1B
向けのLCM LoRA。
-
latent-consistency/lcm-sdxl
。SDXL 1.0ベースから派生した完全な微調整の一貫性モデル。 -
latent-consistency/lcm-ssd-1b
。segmind/SSD-1B
から派生した完全な微調整の一貫性モデル。
ボーナス:LCM LoRAを通常のSDXL LoRAと組み合わせる
LCM LoRAsを通常のSDXL LoRAsと組み合わせるためにdiffusers + PEFT integrationを使用すると、LCM推論をわずか4ステップで実行するスーパーパワーを与えることができます。
ここでは、CiroN2022/toy_face
LoRAとLCM LoRAを組み合わせます:
from diffusers import DiffusionPipeline, LCMSchedulerimport torchmodel_id = "stabilityai/stable-diffusion-xl-base-1.0"lcm_lora_id = "latent-consistency/lcm-lora-sdxl"pipe = DiffusionPipeline.from_pretrained(model_id, variant="fp16")pipe.scheduler = LCMScheduler.from_config(pipe.scheduler.config)pipe.load_lora_weights(lcm_lora_id)pipe.load_lora_weights("CiroN2022/toy-face", weight_name="toy_face_sdxl.safetensors", adapter_name="toy")pipe.set_adapters(["lora", "toy"], adapter_weights=[1.0, 0.8])pipe.to(device="cuda", dtype=torch.float16)prompt = "a toy_face man"negative_prompt = "blurry, low quality, render, 3D, oversaturated"images = pipe( prompt=prompt, negative_prompt=negative_prompt, num_inference_steps=4, guidance_scale=0.5,).images[0]images
高速(4ステップ)推論のために組み合わせた標準のLoRAsとLCM LoRAs。
LoRAsのアイデアを探索するためのアイデアが必要ですか?コミュニティによって作成された驚くべきクリエーションをテストするためのLoRA the Explorer(LCMバージョン)スペースをチェックして、インスピレーションを得てください!
LCMモデルとLoRAsのトレーニング方法
本日のdiffusers
リリースの一環として、LCMチームの著者との共同開発によるトレーニングおよびファインチューニングスクリプトを提供しています。これにより、ユーザーは以下の操作が可能です:
- Stable DiffusionまたはSDXLモデルの完全なモデル蒸留を、Laionなどの大規模なデータセットで実行します。
- より簡単なプロセスであるLCM LoRAsのトレーニング。この投稿で示したように、これにより蒸留トレーニングを経ずにStable Diffusionで高速推論を実行できるようになります。
詳細については、リポジトリのSDXLまたはStable Diffusionの手順をご確認ください。
これらのスクリプトがコミュニティの皆様のプロジェクトで使用される場合は、ぜひお知らせください!
リソース
-
Demos
-
トレーニングスクリプト
クレジット
驚くべきレイテント一貫性モデルの作業は、LCMチームによって行われました。彼らのコード、レポート、論文を必ずチェックしてください。このプロジェクトは、diffusersチーム、LCMチーム、およびコミュニティの貢献者Daniel Guのコラボレーションです。私たちは、オープンソースAIの有効な力を証明するものであり、研究者、実践者、ティンカラーが新しいアイデアを探求し、協力するための基盤となると信じています。また、@madebyollin
には、コミュニティへの継続的な貢献、私たちのトレーニングスクリプトで使用するfloat16
オートエンコーダーを含めて、感謝の意を表したいと思います。
We will continue to update VoAGI; if you have any questions or suggestions, please contact us!
Was this article helpful?
93 out of 132 found this helpful
Related articles