はじめに

この記事は生成AIの利用を推奨するものではない。

screenshot

Stable Diffusion WebUI

私はAIで生成された絵が大嫌いだし,プロンプトをいじることが実際に絵を描くことに優ることはないと信じている。

ただ,知っていることはまったく無知であることよりも良いというのが私の信念なので今回は記事にした。

忠告しておくが,あなたが少しでも創造的な活動に携わる立場なら絶対にStable Diffusionに手を出すべきではない

Arch Linux + RX7900XT + Stable Diffusion WebUI

Arch LinuxにStable Diffusion(SD)を導入する記事はたくさんあるが,非公式リポジトリ(arch4edu)を追加するやり方1であったり,Dockerを使って特権ユーザーで動かすやり方であったりあまり好ましいと思えるものがない。

もちろんそうでないやり方も公式から紹介されている。

この方法なのだが,python-pytorch-opt-rocmpython-torchvision-rocmをグローバルにインストールしたとき,仮想環境を生成するときに--system-site-packagesのオプションをつけたとしてもPythonからROCmを扱うことができず断念した。

今回はそれらとは異なり,なるべく既存の環境に影響を与えない方法を見つけたのでなるべく初心者でもわかるように記事にした。

ほんとうに今さらで需要があるかも不明だが,誰かの役に立つことを願う。

環境

  • Manjaro Linux (6.6.47-1-MANJARO)

  • Python 3.12.5

  • AMD Ryzen 7 7700X

  • AMD Radeon RX7900XT

Manjaro LinuxはArch Linuxではないが,今回はArch Linuxとして扱う。ManjaroのリポジトリはunstableがArchのstableに相当するので,多少バージョンの差はあるかもしれないが問題はないはずだ。今回インストールするのはAUTOMATIC1111/stable-diffusion-webui(以下SD WebUI)で,モデルはすでに手元にあるものとする。

AURヘルパーはparuを使うが,yayやtrizenなどあなたの使っているものに読み替えてほしい。

インストール先は~/stable-diffusionとする。最低限のインストールが終わった時点ですでに30GB程度の容量を食っているので,容量に余裕のある場所にしたほうがいい。私の場合は余っている512GBのSSDをsystemdでマウントして使っている。

ちなみに,PyTorchは現在(2024年)の時点でPython3.12への移行がまだできておらず,SD WebUIもPyTorchが対応するまでPython3.12への対応はしないというスタンスらしい。そのためPython3.12を使っている場合は古いバージョンのPythonをインストールする必要がある。

Python 3.8-3.11 is generally installed by default on any of our supported Linux distributions, which meets our recommendation. – Start Locally | PyTorch

こういう対応状況はすぐに変化するものなので,PyTorchの公式サイトへ行ってどのバージョンのPythonに対応しているか確認することをおすすめする。

StableDiffusion WebUIとPython3.10仮想環境の準備

まずはRequired Dependenciesをインストール。Python3はバージョンを指定する必要があるので無視してもいい。

$ sudo pacman -S --needed wget git

AURからPython3.10をインストール。(Python3.11でもいいらしいが,最もテストされているのは3.10だというので今回は3.10にした。)

$ paru -S python310

インストール先のディレクトリへ移動してリポジトリをクローン。

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

クローンしたリポジトリ(ルートディレクトリ)に移動して仮想環境を生成する。

$ cd stable-diffusion-webui
$ python3.10 -m venv venv

このコマンドを実行すると,stable-diffusion-webuiディレクトリの内部にvenvというPython3.10の仮想環境ディレクトリが作成される。

仮想環境を有効化(activate)するときは,

$ source venv/bin/activate

この状態でバージョンを確認すると,

$ python --version
# => Python 3.10.14

と古いバージョンに切り替わっていることが確認できる。

仮想環境を無効化(deactivate)してシステムグローバルに戻すときは,

$ deactivate

だけでOK。

(補足)Python仮想環境とはなにか

Pythonの仮想環境とは,かんたんに言えば異なるバージョンのPythonをシステムグローバルでない場所にインストールして使うことだ。仮想環境があればシステムでは最新のPythonを使いつつ,SD WebUIのように特定の古いバージョンのPythonを求めるプログラムにもバージョンを切り替えて対応できる。

とくにArch系ディストリビューションはローリングリリースのおかげでいろんなもののバージョンが勝手に新しくなっていくので,部分的に古いバージョンの実行環境を残しておける仮想環境のありがたみを感じやすいと思う。

仮想環境を作るコマンドはpython -m venv [仮想環境のディレクトリ]で,別にディレクトリ名はvenvにする必要はないのだが,慣習的につけられる名前なのでvenvにしておくことを強くおすすめする。venv以外にも仮想環境を作る方法はいくつかあるが,(conda,pyenvなど)venvはPython組み込みモジュールだし,pipでパッケージを管理するのも楽なのでvenvを使うことをおすすめする。必要なくなったらvenvごとゴミ箱に入れれば処分できるというのも楽ちんで良い。

