LoginSignup
8
9

More than 1 year has passed since last update.

WindowsでPython知らないレベルの私でもStable Diffusionを動かせたメモ

Last updated at Posted at 2022-08-24

概要

Stable Diffusionがオープンソース化されたのが話題に。
pythonやAI気になっているけれど、触る機会がなかったので、このビッグウェーブで試してみた。
自作TRPGのLOSTRPG~廃墟の森の子供たち~に使えないかなという試み。
結論からいうと、以下のような画像が生成できた。

image.png

環境

  • Windows10 21H2 19044.1889
    • メモリ: 32G
    • NVIDIA GeForce GTX 1050 Ti
      • グラフィックスメモリの使用可能容量: 20438MB
      • 専用ビデオメモリ 4096MB GDDR5
      • 共有システムメモリ 16342 MB
  • python 3.10.6

今回の方法だとグラボほとんど使っていないので、グラボ関係なさそう?

やったことの簡単まとめ

  • miniconda3のインストール
  • 最新グラボでなくても動く、速度を犠牲に省メモリなリポジトリをclone
  • https://huggingface.co/に登録
  • モデルをダウンロードして、リポジトリ下のmodels\ldm\stable-diffusion-v1\model.ckptに置く
  • インストールしたcondaを起動。クローンしてきたリポジトリにcdで移動
  • 仮想環境ldmactivate
    • conda env create -f environment.yaml
    • conda activate ldm
  • 以下のコマンドを入力。
    • >python optimizedSD/optimized_txt2img.py --prompt "lost life of survival little odyssey last offspring lovable our strage time" --n_samples 10
  • コーヒーを飲みながら10分待って完成

画像生成するまでの足跡

話題のStable Diffusionがオープンソース化されたのでローカルで動かしてみるをなぞる形で行った。

clone

githubからclone。

condaのインストール

python開発をしていないので、anacondaを持っていない。
chocolateyでインストールした。

cinst -y  miniconda3
  • miniconda3 4.12.0 がインストールされる

初期環境構築

readmeに従い、condaのプロンプトを開いて以下を実行。

conda env create -f environment.yaml
conda activate ldm

image.png

動かしてみる

話題のStable Diffusionがオープンソース化されたのでローカルで動かしてみるに従い、実行。

(ldm) D:\develop\develop\project\stable-diffusion>python scripts/txt2img.py --prompt "a photograph of an astronaut riding a horse" --plms

以下のエラーとなった。

    super(_open_file, self).__init__(open(name, mode))
FileNotFoundError: [Errno 2] No such file or directory: 'models/ldm/stable-diffusion-v1/model.ckpt'

モデルが足りない模様

モデルの準備

https://huggingface.co/にサインアップ。

CompVis/stable-diffusion-v-1-4-originalからsd-v1-4.ckptファイルをダウンロード。

image.png

ライセンスについて、翻訳ソフトを通して確認。
問題なさそうなのでAccept Repository

このモデルにアクセスするには、連絡先情報を共有する必要があります。
このリポジトリは誰でもアクセスできますが、 そのコンテンツにアクセスするには登録する必要があります
下の [Access Repository] をクリックすると、連絡先情報 (電子メール アドレスとユーザー名) がリポジトリの作成者と共有されることに同意したことになります。これにより、たとえば、ライセンス上の理由でリポジトリのコンテンツの一部を削除する必要がある場合に、作成者が連絡を取ることができます。
**
CreativeML OpenRAIL-M ライセンスの上で、このモデルはオープン アクセスで誰でも利用できます。
CreativeML OpenRAIL ライセンスの概要:
1.モデルを使用して、違法または有害な出力またはコンテンツを意図的に作成または共有することはできません
2.当社は、お客様が生成した出力に対していかなる権利も主張しません。お客様はそれらを自由に使用することができ、ライセンスに設定された条項に違反してはならない使用について説明責任を負います。

  1. Weightを再配布し、モデルを商用および/またはサービスとして使用することができます。その場合、ライセンスと同じ使用制限を含め、CreativeML OpenRAIL-M のコピーをすべてのユーザーと共有する必要があることに注意してください (ライセンスを完全に注意深く読んでください)。
    ここで完全なライセンスをお読みください: https://huggingface.co/spaces/CompVis/stable-diffusion-license

ファイルの配置

準備したモデルの名前をmodel.ckptに変更し、
models/ldm/stable-diffusion-v-1ディレクトリを作成、その中に入れる。ソースコードを見ると、実行時引数を指定しないときのデフォルトのパスの模様。

image.png

失敗

配置しても、同様のエラーとなる。

windows用のパスを与える。

ファイルがみつからないときの心当たりとして、linuxとwindowsのパス解釈の違いがよくある。
下記のように、パスをデフォルトの/ではなく、\で区切ることによりFile Not Foundのエラーは解消した。

