WSL2上のDockerでStable Diffusionを動かす

環境

Inspiron 7577
* Core i5-7300HQ
* GeForce GTX 1060(6GB MAX-Q)


WSLのアップデート

  1. ここを参考にPowerShellでWSLのアップデートを行う
 wsl --update

CUDA on WSLのインストール

  1. ここを参考にWSL内でCUDA ツールキットのインストール
    ただし、ここを参考にNO_PUBKEY BCD50790B81839D3の対策を入れておく
 sudo apt-key del 7fa2af80

 wget https://developer.download.nvidia.com/compute/cuda/repos/wsl-ubuntu/x86_64/cuda-wsl-ubuntu.pin
 sudo mv cuda-wsl-ubuntu.pin /etc/apt/preferences.d/cuda-repository-pin-600
 wget https://developer.download.nvidia.com/compute/cuda/11.7.0/local_installers/cuda-repo-wsl-ubuntu-11-7-local_11.7.0-1_amd64.deb
 sudo dpkg -i cuda-repo-wsl-ubuntu-11-7-local_11.7.0-1_amd64.deb

 sudo cp /var/cuda-repo-wsl-ubuntu-11-7-local/*.gpg /usr/share/keyrings/

 sudo apt-get update
 sudo apt-get -y install cuda
  1. nvidia-dockerのインストール
    ここを参考にnvidia-docker2のインストールを行う
  sudo apt remove docker-ce docker-ce-cli containerd.io -y

  distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \
    && curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
    && curl -s -L https://nvidia.github.io/libnvidia-container/$distribution/libnvidia-container.list | \
    sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
    sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list

  sudo apt-get update
  sudo apt-get install -y nvidia-docker2 docker-compose-plugin
  sudo /etc/init.d/docker restart

docker-composeの実行

  1. docker-composeファイルを作成してup
    ここを参考にNVIDIA_VISIBLE_DEVICES=allをつけておく
  version: '3.6'
  services:
    cuda:
      image: nvidia/cuda:11.7.0-devel-rockylinux8
      runtime: nvidia
      environment:
        - NVIDIA_VISIBLE_DEVICES=all
      tty: true
      volumes:
        - ./src:/src
      working_dir: /src
  1. ここここを参考にpython3のインストールと設定
    python3.10がほしい
 yum update
 yum groupinstall "Development Tools" -y
 yum install openssl-devel libffi-devel bzip2-devel wget -y
 wget https://www.python.org/ftp/python/3.10.6/Python-3.10.6.tgz

 tar xvf Python-3.10.6.tgz
 cd Python-3.10.6

 ./configure --enable-optimizations
 make altinstall

 pip3.10 install torch torchvision

python3でGPUが使えるか確認(Trueが帰ってくればOK)

 python3.10
   >> import torch
   >> print(torch.cuda.is_available())
  1. ここを参考にStable Diffusionを使えるようにしていく
    ユーザ登録を行いアクセストークンを取得しておくこと アクセストークンの種類はREADで行けた
pip3.10 install diffusers==0.2.4 transformers scipy ftfy
 python3.10
   >> import torch
   >> from diffusers import StableDiffusionPipeline
   >> pipe = StableDiffusionPipeline.from_pretrained("CompVis/stable-diffusion-v1-4", revision="fp16", torch_dtype=torch.float16, use_auth_token="hf_*****************")
   >> pipe = pipe.to("cuda")
   >> prompt = "a photograph of an astronaut riding a horse"
   >> from torch import autocast
   >> with autocast("cuda"):
   >>   image = pipe(prompt)["sample"][0]
   >> image.save(f"image_name.png")
  • auth_tokenは自前のものを使う

    別の画像を作成したい場合は途中から書けばいいらしい

   >> prompt="a beautiful mountain landscape"
   >> from torch import autocast
   >> with autocast("cuda"):
   >>   image = pipe(prompt)["sample"][0]
   >> image.save(f"image_name2.png")
   >> exit()