仮想環境を有効化すると,一時的に仮想環境のディレクトリ(venv)がPATHの先頭に追加されてpythonコマンドがその仮想環境を生成したバージョンのPythonに置き換えられる。もとのシェルの環境変数を書き換えなければならない都合上,これをただのシェルスクリプトにさせることは不十分でsourceコマンドを使って忠実に実行する必要がある。

ちなみにSD WebUIのissueを覗いてみると,Pythonの仮想環境ひとつで解決する相談が延々となだれ込むのを見ることができる(他人事)。

SD WebUIの必須パッケージをpipでインストール

stable-diffusion-webuiの中にrequirements.txtがあるはずなのでそれを使って必須パッケージをインストールする。

このとき,仮想環境を有効化(activate)してから行うことを忘れないように!(仮想環境を有効化しないとシステムグローバルにインストールされてしまう)

$ cd ~/stable-diffusion/stable-diffusion-webui
$ source venv/bin/activate
$ pip install -r requirements.txt

大量のパッケージがvenv/lib/python3.10/site-packagesにインストールされたはずである。

ここで,PythonのtorchからROCmを扱うことができるかテストする。

$ python -c 'import torch; print(torch.cuda.is_available())'

と打つか,Pythonの対話型インタプリタを使って

$ python
>> import torch
>> torch.cuda.is_available()

と打ってTrue / False のどちらが返ってくるかをみる。

ROCmはPyTorchから利用可能ならばCUDAであるかのようにふるまうので,このようにしてROCmの利用可能性を調べることができる2

Falseが返ってきていれば順調だ。torchとtorchvisionをアンインストールしてROCm版のものに置き換えればいい。(もしTrueなら次の工程は飛ばしても大丈夫だと思う。)他のエラーが出ている場合は,前の工程を抜かしているか,どこかで順番を誤った可能性が高い。

ROCm版のTorch,TorchVisionのインストール

ここがもっとも重要。torchとtorchvisionをアンインストールする。

$ pip uninstall torch torchvision

確認ダイアログでyを押して2つのパッケージをアンインストールする。

続いてROCm版をインストールする。Start Locally | PyTorchで最新バージョンが確認できる。

スクリーンショット

いまはROCm6.1が最新らしいので,以下のようにしてインストールする。torchaudioは必要ないはずだがwebui.shの中にも記載されていたので入れておく。

$ pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/rocm6.1

重量級のパッケージなのでそこそこ時間がかかるはずだ。インストールが完了したら,再びPythonのtorchからROCmを扱うことができるかテストする。

$ python -c 'import torch; print(torch.cuda.is_available())'
# => True

Trueが返ってきたら成功している。次はモデルを導入する。

モデルの導入

著作権に配慮したモデルを導入すべきだ。

Stable Diffusionによるモデルはstable-diffusion-v-1-4-originalからダウンロードできるが,これは絶対に嫌という人も多いだろう。「著作権に配慮した」と自称するモデルの大半はStable Diffusionのモデルに「追加の学習」を行うことで作成されているため,もとのStable Diffusionのモデルがクリエイターを軽視した学習を行っている以上どれだけ配慮した使い方をしたとしても根本的問題は変わらない。

そういう意味に於いてはAI Picassoという日本の会社が出しているcommonart-betaというモデルはなかなかいい線を行っているかもしれない3。しかしここではどのモデルを導入するか,どうやって導入するかは省略するので各自入手してほしい。

モデル(.safetensorや.ckptファイル)はstable-diffusion-webui/models/Stable-Diffusionに,VAE(.ptファイル)はstable-diffusion-webui/models/VAEに配置する。

初回起動とやっておくべきUIの設定

ルートディレクトリに移動してwebui.shを実行する。

$ cd ~/stable-diffusion/stable-diffusion-webui
$ ./webui.sh

webui.shはpython3.10仮想環境を見つけて勝手に有効化するはずなので,起動時に仮想環境を有効化する必要はない。

起動したらhttp://localhost:7860をブラウザで開くとWebUIの画面が出る。

UIの設定

settingタブから以下の設定をして保存しておくと良い。

Settings > User Interface > Live previews

以下の2つの項目のチェックマークを外して生成中プレビューを無効にする(生成速度が向上する)

Settings > User Interface > User interface

Quick settings list にsd_vaeを追記し,VAEをUIから選択可能にしておく。

コマンド変数の追加など

その他こまごました設定はwebui-user.shを編集する。

グレーの画像が生成されたら以下の行を追加。

export COMMANDLINE_ARGS="--precision full --no-half"

ポートを7860から変更したいときは以下のようにすればいい。

export COMMANDLINE_ARGS="--port 8080"

  1. Stable Diffusion AMD guide#docker-guide↩︎

  2. Additionally, to check if your GPU driver and CUDA/ROCm is enabled and accessible by PyTorch, run the following commands to return whether or not the GPU driver is enabled (the ROCm build of PyTorch uses the same semantics at the python API level link, so the below commands should also work for ROCm):

    import torch
    torch.cuda.is_available()

    Start Locally | PyTorch

    ↩︎
  3. CC-BY-4.0とCC-0のもとに提供されたデータセットからのみ学習をおこなっているらしい。商用利用できる透明性の高い日本語画像生成AI、CommonArt βを無償公開|AI Picasso↩︎