🎨
Stable DiffusionをVSCode + Jupyter Notebookで動かす
これは何
- Jupyterをいれたまえという天の声を受けて入れたらStable Diffusionの実行とかみ合わせがとても良いので布教するための記事
この記事で説明すること
- StableDiffusionをAnaconda + VSCode + Jupyter Notebook構成で動かす方法
- 前段の環境構築は引用記事だけご紹介
- 後半のVSCode登場してからがこの記事における説明内容
この構成を推す理由
- Stable Diffusionではpromptを書き換えて何度も実行することになる
- jupyterを導入すると、それがとてもやりやすい
- Anacondaは環境が混ざるのを防止のため
- npm使ってる人向けに軽い説明をすると、pythonはnpm -gするのがデフォみたいな感じなので、それを分離できるようにするのがAnaconda。Anacondaはpythonのバージョンも指定できるので、nodenvも兼ねる。
今回の環境 / 利用するライブラリ等のバージョン
- Windows 11
- NVIDIA GeForce RTX 3060
- CUDA 11.7
- cuDNN 8.5.0
- Anaconda 4.12.0
- Python 3.7.13
- PyTorch 1.12.1
手順
0. GPU系の環境構築 & Anaconda/PyTorchの環境構築
- CUDA+cuDNNをインストールしPyTorchでGPUを認識させるまでの手順(Window11)がとてもわかりやすい
- Anacondaのインストールはpython.jpのWindows版Anacondaのインストール: Python環境構築ガイド - python.jpがわかりやすい
補足: 環境変数の設定方法
- Win11の場合、設定で『環境変数』で検索して探すと見慣れたウィンドウを召喚できる
- 編集するのは基本的に上段のPathのところ。ダブルクリックすればOK
補足:PyTorch環境選択時のバージョンについて
- CUDA11.7がないが、CUDA11.6を選択して出るコマンドを利用で問題ない
1. stable difussionの環境構築
- 前提条件: 0を実施し、condaにpytrochという名前の環境がある状態になっている
- stable diffusion公式の環境構築を参考に進めていく
- Anacondaの環境内にstable diffusionを導入。
- ここはコマンドプロンプトでやる。うまくいかないときはスタート画面右クリックで管理者権限で実行でコマンドプロンプト開く。
# condaのpytoch環境の中にいない場合は入る
conda activate pytorch
# install
pip install diffusers==0.2.4 transformers scipy ftfy
- 右上などからHugging faceのアカウントを作成
- 公式の環境構築の文中、
[its card](https://huggingface.co/CompVis/stable-diffusion-v1-4)
のリンクをクリックし、下方に出るAccess repository
を押す - 公式の環境構築の文中、
this section of the documentation
のリンクをクリックし、手順の通りにトークンを発行する - stable diffusion系環境構築はここまで。VSCodeの環境構築へ
2. VSCodeの環境構築
- VSCodeを公式からダウンロード&インストール
- VSCodeのExtensionsタブからJupyterを検索してインストール
- 適当にフォルダに入る
- 適当な名前で.pyファイルを作り、選択
- 右下にpython実行環境が表示されているので、これをcondaのpytorch環境に変更
- 適当な名前で.ipynbファイルを作る
- 最初の欄はこんな感じ。ここに『最初の1度だけ実行すればよいもの』をいれる
import torch
from diffusers import StableDiffusionPipeline
from torch import autocast
pipe = StableDiffusionPipeline.from_pretrained("CompVis/stable-diffusion-v1-4", revision="fp16", torch_dtype=torch.float16, use_auth_token="YOUR_TOKEN")
pipe.to("cuda")
- 2つめの欄はこんな感じ。
- 最初1回だけ上のタブからRun All。あとはpromptが含まれている2つめの欄を学習1回ごとに実行するだけ
- 実行して結果見てprompt変えて実行して…を繰り返してく
prompt = "kawaii girl, anime"
with autocast("cuda"):
image = pipe(prompt)["sample"][0]
# outputsディレクトリ配下に日付時分秒.pngで出る、微妙にyyyyMMddHHmmssではないので注意
import datetime
dt = datetime.datetime.now()
filename = f"{dt.year}{dt.month}{dt.day}H{dt.hour}{dt.minute}{dt.second}"
image.save(f"outputs/{filename}.png")
- 途中にMarkdownを入れることもできるので、私はよく使うワードをMarkdown欄にいれている
- 複数枚同時にやる方法とか諸々公式の最初の記事Stable Diffusion with 🧨 Diffusersにあるので、何枚か生成して楽しくなってきたら公式に立ち返ってコードを改造してみると吉。楽に再実行できるので、pythonに慣れてない人でも楽しくコード魔改造ができる。
- 私の呪文は私のtrickleのstable diffusionトピックで公開してます。
Discussion