Stable Diffusionをubuntuで試しました

1.概要

Stable Diffusionの記事をネットで見つけて、ubuntu-22.04で試しました。Stable Diffusionはテキストからの入力で画像やイラストを自動生成するAIモデルです。Deep Learning環境でpytorchになれた方ならばスムーズに実行できると思います。どの程度のことがPCで実現できるか試すために、GPU版とCPU版を試験しました。また、日本語テキスト入力による操作性も確認しました。その内容を記述します。

注意事項

権利侵害の禁止:

他人のイラストや写真を読み込ませたり、有名人の偽画像を作らないこと。

ライセンス確認:

商用利用や配布をする場合は、使用したモデルの規約を必ず確認すること。

禁止表現:

成人向け(NSFW)、暴力、差別、他人が不快になる画像の生成は厳禁。
※ 生成した画像によるトラブルはすべて自己責任となります。

2.詳細

(1) GPU版の検証

環境は以下のとおりです
HW環境は、core i3-7100, nvidia-1050Ti, memory 16GB, SSD 250GBです。
SW環境は、ubuntu-22.04です。当初、ubuntu-20.04で始めたのですが、python3 3.10が必要なため変更しました。

導入手順は以下のとおりです。

(a) nvidia driverインストール
標準のnouveauをdisableにして、下記ドライバーをインストール
$ nvidia-driver-550 - distro non-free recommended

(b) cudaインストール
準備として下記モジュールをインストールします
$ sudo apt -y install curl
$ sudo apt-get -y install git
$ sudo apt -y install python3-pip python3-venv python3-packaging

nvidia-toolkitを導入します
$ sudo apt -y install nvidia-cuda-toolkit

cudaのチェックをするときに、nvccの保存場所が異なるため、copyをします
$ nvcc --version
$ sudo mkdir -p /usr/local/cuda/bin
$ sudo cp -p /usr/bin/nvcc /usr/local/cuda/bin

$ git clone https://github.com/NVIDIA/cuda-samples.git
$ cd ~/cuda-samples/Samples/1_Utilities/deviceQuery
$ SMS=70 make
$ ./deviceQuery
$ cd ~/cuda-samples/Samples/1_Utilities/bandwidthTest
$ SMS=70 make
$ ./bandwidthTest

SMS=70 makeは、GPUの世代に合わせるためのオプション設定です。
設定がないと下記エラーになります。

$ make
/usr/local/cuda/bin/nvcc -ccbin g++ -I../../../Common -m64 --threads 0 --std=c++11 -gencode arch=compute_50,code=sm_50 -gencode arch=compute_52,code=sm_52 -gencode arch=compute_60,code=sm_60 -gencode arch=compute_61,code=sm_61 -gencode arch=compute_70,code=sm_70 -gencode arch=compute_75,code=sm_75 -gencode arch=compute_80,code=sm_80 -gencode arch=compute_86,code=sm_86 -gencode arch=compute_89,code=sm_89 -gencode arch=compute_90,code=sm_90 -gencode arch=compute_90,code=compute_90 -o matrixMul.o -c matrixMul.cu

(c) Stable Diffusionのインストールと起動
$ git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui
$ cd ~/stable-diffusion-webui
$ python3 launch.py --lowvram --xformers --listen

何故かstable-diffusion-webui/launch.pyでエラーになります。
Traceback (most recent call last):
  File "/home/nakasima/stable-diffusion-webui/launch.py", line 48, in <module>
    main()
  File "/home/nakasima/stable-diffusion-webui/launch.py", line 44, in main
    start()
  File "/home/nakasima/stable-diffusion-webui/modules/launch_utils.py", line 465, in start
    import webui
  File "/home/nakasima/stable-diffusion-webui/webui.py", line 13, in <module>
    initialize.imports()
  File "/home/nakasima/stable-diffusion-webui/modules/initialize.py", line 15, in imports
    import torch  # noqa: F401
ModuleNotFoundError: No module named 'torch'

下記コマンドを再実行すると処理が再開されます。
$ python3 launch.py --lowvram --xformers --listen

ダウンロードが実行されて、起動します。

(d) GUI利用
Running on local URL:  http://0.0.0.0:7860
の表示が出ているので、ブラウザ(Firefox)から
http://localhost:7860/
でGUIに接続します。

(e) モデルの入手
StableDiffusionはモデルと呼ばれる基本的な画像情報を元に、テキストを入力から画像やイラストを自動生成するAなので、モデルを入手する必要があります。

(2) CPU版の検証

GPUがなくてもCPUだけで実行できます。ただし、速度はかなり落ちます。
(1) GPU版の検証の導入手順からCPU版の場合に必要な手順を記載します。

(c) Stable Diffusionのインストールと起動
(d) GUI利用
(e) モデルの入手

(3)日本語化

テキスト入力のユーザーインターフェイスは英語です。日本語に変えることができます。
Extensionsの設定をします。

stable Diffusionを起動します。
「Extensions」のタブを開き、「Available」のタブを開くと、拡張機能の一覧が表示されます
「ja_JP Localization」という拡張機能があり、右側にある「install」をクリックして、インストールします。

しかし、stable-diffusion-webui-localization-ja_JPのLoadができません。
起動コマンドのオプション設定に問題があると気が付きました

<before>
python3 launch.py --lowvram --xformers --listen
<after>
python3 launch.py --lowvram --xformers

一度、Stable Diffusionを再起動します。
python3のlaunch.pyをctrl-cで終了して、再度起動です。

3.所見

GPU稼働率をnvidia-smiで参照するとGPUは98%の高稼働率でした。nvidia-1050Tiを利用しているので性能は期待できないと思っていたのですが、案外スムーズに動作します。Stable Diffusionは容量が必要な大きなアプリケーションです。nvidiaのdriver、cudaとStableDiffusionで約20GB必要でした。
日本語化をしたのですが、英語によるコマンドの方が沢山存在しているのであまりメリットは無い気がしました。

参考

[本ブログ内参照]
囲碁AIのlizzieとleela_zeroの組合せをGPUを利用して動作確認しました
3目並べを利用したAlphaGoの学習 tensorflow-2編

コメント

過去30日間に良く読まれた記事

miniPCのBMAXでWindows11のsecure boot設定漏れでトラブル発生

Windows95/98のPCゲームをUbuntu/LinuxMintの最新PCで楽しむ方法 ( KVM / Wine / dosbox-x / midi )

LinuxMint/ubuntuにWine 11導入を試しました ( LinuxMint 21.3 / 22.3 ubuntu 22.04 / 26.04 Wine 11.0 / 11.6 / 11.8 / 11.13 )