新しくなって色々話題のSDXL 0.9(Stable Diffusion XL 0.9)をローカル環境で動かす方法を紹介したいと思います。
SD 2.xシリーズはユーザーからの評価も散々でしたが、SDXLはかなり好感触です!
🌐SDXL 0.9 - Stability AI
https://stability.ai/blog/sdxl-09-stable-diffusion
📌利用した環境
今回は、以下のような環境でSDXLを試しました。
Stability.AIの公式説明では、最低8GBのVRAMが必要とされていますが、今回利用するComfyUIは「CPUでの実行」にも対応しているようなので、もしかするとGPUを持っていなくても動作するかもしれません。(CPUでの動作は未検証)
・Windows 11 Pro Ver 22H2
・NVIDIA TITAN RTX (VRAM 24GB)
・NVIDIA Driver Version 535.98
📌SDXL 0.9を利用する前に
SDXL 0.9のモデルファイル(xl-baseとxl-refinerの2モデル)は、限られた期間中(正式版の1.0が出るまでの間?)に研究目的でのみ提供されています。そのため、モデルファイルを入手するためには、HuggingFaceにログインして利用申請を行う必要があります。申請内容のチェックは人間が行っているようなので、申請が承認されるまではしばらく時間がかかります。(数週間?)
🌐SDXL 0.9 base model - HuggingFace
https://huggingface.co/stabilityai/stable-diffusion-xl-base-0.9
🌐SDXL 0.9 refiner model - HuggingFace
https://huggingface.co/stabilityai/stable-diffusion-xl-refiner-0.9
ただ、数日前にSDXL 0.9のモデルがリークしたこともあり、もしかすると近々SDXL 0.9のモデルが一般公開に切り替えられる可能性もあります。また、数ヶ月以内に正式版のSDXL 1.0が出てくると思うので、こちらは誰でもダウンロードできるようになる可能性が高いと思われます。
📌SDXL 0.9をローカル環境で動かす方法
2023/7/8時点で、SDXL 0.9をローカル環境で動かす方法は次のどちらかになると思われます。いずれは、AUTOMATIC1111氏のSD-WebUIのような有名なアプリからも利用できるようになると思いますが、現時点ではSD-WebUIは未対応となっています。
・Pythonプログラムを作って利用
・ComfyUIから利用
今回は、SDXL 0.9に正式対応している「ComfyUI」経由で利用します。
ComfyUIは「ノードベース」でモジュールをつなげて処理フローを作るアプリになっています。Blenderのシェーダーノードや、Houdiniなどでノードベースの処理に慣れている人は直感的に利用できるかもしれませんね。
ComfyUIは、SDXLの処理の流れを少しは知っておく必要があるので、全くの初心者の方にとっては少しハードルが高いかもしれません。(内部構造を知らなくても、とりあえず以降の手順で進めればSDXL 0.9をプロンプトを変えながら使う事はできると思います)
🌐ComfyUI - GitHub
https://github.com/comfyanonymous/ComfyUI
📌ComfyUIの環境作成
ComfyUIは「Windowsでそのまま動かせるポータブル環境」も提供されているので、ファイルをダウンロードして展開するだけで利用できるようになります。個別にセットアップする方法もありますが、今回は最も手軽な「Windows用のポータブル環境をそのまま使う」方法で手順を説明しようと思います。
🧿1. ポータブル版ComfyUIの導入
以下のReleasesのURLから、ComfyUIをダウンロードします。
https://github.com/comfyanonymous/ComfyUI/releases/tag/latest
古いバージョンを含めいくつかファイルがありますが、とりあえず最新版のファイルを選んでおけばOKです。今回は、2023/7/8時点で最新の「ComfyUI_windows_portable_nvidia_cu118_or_cpu.7z(以下URL)」を選択しました。
https://github.com/comfyanonymous/ComfyUI/releases/download/latest/ComfyUI_windows_portable_nvidia_cu118_or_cpu.7z
🧿2. ダウンロードしたファイルの展開
ダウンロードしたファイルは「7-zip」という形式で圧縮されているため、7-zipに対応したソフトで任意の場所に展開します。(例えば、C:\SDXLフォルダ配下など)
7-zipが展開できない場合は、以下URLから7-zipをダウンロードしてインストールすると、7-zip形式のファイル(*.7z)を展開できるようになります。
https://www.7-zip.org/
🧿3. SDXL 0.9のモデルファイルをコピー
HuggingFaceからSDXL 0.9のモデルファイルをダウンロード(利用申請して承認した後でないとダウンロードできない)して、上記で展開したComfyUIのcheckpointsフォルダにコピーします。
具体的には、以下2つのモデルファイルを、「ComfyUI\models\checkpoints」フォルダ配下にコピーします。
・sd_xl_base_0.9.safetensors
・sd_xl_refiner_0.9.safetensors
これで、ComfyUIのセットアップは完了です。
📌ComfyUIの起動方法
展開したフォルダ直下に、ComfyUI起動用のバッチファイル(run_nvidia_gpu.batなど)が存在するので、このバッチファイルをダブルクリックして実行すれば自動でComfyUIが起動します。
バッチファイルは2種類存在しますが、NVIDIAのGPUを持っているかどうかで実行するファイルが変わります。
・NVIDIAのGPUを持っている場合 → run_nvidia_gpu.bat を実行
・それ以外(CPUで実行) → run_cpu.bat を実行
📌ComfyUIでSDXL 0.9を使う方法
ComfyUIを起動しても、ここからどうすれば良いか分からない…というケースが多いと思います。ComfyUIは、処理をノードでつないで定義していくのですが、何をどうすれば良いか分からないと思います。そこで、私の方で「SDXL 0.9用のフロー」を事前に作成しました。これを使えば、細かいことは分からなくても、簡単にSDXL 0.9を利用できると思います。
以下のGoogle DriveのURLから、「SDXL-flow.json」ファイルを任意のフォルダにダウンロードしてください。
https://drive.google.com/file/d/15MttQYp2IgMXNp0VfYWul27er11pUMO2/view?usp=sharing
ダウンロードできたら、ComfyUIの画面に表示されている「Load」ボタンをクリックして、上記のjsonファイルをロードしてください。これで、以下のようなSDXL 0.9用のフローが読み込めると思います。(読み込んだ直後は生成した画像は表示されません)
後は、「Queue Prompt」ボタンをクリックするか、「Ctrl+Enter」キーで画像を生成できます。(処理中は、処理をしている部分のノードが緑枠で表示されます)
処理が完了すれば、「ComfyUI\outputs」フォルダ配下に最終的な画像を出力するようにしています。
参考までに、私の環境では上記フローを約22~24秒くらいで実行できました。(モデルのロード時間は除く)
📌プロンプトや設定の変更方法
プロンプト(Positive/Negative)を変更したい場合は、フロー左側にある、水色の「Positive Prompt」と、紫色の「Negative Prompt」の内容を変更してください。
画像サイズは「Image Size」ノードで変更できるようにしています。
他にも、サンプリングのアルゴリズムやステップ数などを、KSamplerノードで変更できます。色々触って動かなくなっても、再び「Load」でjsonファイルを読み込み直せば元通りになるので、色々設定など触ってみてくださいね。
📌SDXL 0.9の大まかな処理の流れ
従来のStable Diffusionは「1つのモデル」だけで処理をすることが多かったと思いますが、SDXL 0.9では「baseモデルで生成した結果→refinerモデルで仕上げ処理」をする感じになります。(baseモデルの出力をそのまま使っても良いですが、refinerモデルを通すことで更に品質がアップします)
そのため、ComfyUIのフローも「baseモデルでベースになる画像を生成」して、その結果を更に「refinerモデルに渡して処理」するような感じのフローにしています。
refinerモデルは、従来で言うところの「img2imgのような処理」だと考えるとわかりやすいかもしれませんね。
SDXL 0.9のモデルファイルを使えるようになった方は、是非試してみてください🤗