(ldm) D:\develop\develop\project\stable-diffusion>python scripts/txt2img.py --prompt "a photograph of an astronaut riding a horse" --plms --ckpt models\ldm\stable-diffusion-v-1\model.ckpt

次なるエラー

グラボのメモリが足りないっぽい。

RuntimeError: CUDA out of memory. Tried to allocate 20.00 MiB (GPU 0; 4.00 GiB total capacity; 3.46 GiB already allocated; 0 bytes free; 3.52 GiB reserved in total by PyTorch) If reserved memory is >> allocated memory try setting max_split_size_mb to avoid fragmentation.  See documentation for Memory Management and PYTORCH_CUDA_ALLOC_CONF

メモリが足りないらしい。

nvidia-smiコマンドで確認。

image.png

話題のStable Diffusionがオープンソース化されたのでローカルで動かしてみるでも、メモリ不足から、少ないメモリで動く、フォークされたリポジトリで試していた。それに倣うことにする。

フォークされたリポジトリを使ってみる

同様に、model.ckptを配置する。

今回はoptimizedSD/optimized_txt2img.pyを実行する。
windows用にパスを指定するためのargsが足りなかったので追加した。

image.png

image.png

python optimizedSD/optimized_txt2img.py --prompt "a photograph of an astronaut riding a horse" --ckpt models\ldm\stable-diffusion-v-1\model.ckpt --n_samples 3

以下のエラー。

  File "<frozen importlib._bootstrap>", line 973, in _find_and_load_unlocked
ModuleNotFoundError: No module named 'optimizedSD'

パッケージがない模様。

(ldm) D:\develop\develop\project\stable-diffusion-for-little-vram>pip show optimizedSD
WARNING: Package(s) not found: optimizedSD

開発環境再構築

そういえば、リポジトリが変わったのに開発環境を再構築していないことに気づく。

conda remove -n ldm --all
conda env create -f environment.yaml
conda activate ldm

再度実行。。。行けた!

python optimizedSD/optimized_txt2img.py --prompt "a photograph of an astronaut riding a horse" --ckpt models\ldm\stable-diffusion-v-1\model.ckpt --n_samples 3

馬要素があるのが一枚だけですね。
image.png

やったことの簡単まとめ(旧)

  • miniconda3のインストール
  • 最新グラボでなくても動く、速度を犠牲に省メモリなリポジトリをclone
  • https://huggingface.co/に登録
  • モデルをダウンロードして、リポジトリ下のmodels\ldm\stable-diffusion-v-1\model.ckptに置く
  • パスを指定できるようにソースコードを微修正
  • インストールしたcondaを起動。クローンしてきたリポジトリにcdで移動
  • 仮想環境ldmactivate
    • conda env create -f environment.yaml
    • conda activate ldm
  • 以下のコマンドを入力。
    • >python optimizedSD/optimized_txt2img.py --prompt "lost life of survival little odyssey last offspring lovable our strage time" --ckpt models\ldm\stable-diffusion-v-1\model.ckpt --n_samples 10
  • コーヒーを飲みながら10分待って完成

ソースコード修正

optimizedSD/optimized_txt2img.py

 config = "optimizedSD/v1-inference.yaml"
-ckpt = "models/ldm/stable-diffusion-v1/model.ckpt"
+# ckpt = "models\ldm\stable-diffusion-v1\model.ckpt"
 device = "cuda"
 
 parser = argparse.ArgumentParser()
-
+parser.add_argument(
+    "--ckpt",
+    type=str,
+    default="models/ldm/stable-diffusion-v1/model.ckpt",
+    help="path to checkpoint of model",
+)
 parser.add_argument(
     "--prompt",
     type=str,
@@ -150,7 +155,7 @@ parser.add_argument(
     default="autocast"
 )
 opt = parser.parse_args()
-
+ckpt = opt.ckpt
 tic = time.time()
 os.makedirs(opt.outdir, exist_ok=True)
 outpath = opt.outdir

デフォルトのフォルダとパスが違うことに気づく。

デフォルトはmodels\ldm\stable-diffusion-v1\model.ckptで、自分が置いていたところはmodels\ldm\stable-diffusion-v-1\model.ckpt。お恥ずかしい。。。

調査

Google Colab で、お手軽 Text-to-Image
話題のStable Diffusionがオープンソース化されたのでローカルで動かしてみる
Git Bashでcondaを有効にする方法
midjourneyより高性能だけど入口の敷居が高すぎるStable Diffusionについて、かわなえさんによる導入方法解説まとめ+他の人の補足など
Stable Diffusionをローカルマシンで実行する(VSCodeとDevcontainerを使用)
PyTorch : CUDAのメモリ不足によるエラーを解決する
No module namedが出た時の対処手順
conda 仮想環境の作成・削除
Stable Diffusionをローカルで動かす
世界変革の前夜は思ったより静か

8
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
9