Stable Diffusion WebUI (Forge版) の動作環境の構築

解説

Jetson Orin Nano に、Stable Diffusion Web UI (Forge版) の動作環境を構築する方法についてまとめます。

前提

Stable Diffusion WebUI (AUTOMATIC1111版) の動作環境の構築」を実施していない場合は、実施します。

コンテナの起動

コンテナ起動スクリプトファイル「docker-run-sd.sh」を以下の内容に修正します。



コマンドオプション解説

-it
インタラクティブモードで実行します
--runtime nvidia
l4t-base コンテナの実行中に NVIDIA コンテナランタイムを使用します。
--network host
コンテナが Jetson ホストのネットワークとポートを使用できるようにします。
--volume ~/work-l4t-ml-sd:/work
ホストの「work-l4t-ml-sd」ディレクトリをコンテナの「/work」ディレクトリとしてマウントします。
--name l4t-ml-sd-dev
起動したコンテナに「l4t-ml-sd-dev」という名前を付けておきます。後ほどDockerイメージ化するときに付けた名前を使用します。
l4t-ml-sd:v2
起動するコンテナの元となるイメージとして、「Stable Diffusion WebUI (AUTOMATIC1111版) の動作環境の構築」で作成したイメージ名を指定します。
その他
起動したコンテナ上で、Stable Diffusionの動作環境を構築し、Dockerイメージ化し再利用します。そのために「--rm」オプションは付けません。

以下のコマンドを実行します。


Stable Diffusion WebUI (AUTOMATIC1111版) の動作環境の構築」で作成した環境のコンテナが起動します。

Stable Diffusion WebUI (Forge版) のクローン

以下のコマンドを実行し、Stable Diffusion WebUI (Forge版) をクローンします。

Stable Diffusion WebUI (Forge版) 起動スクリプトファイルの作成

Stable Diffusion WebUI (Forge版) を起動するコマンドは文字数が多いので、実行する際にタイピングするのが少し面倒です。短い文字数のタイピングで実行できるようにスクリプトファイル化します。

今回は「launch-webui-forge.sh」というスクリプトファイルを作成することとしました。

「launch-webui-forge.sh」というスクリプトファイルを作成し、内容を以下のようにします。


実行するPythonファイルは、「Forge」版のlaunch.py。

コマンドオプション解説

--listen
WebUI サーバを外部からアクセスできるようにします。
--port 7860
WebUI サーバの待ち受けポートを指定します。
--enable-insecure-extension-access
拡張機能(Extensions)の管理画面を、パスワード保護なしで利用可能にします。
--data-dir=/work/data-forge
WebUI のデータ保存ディレクトリを、ホスト側のディレクトリをマウントした「/work」下の「data-forge」ディレクトリとします。
設定ファイル、出力ファイルは、ホスト側のディレクトリに保存する、保存されるようにします。
--models-dir=/work/data/models
モデルファイルを置くディレクトリのパスを指定します。
Forge版とAUTOMATIC1111版で一元管理するディレクトリパスを指定します。(このオプションを外すと、Forge版とAUTOMATIC1111版で個別管理になります。)
--xformers
xformers ライブラリを使って推論の高速化とVRAMの削減をします。
--gradio-allowed-path "."
Forge版で「--data-dir」オプションを使用する際に必要な設定です。
参考)Setting `--data-dir` leads to 403 trying to load files from `<sd-folder>/javascript` · Issue #1220 · lllyasviel/stable-diffusion-webui-forge

以下のコマンドを実行し、スクリプトファイルに実行権限を付与します。

Stable Diffusion WebUI (Forge版) の起動の妨げとなるPythonパッケージのアンインストール

以下のコマンドを実行し、Stable Diffusion WebUI (Forge版) の起動の妨げとなるPythonパッケージをアンインストールします。

TensorFlowがインストールされていると、TensorFlowが内部でml_dtypesを使ってfloat8型を扱おうとしますが、インストールされているml_dtypesとTensorFlowとで互換性がなく実行時エラーが生じるので、TensorFlowをアンインストールします。Stable Diffusion WebUIの画像生成においては、TensorFlowは必要ありません。

Stable Diffusion WebUI (Forge版) の起動

以下のコマンドを実行し、Stable Diffusion WebUI (Forge版) を起動します。


初回起動時は、依存モジュールのインストールがあり時間を要します。(時間は、ネットワーク環境等に依存します)

起動すると、以下のようなメッセージが表示され、Web UI サーバが起動します。


初回起動時のTerminal画面

WebUI にブラウザからアクセス

