NISHIO Hirokazu[Translate]
Stable Diffusion 環境構築


2022-09-22

stable diffusionをチェックアウトしたコードがAとBの二つあり、Aでconda環境を作った後で、Bで実験をしようとした
運用環境と実験環境と思って良い
実験環境でソースを編集したのになぜか読まれない

回答編
$ conda env create -f environment.yaml
これの中で pip -e . しているのでAがライブラリパスに入っており、インポートもAからされる
実験環境用に別の名前のconda環境を作った



--- old log 1
Windows向けの全部入りrar
解凍してexeを実行するだけでGUIで使える
これを昨日の夜、とりあえずゲーミングPCに入れてみた
1枚40秒前後で作れる

ゲーミングPCは開発環境が入ってない
「WSL 使い方」でググるところから…
「ストアからUbuntuを入れればいい」というのを間に受けたら折り畳まれた表示の中で「wslがオンになってない」と警告を出して止まってた
やたら時間がかかるなと思って詳細表示にして初めて気づいた
管理者権限のコマンドプロンプトからwsl --installしたら素直にインストールが始まった
GPUに10GBのVRAMが必要と書いてあるが、まず自分が条件を満たしてるのか知らない
調べ方を調べる
Win-R dxdiag
8GBしかないように見えるが…w
Linux版Anacondaをインストールして
$ conda env create -f environment.yaml
$ conda activate ldm
Hugging Face からsd-v1-4.ckptをダウンロードする
$ python scripts/txt2img.py --prompt "cat" --plms --ckpt sd-v1-4.ckpt
RuntimeError: No CUDA GPUs are available
🤔

Troubleshooting

:
$ nvidia-smi Fri Aug 26 21:21:14 2022 +-----------------------------------------------------------------------------+ | NVIDIA-SMI 495.47 Driver Version: 496.76 CUDA Version: 11.5 | |-------------------------------+----------------------+----------------------+ | GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. | | | | MIG M. | |===============================+======================+======================| | 0 NVIDIA GeForce ... On | 00000000:01:00.0 Off | N/A | | N/A 52C P8 6W / N/A | 111MiB / 8192MiB | N/A Default | | | | N/A | +-------------------------------+----------------------+----------------------+ +-----------------------------------------------------------------------------+ | Processes: | | GPU GI CI PID Type Process name GPU Memory | | ID ID Usage | |=============================================================================| | No running processes found | +-----------------------------------------------------------------------------+
WSL環境はGPUのハードウェアを認識している

::
Python 3.8.5 (default, Sep 4 2020, 07:30:14) [GCC 7.3.0] :: Anaconda, Inc. on linux Type "help", "copyright", "credits" or "license" for more information. >>> import torch >>> torch.version.cuda '11.3' >>> torch.cuda.is_available() False
TorchはCUDAが使えるGPUを認識していない

>PyTorchのwheelファイルはCUDA込みなのでWSL内のUbuntuにCUDAとcudnnを入れる部分は実は不要ですよ。
Windows に NVIDIA ドライバーをインストール

:
$ nvidia-smi Fri Aug 26 22:32:57 2022 +-----------------------------------------------------------------------------+ | NVIDIA-SMI 515.65.01 Driver Version: 516.94 CUDA Version: 11.7 | |-------------------------------+----------------------+----------------------+ | GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. | | | | MIG M. | |===============================+======================+======================| | 0 NVIDIA GeForce ... On | 00000000:01:00.0 Off | N/A | | N/A 51C P8 10W / N/A | 0MiB / 8192MiB | 0% Default | | | | N/A | +-------------------------------+----------------------+----------------------+ +-----------------------------------------------------------------------------+ | Processes: | | GPU GI CI PID Type Process name GPU Memory | | ID ID Usage | |=============================================================================| | No running processes found | +-----------------------------------------------------------------------------+
CUDA Version: 11.7
11.5→11.7
これはドライバーがサポートしている最大バージョンらしい

CUDA Toolkit
:
(ldm) nishio@DESKTOP-0ET2LJF:/mnt/c/WINDOWS/system32$ nvcc -V nvcc: NVIDIA (R) Cuda compiler driver Copyright (c) 2005-2019 NVIDIA Corporation Built on Sun_Jul_28_19:07:16_PDT_2019 Cuda compilation tools, release 10.1, V10.1.243
TorchはCUDAが11.3であることを期待しているのに、実際には10.1?

