💭

stable-diffusion-webuiをインストールする (Arch Linux, AMD ROCm)

2023/01/20に公開2

https://github.com/AUTOMATIC1111/stable-diffusion-webui

こんな感じの画面で操作できるようになります。txt2imgはもちろん、img2img, Trainなどもタブから切り替えて使用できます。かなり活発に開発されているので今後も機能が増えていくと思います。

記事執筆時点(2023.1.20)では 20a59ab3b171f398abd09087108c1ed087dbea9b commitを使用しました。

インストール環境

ROCm

ROCm (Radeon Open Compute) とは、 AMD のオープンソース並列計算アーキテクチャでありフレームワークです。今回はArch Linux向けのリポジトリである arch4edu からインストールします。基本的にはドキュメントの通り進めていくだけです。

  1. mirrorlistから arch4edu のミラーサイトを選択する
  2. GPG Keyをインストールする
# pacman-key --recv-keys 7931B6D628C8D3BA
# pacman-key --finger 7931B6D628C8D3BA
# pacman-key --lsign-key 7931B6D628C8D3BA
  1. 1.で選んだミラーサイトを追加する
/etc/pacman.conf
[arch4edu]
Server = https://mirrors.tuna.tsinghua.edu.cn/arch4edu/$arch
  1. データベースを同期してからパッケージをインストールする
# pacman -Sy
# pacman -S pkgstats
# pacman -S rocm-hip-sdk rocm-opencl-sdk

今回必要なのはrocm-hip-sdk, rocm-opencl-sdkの2つです。pkgstatsについては任意ですが、管理しているパッケージの傾向を知るのに役立つらしいのでとりあえず入れておきます。

最後に環境変数を設定します。使うときだけexportするのでもOKです

/etc/environment
HSA_OVERRIDE_GFX_VERSION=10.3.0

値の説明についてはこちらを参照してください

https://zenn.dev/haxibami/articles/archlinux-amd-gpu#環境変数の設定


依存関係で入った rocminfo でハードウェア情報などを確認できます。Stable Diffusionを動かす時は(たぶん)使用しないのでPATHは通ってなくても大丈夫です。

$ /opt/rocm/bin/rocminfo
ROCk module is loaded
=====================    
HSA System Attributes    
=====================    
Runtime Version:         1.1
System Timestamp Freq.:  1000.000000MHz
Sig. Max Wait Duration:  18446744073709551615 (0xFFFFFFFFFFFFFFFF) (timestamp count)
Machine Model:           LARGE                              
System Endianness:       LITTLE                             

==========               
HSA Agents               
==========               
*******                  
Agent 1                  
*******                  
  Name:                    AMD Ryzen 9 5900HX with Radeon Graphics
  Uuid:                    CPU-XX                             
  Marketing Name:          AMD Ryzen 9 5900HX with Radeon Graphics
  Vendor Name:             CPU                                
  Feature:                 None specified                     
  Profile:                 FULL_PROFILE                       
  Float Round Mode:        NEAR                               
  Device Type:             CPU
...

*******                  
Agent 2                  
*******                  
  Name:                    gfx1032                            
  Uuid:                    GPU-XX                             
  Marketing Name:          AMD Radeon RX 6600M                
  Vendor Name:             AMD                                
  Feature:                 KERNEL_DISPATCH                    
  Profile:                 BASE_PROFILE                       
  Float Round Mode:        NEAR
  Device Type:             GPU                                

stable-diffusion-webui

基本的にドキュメントの通り進めていきます。AMD GPUの他、NVidiaやApple Siliconのwikiもあります。

モデルは stable-diffusion-v-1-4 から sd-v1-4.ckpt を使用しました。model/Stable-diffusionフォルダに複数のファイルを置けばWEB UIから切り替えられるので便利です。stable-diffusion-2-1はなぜかうまく行きませんでした。

$ export HSA_OVERRIDE_GFX_VERSION=10.3.0

$ git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui
$ cd stable-diffusion-webui

### Download model.ckpt and set model/Stable-diffusion/

$ python -m venv venv
$ source venv/bin/activate
$ python -m pip install --upgrade pip wheel
$ TORCH_COMMAND='pip install torch torchvision --extra-index-url https://download.pytorch.org/whl/rocm5.1.1' python launch.py --precision full --no-half
Python 3.10.9 (main, Jan 20 2023, 12:55:11) [GCC 12.2.1 20230111]
Commit hash: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Installing torch and torchvision
Installing gfpgan
Installing clip
Installing open_clip
...
Running on local URL:  http://127.0.0.1:7860

To create a public link, set `share=True` in `launch()`.

初回起動時は必要なライブラリをインストールしたりと少々時間がかかります。しばらく待ってからブラウザで http://127.0.0.1:7860 を開いてみましょう。

2回目以降はpython -m venv venv, python -m pip install --upgrade pip wheelは不要です。


PyTorchでGPUが認識されていることを確認するには下記の通り実行してください。CUDAじゃありませんが気にしてはいけません。

$ cd Git/stable-diffusion-webui
$ export HSA_OVERRIDE_GFX_VERSION=10.3.0
$ source venv/bin/activate
$ python
>>> import torch
>>> torch.cuda.is_available()
True
>>>

/opt/amdgpu/share/libdrm/amdgpu.ids が見つからない

この時、amdgpu.ids ファイルが見つからないというエラーが出ることがあります。起動自体は問題なくできるのですが、気持ち悪いのでなんとかして消したいです。ファイルはlibdrmパッケージの/usr/share/libdrm/amdgpu.idsに存在するのでPATHかなにかの問題かと思われます。

$ cd Git/stable-diffusion-webui
$ export HSA_OVERRIDE_GFX_VERSION=10.3.0
$ source venv/bin/activate
$ python
>>> import torch
>>> torch.cuda.is_available()
/opt/amdgpu/share/libdrm/amdgpu.ids: No such file or directory
/opt/amdgpu/share/libdrm/amdgpu.ids: No such file or directory
/opt/amdgpu/share/libdrm/amdgpu.ids: No such file or directory
/opt/amdgpu/share/libdrm/amdgpu.ids: No such file or directory
True

どういう理屈なのかわかりませんが、venv内のtorchからamdgpu.idsファイルが見えていないのが原因のようです。グローバル環境(pyenvは使用してもOK)でtorchをインストールすればvenv内でもちゃんと見れるようになりました。

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

...

$ cd Git/stable-diffusion-webui/
$ export HSA_OVERRIDE_GFX_VERSION=10.3.0
$ source venv/bin/activate
$ python
>>> import torch
>>> torch.cuda.is_available()
True
>>> torch.__version__
'1.13.1+rocm5.1.1'
>>>

torchのバージョンはvenvに最初から入っている1.13.1+rocm5.1.1なので、グローバル環境の1.13.1+rocm5.2を読みに行ってる訳でもなさそうです。よくわかりませんが直ったのでヨシです。

その他参考

https://wiki.archlinux.jp/index.php/GPGPU#ROCm
https://dev.classmethod.jp/articles/setup_amd_rocm_and_stable_diffusion/

Discussion

ccggccgg

Thanks a lot!
The automatic installation is not working for me.(cannot find cuda).
Your documentation works for me.:)

ひでまるひでまる

ありがとうございます!!
自分もrocm周りの環境構築で挫折してましたが、この記事に助けられました。