👨‍🎨

SingularityでStable Diffusion web UIを動かす

2023/05/24に公開

Stable Diffusion web UIを計算機サーバで動かしたい

Stable Diffusion web UIとは,AUTOMATIC111が提供しているブラウザ上でStable Diffusionが遊べるUIである.
公式→AUTOMATIC1111/stable-diffusion-webui: Stable Diffusion web UI

かなり簡単にStable Diffusion環境が整うので,ユーザを激増させた一因だと思う.

高速なレンダリングには計算機環境,とりわけGPUが重要だが,個人が揃えることは難しい.
幸いにも,私は研究室にGPU環境が整ったサーバ群があるのでそれを活用したいと考えた.
その辺のスパコン同様(?),一般ユーザに環境を変更する権限がない代わりにSingularityが利用可能である.
そこで,Singularity上にStable Diffusion UIが実行可能な環境の構築を試みた.

ただ,Singularity上ではStable Diffusion UIが公式の手順通りに実行できないので,Dockerで配布されているコンテナを基に実行する.

この記事で紹介すること/しないこと

【すること】

  • Singularityで実行可能なStable Diffusion web UIの環境構築方法
  • その実行方法

【しないこと】

  • Singularityとはなにか
  • Stable DiffusionやDiffusionモデルの説明
  • Stable Diffusion web UIの詳しい使い方(プロンプトや各パラメタ)

つまり,SingularityとStable Diffusionにある程度知識がある方を対象としています.

環境構築

  1. AUTOMATIC1111/stable-diffusion-webui: Stable Diffusion web UIを任意のディレクトリにclone
  2. 下記のDefinition Fileを作成
  3. defファイルの15行目を,1でcloneしたディレクトリに書き換え,port番号も衝突を避けるために任意の値に.
  4. defファイルをbuild
  5. singularity run --nv --bind /work <path-to-sif>.sifで実行可能(<path-to-sif>にbuildしたsifファイルへのパスを記入).1でcloneしたディレクトリへのbindが必須.
  6. ブラウザで,server:12345(serverには使用するサーバのアドレス,12345にはdefファイルで指定したポート番号)にアクセス

Def file

diffusion_docker_env.def
Bootstrap: docker
From: universonic/stable-diffusion-webui

%environment
	export CUDA_PATH=/usr/local/cuda
	export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH

%post
    export DEBIAN_FRONTEND=noninteractive
	export TZ=Asia/Tokyo
	export CUDA_PATH=/usr/local/cuda
	export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH

%runscript
	bash <path-to-cloned-dir>/stable-diffusion-webui/webui.sh --listen --port 8888  # ここを編集
  ### Example Start ###
	bash ${HOME}/stable-diffusion-webui/webui.sh --listen --port 12345
  ### Example End ###

%labels
	version 1.2.0

使い方


ネットでStable Diffusion, promptと調べれば色々出てくると思いますが,重要なことだけ.

学習済みモデルの指定

これ次第で絵の雰囲気が大きく変わる.
GitHubからcloneしてきたディレクトリの,models/Stable-diffusion以下に学習済みモデルを配置するとロード可能.GANやVAEもフォルダが用意されているので,なにか使えるのかも?

positive/negative prompt

描く絵の指定.
positveに入れてほしい要素,negativeに入れてほしくない要素を書き込む.
強調記法なども存在する.
ネット上にあるprompt集が参考になるので調べてみるのが速い.

人目のあるところで実行するときは,negative promptにnsfwを記入.
「Not safe for work」(職場で見ないほうがよい)という意味.過度なポルノ画像やグロ画像が生成されづらくなる.

ハイパラ

Sampling Steps

上げれば上げるほど細かい描写がされるが,上げすぎるとたまに不気味になる.
例えば,女の子を描画したときに,詐欺健康食品の広告か?というぐらい不気味なそばかすが出てきたりする.

Width, Height

その名の通り

Seed

再現性を確保したいときに用いる.-1はランダム.
描画後に,キャンバスの下に使用したシード値が出力されるので,似た絵を作りたいときは,このシード値を再度使う.
シード値に限らず,いい絵が出たらキャンバス下のハイパラはすべて記録しておくのが吉.

Generate

右上のGenerateを押して描画.
徐々に絵ができあがっていく.

Tips

生成した画像はUI HOMEのoutputs以下に保存されているので,見られて困るようであれば消しておく.

Civitaiは学習済みのDiffusionモデル配布サイト.
圧倒的に女の子を描画するモデルが多い.

Extentionsを使えば絵の再現性がより担保されたり,似た絵(例えば同じ顔で別の服みたいな)ことがやりやすくなるらしい.
研究で本格的に使う場合はこのあたりをしっかり調査する必要がありそう.

まとめ

Singularity上でStable Diffusion Web UIが使用可能な環境を構築しました.
かなり簡単に(Singularityの環境さえ整っていれば本家以上に?)構築できるので,ぜひ試してみてください.

GitHubで編集を提案

Discussion