同一ネットワーク上のPCのブラウザアプリ(ChromeやEdge)から、
http://[Jetson Orin Nano のIPアドレス]:7860
もしくは
http://[Jetson Orin Nano のホスト名]:7860
にアクセスします。

Stable Diffusion WebUI (Forge版) の画面が表示されます。

画像生成の試行

「Prompt」エディットボックスに生成したい画像についてのテキストを入力し、「Generate」ボタンをクリックすると、画像生成が開始します。

「A cute Shiba Inu wearing sunglasses, cartoon style」と入力し、画像生成した結果


生成した画像は、WebUIの画面からダウンロードできます。
もしくは、ホスト側の「~/work-l4t-ml-sd/data-forge/outputs」の下に自動保存されるので、Samba共有でアクセスできるようにしておけば、同一ネットワーク上のPCから生成画像ファイルにアクセスできます。

データフォルダの所有者の変更

Web UI サーバが起動すると、データ保存ディレクトリとして指定した「/work/data-forge」ディレクトリが作成され、dataディレクトリ内にディレクトリやファイルが配置されます。
コンテナ内の「/work/data-forge」はホスト側の「~/work-l4t-ml-sd/data-forge」ですが、Web UI サーバプログラムが配置したディレクトリやファイルは、所有者が「root」となり、このままでは、ホスト側からは、ファイルを読み取ることはできますが、ファイルの内容を書き換えたり、新しいファイルを置いたりすることができません。

Terminalを別に起動し、コンテナ上ではなく、ホスト上で、以下のコマンドを実行し、「~/work-l4t-ml-sd/」以下のディレクトリ、ファイルの所有者をホスト側のユーザーに変更します。


これで、ホスト側の「~/work-l4t-ml-sd/data-forge」について、ホスト側から、ファイルの内容を書き換えたり、新しいファイルを置いたりすることができるようになりました。
Samba共有でアクセスできるようにしておけば、同一ネットワーク上のPCからファイル内容を書き換えたり、新しいファイルを置いたりすることができます。

参考)モデルファイルの配置場所

checkpointファイルは、AUTOMATIC1111版と一元管理で、以下のディレクトリに置きます。


VAEファイルは、AUTOMATIC1111版と一元管理で、以下のディレクトリに置きます。


LoRAファイルは、AUTOMATIC1111版と一元管理で、以下のディレクトリに置きます。


Hypernetworkファイルは、AUTOMATIC1111版と一元管理で、以下のディレクトリに置きます。


embeddingファイル(negative embedding ファイル、Textual Inversion ファイル)は、AUTOMATIC1111版と個別管理で、以下のディレクトリに置きます。
「embedding」ディレクトリは、「models」ディレクトリ下ではなく、「data-forge」ディレクトリ直下に作ります。

Stable Diffusion WebUI (Forge版) の終了

「launch-webui-forge.sh」を実行したTerminalにて、「ctrl + c」を押下します。
WebUI サーバが終了します。

コンテナの終了

以下のコマンドを実行し、コンテナを終了します。


コンテナが終了すると、Terminalでの表示が「ユーザー名@ホスト名:/~$」に変わり、ホスト上での作業に戻ります。

以降の作業は、指定がない場合は、ホスト上での作業です。

コンテナのイメージ化

以下のコマンドを実行し、コンテナをイメージ化します。

l4t-ml-sd-dev : イメージ化するコンテナの名前
l4t-ml-sd:v3 : 作成するイメージの名前「l4t-ml-sd」、タグ「v3」。

不要となったコンテナの削除

以下のコマンドを実行し、不要となったコンテナを削除します。

l4t-ml-sd-dev : 削除するコンテナの名前

作成したイメージを用いてコンテナの起動

コンテナ起動スクリプトファイル「docker-run-sd.sh」を以下の内容に修正します。

コンテナを終了したらコンテナを削除するように「--rm」オプションを追記します。
コンテナに名前を付ける「--name」オプションは削除します。
起動するコンテナの元となるイメージ名を、「l4t-ml-sd:v3」に変更します。

以下のコマンドを実行します。

構築した Stable Diffusion の動作環境のコンテナが起動します。

コンテナでの作業を終了するには「exit」コマンドを実行します。

関連ページ

Stable Diffusion に必要なPythonパッケージのインストール

Stable Diffusion WebUI (AUTOMATIC1111版) の動作環境の構築

Stable Diffusion WebUI (Forge版) の動作環境の構築 - 【本ページ】

Stable Diffusion WebUI (reForge版) の動作環境の構築