WSL (Ubuntu) に CUDA Toolkit をインストール
:
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.1/local_installers/cuda-repo-wsl-ubuntu-11-7-local_11.7.1-1_amd64.deb sudo dpkg -i cuda-repo-wsl-ubuntu-11-7-local_11.7.1-1_amd64.deb sudo cp /var/cuda-repo-wsl-ubuntu-11-7-local/cuda-*-keyring.gpg /usr/share/keyrings/ sudo apt-get update sudo apt-get -y install cuda

:
$ nvcc -V ... Cuda compilation tools, release 10.1, V10.1.243
10.1のままだ

:
(ldm) $ sudo update-alternatives --config cuda There is only one alternative in link group cuda (providing /usr/local/cuda): /usr/local/cuda-11.7 Nothing to configure. conda install pytorch torchvision -c pytorch
えー、CUDAは11.7だけがインストールされてるってことになってるぞ??
11.3をインストールする必要がある?
PyTorchは11.7で動くはずだという意見

:
(ldm) nishio@DESKTOP-0ET2LJF:~/stable-diffusion$ lspci 27fa:00:00.0 3D controller: Microsoft Corporation Device 008e 9e5b:00:00.0 3D controller: Microsoft Corporation Device 008e
lspciで見えないのはおかしい?
lspciで見えないのはWSL環境ならそういうものらしい

:
$ sudo apt-get remove nvidia-cuda-toolkit ... The following packages will be REMOVED: nvidia-cuda-toolkit 0 upgraded, 0 newly installed, 1 to remove and 2 not upgraded. ... $ nvcc -V Command 'nvcc' not found, but can be installed with: sudo apt install nvidia-cuda-toolkit $ sudo apt-get install cuda Reading package lists... Done Building dependency tree Reading state information... Done cuda is already the newest version (11.7.1-1).

うーん、nvccはnvidia-cuda-toolkitと紐づいていてバージョンは10.1
CUDA Toolkitの1.17をインストールしたのだがそちらになってくれない
両方アンインストールして、autoremoveして依存で入ったパッケージも全部消した上で、apt-get install cudaだけする

Command 'nvcc' not found になるなぁ

あ、パスが通ってないだけか
:
$ /usr/local/cuda/bin/nvcc -V nvcc: NVIDIA (R) Cuda compiler driver Copyright (c) 2005-2022 NVIDIA Corporation Built on Wed_Jun__8_16:49:14_PDT_2022 Cuda compilation tools, release 11.7, V11.7.99 Build cuda_11.7.r11.7/compiler.31442593_0

condaの環境を消して作り直す
:
(ldm) $ python >>> import torch >>> torch.cuda.is_available() True
やっとcuda availableになった!!

:
$ python scripts/txt2img.py --prompt "cat" --plms --ckpt sd-v1-4.ckpt ... attn = sim.softmax(dim=-1) RuntimeError: CUDA error: unknown error
えええー

$ python scripts/txt2img.py --prompt "cat" --plms --ckpt sd-v1-4.ckpt --n_samples 1 --W 256 --H 256
できた!

半精度にするの意外と簡単そうだった
できた!
exe版ではなくPythonスクリプトの側を実行して同じものを得られるようになった
ファイルから複数のプロンプトを投げた時にプロンプトごとにフォルダを作ってそれぞれをiter指定の枚数作成するようにした
寝る前に「これとこれを50枚ずつ作っといてね」というやり方ができる
ついでにexe版と同じようにパラメータ情報の入ったJSONが出力されるようにした

ファインチューニング試した情報
>今回はcolabを利用し、画像16枚、学習は3時間程度でした。
現実的に新しい概念を教えられそう

forkしてGPUに分割して送るようにしたバージョン、VRAMが少なくても動くし、今動いてる人ももっと大きな画像を作れる、とのこと(まだ試してはない)


$ python scripts/my.py --from-file prompts.txt --n_iter 100 --seed 130
$ python scripts/my.py --prompt "black cats" --n_iter 100 --seed 130

"Engineer's way of creating knowledge" the English version of my book is now available on [Engineer's way of creating knowledge]

(C)NISHIO Hirokazu / Converted from [Scrapbox] at [Edit]