Google Colabで環境構築してstable diffusionで遊んでみた (AMD GPUを使ったローカルでの環境構築中)

Google Colabで環境構築してstable diffusionで遊んでみた (AMD GPUを使ったローカルでの環境構築中)

2022/12/14追記: ついに動きました

(このページにある情報を参考にするときは自己責任でお願いします)

結果

色々苦戦したけど、最後にはこんな感じのいい感じの絵が出力されました。

ボールで遊ぶ猫1
ボールで遊ぶ猫2

環境構築

google colabを使っての環境構築は以下のサイトを参考にしました。

画像生成AI「Stable Diffusion」を低スペックPCでも無料かつ待ち時間なしで使う方法まとめ
2022年8月23日に無料公開された画像生成AI「Stable Diffusion」は、「ボールで遊ぶ猫」「森の中を走る犬」といった指示を与えると指示通りの画像を出力してくれます。Stable Diffusionはデモページで画像生成を試せ...

必要な環境構築はたったこれだけという手軽さ(YOUR_TOKENはダミーに置き換えています)

環境構築に必要なコード

コピペ用

!pip install diffusers==0.2.4 transformers scipy ftfy
YOUR_TOKEN="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" # ここに取得したトークンを入れる
from diffusers import StableDiffusionPipeline
pipe = StableDiffusionPipeline.from_pretrained("CompVis/stable-diffusion-v1-4", use_auth_token=YOUR_TOKEN)
pipe.to("cuda")
prompt = "cute cat paly with ball" # ここで出力したい画像を指示する
image = pipe(prompt)["sample"][0]
image.save(f"cat.png")

具体的な方法

  1. google colabでGPUの設定をする
  2. 上のコードをコピペする
  3. 実行する

簡単にできました!

おまけ (ローカルで環境構築しようとして失敗した話)

私の環境は以下の通りです

  • OS: Ubuntu 20.04
  • CPU: Ryzen 5 3600
  • GPU: Radeon RX 5700

ローカルでの環境構築方法

探すと日本語の記事がいくつか出てきますが、公式が一番頼りになると思います。

GitHub - CompVis/stable-diffusion: A latent text-to-image diffusion model
A latent text-to-image diffusion model. Contribute to CompVis/stable-diffusion development by creating an account on Git...
現時点での方法をざっくり解説
  • conda環境を作成し、以下のコマンドで仮想環境を作成する
conda env create -f environment.yaml
conda activate ldm
  • 学習済みパラメータをダウンロードして、リンクを貼る
mkdir -p models/ldm/stable-diffusion-v1/
ln -s <path/to/model.ckpt> models/ldm/stable-diffusion-v1/model.ckpt 
  • 出力
python scripts/txt2img.py --prompt "a photograph of an astronaut riding a horse" --plms 

実行時にエラーが…

環境構築までは上手くいきましたが、私の環境ではNVIDIA製のGPUを使っていないので、 NVIDIA製のGPUが見つからないよ みたいなエラーが発生しました。(色々奮闘していたのでログは取っていません)

ROCmで対応可能らしい(けどできなかった)

調べていると、AMD製のGPUでもROCmを使うことで動かすことができるケースもあるらしいです。(以下動画参照)

AMDでもROCmを使えばいけるらしい

ただ、私の場合はうまく行きませんでした。

navi10 – RX5700XT でROCmを動かす方法

さらに調べると、こちらの方法を使ってROCmを動かせそうだということが分かりました。

rocm-build/navi10 at master · xuhuisheng/rocm-build
build scripts for ROCm. Contribute to xuhuisheng/rocm-build development by creating an account on GitHub.

が、私は環境構築がうまくできず断念しました。もうpythonの環境がぐちゃぐちゃなので一度最初から作り直そうと思います

結論

AMD GPUで頑張ろうとするのではなく、Google Colabを使いましょう。(でもまだ諦めず挑戦するつもり)

(追記) 動きました!…がうまく画像が生成されない

Ubuntuを20.04から22.04にアップグレードしたので、改めて環境構築に挑戦しました。

22.04にしたことで、返って手間がかかってしまったかもしれませんが、最終的には画像が生成できたので一旦よしとします。(灰色でまだ不完全だけど…)

ROCm で Stable Diffusion 動きます(Stable Diffuson 2.0 も動くよ) - Qiita
ふえぇ... AMD GPU で Stable diffusion 計算代行してがっぽがっぽしたいよぉ...情報…

こちらの記事を参考に試してみました。

エラーその1

最終的にldm環境でサンプルコードを実行したところ、

"hipErrorNoBinaryForGpu: Unable to find code object for all current devices!"

と怒られてしまいました。

これは、

export HSA_OVERRIDE_GFX_VERSION=10.3.0

で環境変数を変えてやればOKです。(参考: https://stackoverflow.com/questions/73575955/pytorch-hiperrornobinaryforgpu-unable-to-find-code-object-for-all-current-devi)

エラーその2

メモリ不足で、以下のようなエラーが発生しました。

RuntimeError: HIP out of memory. Tried to allocate 3.00 GiB (GPU 0; 7.98 GiB total capacity; 5.62 GiB already allocated; 2.15 GiB free; 5.77 GiB reserved in total by PyTorch) If reserved memory is >> allocated memory try setting max_split_size_mb to avoid fragmentation.  See documentation for Memory Management and PYTORCH_HIP_ALLOC_CONF
GitHub - basujindal/stable-diffusion: Optimized Stable Diffusion modified to run on lower GPU VRAM
Optimized Stable Diffusion modified to run on lower GPU VRAM - basujindal/stable-diffusion

↑の軽量版を利用することで解決

軽量版での環境構築でも同様に、

Start Locally
Start Locally

こちらからrocmでCUDAの環境を上書きします。

私の例では以下のコマンドでうまく行きました。

pip3 install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/rocm5.1.1

次の課題

無事txt2imgのプログラムの実行は完了したのですが、なぜか画像が灰色になってしまいます。

プログラム自体は正常に終了したが灰色の画像が生成された

この問題はまだ解決できていないので、解決でき次第また記事を更新しようと思います。