🎨

Stable DiffusionをVSCode + Jupyter Notebookで動かす

2022/09/01に公開

これは何

  • 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の環境構築

補足: 環境変数の設定方法

  • Win11の場合、設定で『環境変数』で検索して探すと見慣れたウィンドウを召喚できる
  • 編集するのは基本的に上段のPathのところ。ダブルクリックすればOK

補足:PyTorch環境選択時のバージョンについて

  • CUDA11.7がないが、CUDA11.6を選択して出るコマンドを利用で問題ない

1. stable difussionの環境構築

  1. Anacondaの環境内にstable diffusionを導入。
  • ここはコマンドプロンプトでやる。うまくいかないときはスタート画面右クリックで管理者権限で実行でコマンドプロンプト開く。
# condaのpytoch環境の中にいない場合は入る
conda activate pytorch

# install
pip install diffusers==0.2.4 transformers scipy ftfy
  1. 右上などからHugging faceのアカウントを作成
  2. 公式の環境構築の文中、[its card](https://huggingface.co/CompVis/stable-diffusion-v1-4)のリンクをクリックし、下方に出るAccess repositoryを押す
  3. 公式の環境構築の文中、this section of the documentationのリンクをクリックし、手順の通りにトークンを発行する
  4. stable diffusion系環境構築はここまで。VSCodeの環境構築へ

2. VSCodeの環境構築

  1. VSCodeを公式からダウンロード&インストール
  2. VSCodeのExtensionsタブからJupyterを検索してインストール
  3. 適当にフォルダに入る
  4. 適当な名前で.pyファイルを作り、選択
  5. 右下にpython実行環境が表示されているので、これをcondaのpytorch環境に変更
  6. 適当な名前で.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