概要
Stable Diffusionがオープンソース化されたのが話題に。
pythonやAI気になっているけれど、触る機会がなかったので、このビッグウェーブで試してみた。
自作TRPGのLOSTRPG~廃墟の森の子供たち~に使えないかなという試み。
結論からいうと、以下のような画像が生成できた。
環境
- 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
で移動 - 仮想環境
ldm
をactivate
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
動かしてみる
話題の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
ファイルをダウンロード。
ライセンスについて、翻訳ソフトを通して確認。
問題なさそうなのでAccept Repository
。
このモデルにアクセスするには、連絡先情報を共有する必要があります。
このリポジトリは誰でもアクセスできますが、 そのコンテンツにアクセスするには登録する必要があります
下の [Access Repository] をクリックすると、連絡先情報 (電子メール アドレスとユーザー名) がリポジトリの作成者と共有されることに同意したことになります。これにより、たとえば、ライセンス上の理由でリポジトリのコンテンツの一部を削除する必要がある場合に、作成者が連絡を取ることができます。
**
CreativeML OpenRAIL-M ライセンスの上で、このモデルはオープン アクセスで誰でも利用できます。
CreativeML OpenRAIL ライセンスの概要:
1.モデルを使用して、違法または有害な出力またはコンテンツを意図的に作成または共有することはできません
2.当社は、お客様が生成した出力に対していかなる権利も主張しません。お客様はそれらを自由に使用することができ、ライセンスに設定された条項に違反してはならない使用について説明責任を負います。
- Weightを再配布し、モデルを商用および/またはサービスとして使用することができます。その場合、ライセンスと同じ使用制限を含め、CreativeML OpenRAIL-M のコピーをすべてのユーザーと共有する必要があることに注意してください (ライセンスを完全に注意深く読んでください)。
ここで完全なライセンスをお読みください: https://huggingface.co/spaces/CompVis/stable-diffusion-license
ファイルの配置
準備したモデルの名前をmodel.ckpt
に変更し、
models/ldm/stable-diffusion-v-1
ディレクトリを作成、その中に入れる。ソースコードを見ると、実行時引数を指定しないときのデフォルトのパスの模様。
失敗
配置しても、同様のエラーとなる。
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
コマンドで確認。
話題のStable Diffusionがオープンソース化されたのでローカルで動かしてみるでも、メモリ不足から、少ないメモリで動く、フォークされたリポジトリで試していた。それに倣うことにする。
フォークされたリポジトリを使ってみる
同様に、model.ckptを配置する。
今回はoptimizedSD/optimized_txt2img.py
を実行する。
windows用にパスを指定するためのargsが足りなかったので追加した。
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
やったことの簡単まとめ(旧)
- miniconda3のインストール
- 最新グラボでなくても動く、速度を犠牲に省メモリなリポジトリをclone
- https://huggingface.co/に登録
-
モデルをダウンロードして、リポジトリ下の
models\ldm\stable-diffusion-v-1\model.ckpt
に置く - パスを指定できるようにソースコードを微修正
- インストールしたcondaを起動。クローンしてきたリポジトリに
cd
で移動 - 仮想環境
ldm
をactivate
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分待って完成
ソースコード修正
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をローカルで動かす
世界変革の前夜は思ったより静か