メインコンテンツへスキップ
見出し画像

Windows PCでStable Cascadeの生成を試してみる

    Last update 2-25-2024
    ※(2-25) 本記事が始まる前に、別の方法を紹介しているのでご覧ください。
    ※VRAM 6GB以上、推奨12GB以上です。本記事では実際の手順を示していますが、通常の記事よりも少しだけ説明を省略しています。



     ComfyUIで生成する記事を公開しました。LargeモデルはVRAM 8GB、Liteモデルは6GBで実行できそうです。

     扱いやすいGUIを紹介します(要VRAM 12GB)。



    ▼ 本記事について

    概要

     Stability AIは日本時間の2-13-2024に、新しいText to Image(T2I)モデルのStable Cascadeを発表し、翌日にはモデルとサンプルコード(スクリプト)が公開されました。VRAM使用量は少し多め(16GB超)でしたが、hakomikan氏が改良したコードで節約ができるようですので、さっそく試してみます。

    使用するコードについて

     基本的に、下記の記事にあるコードを使用します。こちらに目を通して事足りる方は、本記事は必要ないと思います。そうではない方も、記事の内容をよく確認してください。

    Stable Cascadeについて

     名称がStable Diffusionではない理由はアーキテクチャが異なるためです。つまり、Stable Diffusionの後継バージョンではありません。

    Stable Cascadeのご紹介
    https://ja.stability.ai/blog/stable-cascade 

    Stable Cascade用のサンプルコード(スクリプト)
    https://github.com/Stability-AI/StableCascade 

    Stable Cascadeモデル(Diffusers及びsafetensors)
    https://huggingface.co/stabilityai/stable-cascade 



    ▼ 関連記事等

     他の方の、Stable Cascadeに関する記事等です。早めに紹介しておきたいので、ここに挟みます。

     下記は実行例等です。VRAM使用量が16GBを超えるケースが多いようです。Google Colabの場合は、足りないとエラーを出して処理を停止します。Windowsの場合は、足りないと共有GPUメモリにはみ出て実行が遅くなるか、メモリ不足で処理を停止します。

    ComfyUIを利用(VRAM 12GBなら余裕?)

    Google Colabを利用(無料枠で実行可能)

    Google Colabを利用(有料版でA100が必要)

    WSLを利用

    Windowsを利用(1)

    Windowsを利用(2)

    Stable Cascade One-Click Installer
    https://github.com/EtienneDosSantos/stable-cascade-one-click-installer 



    ▼ 準備1

    インストール

     動作の確認は、VRAM 12GBのGeforce RTX 3060、Python 3.10、Git、CUDA Toolkit 11.8が導入されたPCで行いました。作業ディレクトリを「C:\aiwork」としていますので、適宜読み替えてください。

     コマンド プロンプトを開いて、下記のコマンドを順番に実行します。途中、renコマンドでディレクトリ名を変更して、Pythonで専用の仮想環境を作成しています。最後の行で、数GB程度のダウンロードが発生します。

    cd  \aiwork
    git clone https://github.com/Stability-AI/StableCascade
    ren StableCascade stable-cascade-test
    cd stable-cascade-test
    
    python -m venv venv
    venv\Scripts\activate
    python -m pip install --upgrade pip
    pip install -r requirements.txt

     実行のためのパッケージが足りなかったので、下記も実行します。

    pip install ipython

    モデルのダウンロード

     次に https://huggingface.co/stabilityai/stable-cascade/tree/main から下記のファイルをダウンロードして「stable-cascade-test\models」ディレクトリに移動します。

    • effnet_encoder.safetensors (81.5 MB)

    • previewer.safetensors (16 MB)

    • stage_a.safetensors (73.7 MB)

     続けてstage_bとstage_cについても同様に対応します。こちらはLargeモデルとLiteモデルそれぞれにfloat32とbfloat16があるため、4種類ずつ存在します(stage_cはさらにpretrainedのfloat32モデルあり)。

    • stage_[b,c].safetensors (6.25GB, 14.4GB)

    • stage_[b,c]_bf16.safetensors (3.13GB, 7.18GB)

    • stage_[b,c]_lite.safetensors (2.8GB, 4.12GB)

    • stage_[b,c]_lite_bf16.safetensors (1.4GB, 2.06GB)

     STAGE BとSTAGE Cのモデルの選択は、使用VRAM量に影響します。また、公式にアナウンスしていて実際に確かめた結論として、なるべくstage_cはliteではない方の使用を推奨します。

     筆者の実行結果も踏まえると、以下のように対応してみるのが良いと思います。コードはオリジナル版と改良版の2種類があり、本記事では便宜上「標準版」「節約版」と呼びます。

    • VRAM 6GB:「stage_c_lite_bf16 + stage_b_lite_bf16 + 節約版」とする。

    • VRAM 8GB:「stage_c_lite_bf16 + stage_b_lite_bf16 + 標準版または節約版(実行時間の短い方)」とする。画質に不満があればVRAM 12GBの方法を試してみる(可否や実行時間は未確認)。

    • VRAM 12GB:「stage_c_bf16 + stage_b_bf16 + 節約版」とする。

    • VRAM 16GB:「stage_c_bf16 + stage_b_bf16 + 標準版」とする。念のため、節約版と実行時間を比較してみる。



    ▼ 準備2

     設定ファイルを用意します。「stable-cascade-test\configs\inference」内に「stage_b_3b.yaml」と「stage_c_3b.yaml」があるので、コピーしてから編集します。ファイル名はコード(スクリプト)側で指定するだけなので任意です。モデルのファイル名に合わせるのが分かりやすいと思います。

    stage_b

     下記はオリジナルの内容です。

    # GLOBAL STUFF
    model_version: 3B
    dtype: bfloat16
    
    # For demonstration purposes in reconstruct_images.ipynb
    webdataset_path: file:inference/imagenet_1024.tar
    batch_size: 4
    image_size: 1024
    grad_accum_steps: 1
    
    effnet_checkpoint_path: models/effnet_encoder.safetensors
    stage_a_checkpoint_path: models/stage_a.safetensors
    generator_checkpoint_path: models/stage_b_bf16.safetensors

    model_version: 3B → liteの場合は700M
    dtype: bfloat16 → bf16ではない場合はfloat32
    batch_size → 1にする
    generator_checkpoint_path → 使用するモデルのファイル名

    stage_c

     下記はオリジナルの内容です。

    # GLOBAL STUFF
    model_version: 3.6B
    dtype: bfloat16
    
    effnet_checkpoint_path: models/effnet_encoder.safetensors
    previewer_checkpoint_path: models/previewer.safetensors
    generator_checkpoint_path: models/stage_c_bf16.safetensors

    model_version: 3.6B → liteの場合は1B
    dtype: bfloat16 → bf16ではない場合はfloat32
    generator_checkpoint_path → 使用するモデルのファイル名



    ▼ 準備3

    コードの作成

     冒頭でも述べたとおりコードは拝借しますので、そちらからコピーしてください。それを、「stable-cascade-test\」上に拡張子pyのファイルとして保存します。ファイル名は任意です。

     前述の通り、コードはオリジナルの標準版と、改良された節約版の2種類があります。どちらであっても編集内容は変わりません。

     まずは下記の部分を、準備2で作ったファイル名に変更します。

    # SETUP STAGE C
    config_file = 'configs/inference/stage_c_lite_3b.yaml'
    ...
    # SETUP STAGE B
    config_file_b = 'configs/inference/stage_b_lite_3b.yaml'

     下記の修正も推奨します。変数名を「time」から変更します。

    time = time.strftime(r"%Y%m%d%H%M%S")
    ↓
    nowtime = time.strftime(r"%Y%m%d%H%M%S")
    
    fileName = f"img-{time}-{i+1}.png"
    ↓
    fileName = f"img-{nowtime}-{i+1}.png"

     下記のプロンプトと画像サイズは、好みで変更することができます。

    caption = "Cinematic photo of a girl in cafe"
    height, width = 832,1216

     コメントアウトを外して下記のようにすると、固定のSeed値が使用できます(デフォルトはランダム)。インデントがずれるとPythonではエラーになるので、「#」とその後ろのスペース1個のみを削除します。

        torch.manual_seed(2244096)



    ▼ 実行

     準備に使用したコマンド プロンプトを開いたままであれば、すぐに実行できます。そうではない場合は、最初に下記のコマンドを実行します。

    cd  \aiwork\stable-cascade-test
    venv\Scripts\activate

     あとは下記のようにコードをPythonに渡すだけです。初回は12GB程度のダウンロードが発生します。また、設定ファイルに誤りがあればエラーを出して終了するので内容を確認します。

    python t2i_test1.py

     不備がなければ最後まで実行されて、画像ファイルが保存されます。

    画像
    画像が1枚保存された状態



    ▼ 実行時間とVRAM使用量

     使用するモデルとコードによって、実行時間とVRAM使用量が変わります。ここでは、VRAM 12GBのRTX 3060にて1216x832のサイズで出力した際の結果を記載します。標準版(オリジナルのコード)と、節約版(改良版のコード)の場合について、順番に記載します。VRAMは常時1GBほど消費していたため、一律で1GBを引いています。

    stage_c_lite_bf16 + stage_b_lite_bf16

     stage_c_liteを使用すると、見て分かる程度に質が悪くなる点に留意してください。参考まで、下の方にサンプル画像を掲載しました。

     標準版では全体の実行時間が47秒、STAGE Cが20秒、STAGE Bが13秒でした。アプリのVRAM使用量は6GB台で、STAGE A(最後の部分)のピークは9.1GBでした。8GBの環境向けです。節約版と実行時間を比べて短い方を選んでください。

    画像

     節約版では51秒、STAGE Cが20秒、STAGE Bが13秒でした。アプリのVRAM使用量はSTAGE C(前側の山)が4.4GB、STAGE B(後ろ側の山)が3.9GB、STAGE Aのピークは6.4GBでした。こちらは6GBの環境向けです。

    画像

    stage_c_bf16 + stage_b_bf16

     標準版では16分3秒(VRAM不足が原因)、STAGE Cが3分、STAGE Bが11分でした。アプリのVRAM使用量は12GB台が大半を占め、STAGE Aのピークは14.4GBでした。16GB以上の環境向けと思われます。

    画像

     節約版では2分27秒で、STAGE Cが1分、STAGE Bが40秒でした。アプリのVRAM使用量はSTAGE Cが9.2GB、STAGE Bが5.6GB、STAGE Aのピークが7.1GBでした。12GBの環境向けで、8GBでも一応動作するかもしれません。

    画像

    その他

     少しでも早く生成したい場合は、STAGE Bのみliteを選択する方法も考えられます。また、VRAM 24GB以上のリッチな環境では、float32のモデルを使用したり、batch sizeを上げたりすることができると思います。



    ▼ 画像サンプル

     ここで最も注目していただきたいのは、STAGE Cにliteモデルを使用するとディテールが甘くなってしまう(質が落ちる)点です。

     設定したプロンプトは「pastel color, flat anime style, upper body, girl, dynamic cute pose, frill dress, gold long hair, brown eyes, gentle smile, deep night, starry sky,」だったと思います。

    stage_c_lite_bf16 + stage_b_lite_bf16

     生成時間が短く、VRAM使用量もかなり抑えられます。

    画像

    stage_c_bf16 + stage_b_bf16

     liteモデルを選ばなければ、十分な画質が得られそうです。

    画像

    stage_c_bf16 + stage_b_lite_bf16

     生成時間を少しでも短縮したい場合は、STAGE Bのみliteモデルを使用する方法もあります。

    画像

    おまけ

     実写風の画像はかなり綺麗に生成できると思います。

    画像

     アニメ風も、(アーキテクチャは違いますが)SDXLのベースモデルと比較して改善されていると思います。さらにチューニングを行うことで、利用者が望むモデルに変化することが期待されます。

    画像



    ▼ その他

     私が書いた他の記事は、メニューよりたどってください。

     noteのアカウントはメインの@Mayu_Hiraizumiに紐付けていますが、記事に関することはサブアカウントの@riddi0908までお願いします。

     
     
    5060Ti (16GB) と 3060 (12GB) を所持。記載が無い限り文章は手書きです。記事に関することは X の riddi0908 までお願いします。質問箱は気まぐれにお返事します。

    あなたへのおすすめ