Stable DiffusionをWindowsローカル環境のDockerで動かす

イギリスの企業Stability AIが公開したテキストから画像生成するAI.「Stable Diffusion」をローカル環境で動かしてみました。

 

CG制作業を行っているmocoの要望により構築したもので、なるべく初心者にもわかりやすいように画像を多めに用意しました。

 

この記事では

参考記事

実際に環境構築した手順

をまとめています。

スポンサーリンク

参考記事

今回参考にさせて頂いたのはこちらの記事。

 

Stable Diffusionをローカルマシンで実行する(VSCodeとDevcontainerを使用)

 

Anacondaを使用して環境構築の情報もあったものの、自分の環境では上手くいかず。

検証環境

  • OS: Windows 10 Pro
  • CPU: Intel(R) Core(TM) i7-10870H
  • メモリ: 32GB
  • GPU: NVIDIA GeForce RTX 3070 Laptop GPU (8GB)

環境構築の流れ

  1. Hugging Faceのトークンを発行
  2. CUDAのインストール
  3. Dockerのインストール
  4. Visual Studio Codeのインストール
  5. Visual Studio Codeに拡張機能をインストール
  6. Stable Diffusionで画像生成

1.Hugging Faceのトークンを発行

Gigazineの記事の手順でHugging Faceのトークンを発行します。

2.CUDAのインストール

  1. https://developer.nvidia.com/cuda-downloads を開き、環境にあったインストーラをダウンロードします。
  2. インストーラを起動します。OKをクリックします。
  3. 同意して続行するをクリックします。
  4. 次へをクリックします。
  5. インストールが完了するまで待ちます。
  6. インストールが完了すると、以下の画面になります。次へをクリックします。
  7. チェックボックスのチェックをはずし、閉じるをクリックします。

3.Dockerのインストール

    1. https://www.docker.com/products/docker-desktop/ を開き、Windows をクリックします。
    2. ダウンロードが完了したら、ファイルをクリックします。
    3. Ok をクリックします。
    4. インストールが開始されます。しばらく待ちます。
    5. Close and restart をクリックします。
    6. 再起動しても問題ない状態にしたあと、はい をクリックします。
    7. 再起動完了後、ウィンドウズマークをクリックし、Docker Desktop をクリックします。
    8. I accept the terms にチェックをいれ、Accept をクリックします。
    9. Skip tutorial をクリックします。
    10. ウィンドウ右上の×をクリックしてウィンドウを閉じます。

4.Visual Studio Codeのインストール

  1. https://code.visualstudio.com/ を開き、Download for Windows をクリックします。
  2. ダウンロードが完了したら、ファイルをクリックします。
  3. 同意するにチェックをいれ、次へをクリックします。
  4. 次へをクリックします。
  5. 次へをクリックします。
  6. 次へをクリックします。
  7. インストールをクリックします。
  8. インストールが完了するまでしばらく待ちます。
  9. 完了をクリックします。

5.Visual Studio Codeに拡張機能をインストール

  1. ウィンドウズマークをクリックし、Visual Studio Code をクリックします。
  2. ウィンドウ左のExtensionsをクリックします。
  3. 左上の検索窓に remote と入力し、表示された Remote Development をインストールします。
  4. インストールが完了すると以下の画面になります。

6.Stable Diffusionで画像生成

  1. 左メニューのExplorerをクリックし、Open Folder をクリックします。
  2. 適当なフォルダを開きます。この例ではstable-diffusionフォルダを作りました。stable-diffusionフォルダを選択した状態で、フォルダーの選択をクリックします。
  3. Yes, I trust the authorsをクリックします。
  4. マウスを右クリックし、New Fileをクリックします。
  5. ファイル名をDockerfileにし、下記の内容を記入します。
    FROM nvcr.io/nvidia/cuda:11.7.1-cudnn8-runtime-ubuntu20.04
    
    ARG DEBIAN_FRONTEND=noninteractive
    ENV TZ=Asia/Tokyo
    
    RUN apt-get update && apt-get install -y wget git git-lfs libglib2.0-0 libsm6 libxrender1 libxext-dev
    
    RUN wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh && \
        sh Miniconda3-latest-Linux-x86_64.sh -b -p /opt/miniconda3 && \
        rm -r Miniconda3-latest-Linux-x86_64.sh
    
    ENV PATH /opt/miniconda3/bin:$PATH
    
    RUN git clone https://github.com/CompVis/stable-diffusion && \
        cd stable-diffusion && \
        conda init bash && \
        conda env create -f environment.yaml && \
        echo "conda activate ldm" >> ~/.bashrc

  6. View→Command Paletteをクリックします。
  7. 検索窓に remote と入力し、表示されるリストの中からRemote-Containers: Add Development Container Configuration Files...をクリックします。
  8. From 'Dockerfile'をクリックします。
  9. devcontainer.jsonが生成されます。
  10. devcontainer.jsonにrunArgsの設定を追加します。
    
    "runArgs":[
    	"--gpus",
    	"all"
    ],
    

  11. Command Paletteを開き、検索窓に remote rebu と入力したときに表示されるRemote-Containers: Rebuild and Reopen in Containerをクリックします。
  12. 右下にStarting Dev Container (show log)が表示されます。消えるまでしばらく待ちます。(時間がかかります)

    起動が完了すると、TERMINALタブに(ldm) root@94aabe7ed0ab:/workspaces/stable-diffusion#のように表示されます。
  13. TERMINALに以下の文字列を入力し、エンターキーを入力します。
    huggingface-cli login

    Token:と表示されるため、初めに入手したHugging Faceのトークンを入力してエンターキーを入力します。
    Login successfulと表示されればOKです。

  14. Dockerfileを作ったときと同様の手順で、test.pyファイルを作成します。内容は以下をコピー&ペーストしてください。
    13行目の prompt = "a photo of an astronaut riding a horse on mars"
    この太字の箇所が生成画像を指定するワードになります。好きな言葉を入れてみて下さい。

    # make sure you're logged in with `huggingface-cli login`
    from torch import autocast
    import torch
    from diffusers import StableDiffusionPipeline
    
    pipe = StableDiffusionPipeline.from_pretrained(
    	"CompVis/stable-diffusion-v1-4", 
    	revision="fp16",
    	torch_dtype=torch.float16,
    	use_auth_token=True
    ).to("cuda")
    
    prompt = "a photo of an astronaut riding a horse on mars"
    with autocast("cuda"):
        image = pipe(prompt)["sample"][0]  
        
    image.save("astronaut_rides_horse.png")
    
     ※補足: GPUのメモリが10GB以上ある方は test.py の revision, torch_dtype の指定なしで動作します。
  15. TERMINALでtest.pyを実行します。以下のコマンドを入力してください。
    python test.py
    


    コマンドが成功すると astronaut_rides_horse.png が作成されます。

コメントを残す

thirteen + 10 =

関連キーワード
Stable Diffusionの関連記事

Twitterでフォローしよう

おすすめの記事