ふえぇ... AMD GPU で Stable diffusion 計算代行してがっぽがっぽしたいよぉ...
情報
環境
- Ubuntu 22.04(20.04 推奨)
- RX6800(RDNA2) 16GB
- Docker で ROCm 実行
手元ですぐに試せる環境が Ubuntu 22.04 のみで, 22.04 は ROCm 正式対応していないため,
を参考にして無理やりインストールしました!
(20.04 環境がある方は 20.04 使ったほうがいいです)
ROCm pytorch
オフィシャル? からだと ROCm 5.1.1 なのと, セットアップ容易 + ROCm 最新 5.2.3 を使うため docker を使います.
から適したのを取得します.
執筆時点では rocm/pytorch:rocm5.2.3_ubuntu20.04_py3.7_pytorch_1.12.1
が最適でした.
実行
ROCm(amdgpu)自体, Ubuntu 20.04 以降であれば video
group(render
も?) があれば usespace で動かせます.
(このあたり細かいところのセキュリティはディストリビューションによると思われる)
また, 最近では sudo などつけなくても user space で docker 動かし GPU アクセスできます.
ROCm 使うには /dev/kfd
, /dev/dri
が見えている必要があるため, --device
でコンテナ内で見れるようにします.
--security-opt seccomp=unconfined
は無くても大丈夫そう.
(ROCm で Stable diffusion 計算代行など, GPU 計算をインターネット越しで提供する場合は適切に設定するのが推奨と思われる: https://www.creationline.com/lab/46861)
--privileged
(特権モード)は deprecated になったようでつけなくてよいです.
--group-add
で video
group にユーザを追加しないといけません.
docker run --name pytorch_rocm -it --rm --device=/dev/kfd --device=/dev/dri --group-add video rocm/pytorch:rocm5.2.3_ubuntu20.04_py3.7_pytorch_1.12.1
で Docker 起動し,
import torch
torch.cuda.is_available()
で pytorch の import と, cuda(ROCm GPU)使えるか確認しておきます.
あとは
あたりを参考にして動かせばいけます!
Voila!
(X11 とか volume 共有していなかったのでとりあえず imcat https://github.com/stolk/imcat で terminal で表示)
実行時間は推論だからか reddit にあるように CUDA と遜色ない速度で処理できている感がありました.
解像度
RX6800 16GB で,
- 768x768 いけました.
768x1024 などは CUDA と同様にメモリ不足で実行できずになりました. そもそも学習が 512x512 なので解像度たかくしてもうまくいかない. SD 2.0 や upscalar を使いましょう.
Stable diffison 2.0
2.0 も動きました
こちらのメモリ削減版を使い
768x768 で memory usagge 33% (~5.5 GB)
で行けました. GPU メモリ 8GB でもいけるやも.
TODO
-
pip install あたりのセットアップの履歴を docker イメージに残す(https://github.com/l1na-forever/stable-diffusion-rocm-docker 当たり参考に
Dockerfile
作らないとダメかしらん) - 学習もさせてみる(以前(昨年あたり)は pytorch rocm とりあえず動くものの, おそすぎたり計算 nan でたりとダメダメでしたが, 一応 Pytorch ROCm は
beta
取れているのでいまはきちんと動きそう?)- finetune は Dreambooth でできるのを確認ずみ
- AMD GPU たくさん並べて Stable diffusion 計算代行でがっぽがっぽするスキームを確立する(GeForce では EULA で商用ホスティングサービス提供が禁止されているので計算代行は EULA に抵触する可能性があるため)