Stable Diffusion環境構築(pip、windows11、wsl、GeForce)
結局なにが必要なのか分かりにくい
どこの記事もごちゃごちゃと必要のないものもたくさんインストールしていてよくわからないので、画像を生成するためだけのシンプルな構成を紹介します。
環境
- OS: Windows 11 Pro
- CPU: AMD Ryzen 5 4500 6-Core Processor
- GPU: NVIDIA GeForce RTX 3060
- メモリ: 32.0 GB
- WSL OS: Ubuntu 22.04.1 LTS
構築
wsl上のコマンドです。
# ※1 のところはインストールに時間がかかるのでのんびり待ってください # GPUの状態が出ることを確認。出ない場合はドライバのインストールができていない $ nvidia-smi # CUDAを計算で利用可能にする $ sudo apt install nvidia-cuda-toolkit # ※1 $ nvcc -V nvcc: NVIDIA (R) Cuda compiler driver Copyright (c) 2005-2021 NVIDIA Corporation Built on Thu_Nov_18_09:45:30_PST_2021 Cuda compilation tools, release 11.5, V11.5.119 Build cuda_11.5.r11.5/compiler.30672275_0 # Python $ mkdir application && cd application # 'application'は任意の名前 $ python3 -m venv .venv $ source .venv/bin/activate # Python実行時はコンソールに (.venv) と表示されていることを確認 (.venv) $ python -m pip install --upgrade pip (.venv) $ pip install torch torchvision # ※1 # 閑話(TrueになればGPUで計算できているらしい) (.venv) $ python >>> import torch >>> torch.cuda.is_available() True # 続き(stable-diffusion関連のパッケージを取得する) (.venv) $ pip install diffusers transformers accelerate # 学習済みモデルをダウンロードする(数GBあるので時間かかります) $ sudo apt-get install git-lfs $ mkdir models && cd models $ git clone https://huggingface.co/Linaqruf/anything-v3.0 # ※1
次のPythonコード(txt2img.py
)をプロジェクトルートに置いて実行する。
from PIL.Image import Image from torch import autocast from diffusers import StableDiffusionPipeline def main(): model = "./models/anything-v3.0" prompt = "girl, cat ear" # メモリ消費量や実行速度の調整についてはこの記事を参照 # https://huggingface.co/docs/diffusers/optimization/fp16 # StableDiffusionPipeline.from_pretrained のパラメータはここを参照してください # https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipeline_utils.py#L287 # 参照されない残りのパラメータは StableDiffusionPipeline のコンストラクタに渡されます # https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/stable_diffusion/pipeline_stable_diffusion.py#L72 pipe = StableDiffusionPipeline.from_pretrained(model).to("cuda") # safety checkerを外す場合はStable Diffusionのライセンスを必ず確認してください # pipe = StableDiffusionPipeline.from_pretrained(model, safety_checker=None, requires_safety_checker=None).to("cuda") with autocast("cuda"): result = pipe(prompt) for image in result.images: image: Image # typehint 特に意味はない行です。 image.save("output.png") if __name__ == "__main__": main()
(.venv)$ python txt2img.py 100%|████████████████████████████████████████████████████| 50/50 [00:11<00:00, 4.51it/s]
output.png
という名前で画像が出力されます。
以上