StableSwarmUIで手元からリモートマシンで画像生成

# はじめに
サメジ部長です。AI関係の色々のために、RTX A6000を積んだ強力なサーバを借りることができました。
ところが、リモートなのでこれを使うためには自前の画像生成環境と違う環境を使う必要があるんですね。これが非常に面倒。
できることなら自分のローカルで生成を行うと自動でリモートのマシンが勝手に動いてほしい…そんな都合の良い物があったら良いのに。

ありました。[StableSwarmUI](https://github.com/Stability-AI/StableSwarmUI)です。これはComfyUIを利用していて、APIアクセスできるバックエンドとそれを操作するGUIが同梱されている画像生成AIソリューションとして利用できるんです。早い話、自分のローカルPCからリモートサーバに画像を作らせることができます。

ということでやってみた記事として紹介します。具体的な方法はほぼドキュメントに記載されていますが、リモートサーバならではのトラブルもあったので合わせて紹介します。

# 詰まったところ
## headlessはお呼びでない？
オーダーとしてサーバ提供元から構成どうする？と聞かれたので自分はheadless環境を所望しました。ところがこれが罠だったんです。LinuxのソリューションはGUIのデスクトップがあるのを前提にしていることが結構あります。お試しで入れるとそれを前提にしていたからかエラーが起きてしまい落ちてしまいました。本来はheadlessモード用のセットアップが必要なところなのかも。

ということでheadless環境をやめて仮想ディスプレイとGNOMEをインストールしました。
```bash
sudo apt install xrdp
sudo apt -y install ubuntu-desktop task-gnome-desktop

# xrdpを起動
sudo systemctl start xrdp
# マシン再起動
sudo reboot
````
このGUIへはリモートデスクトップ接続などを使って画面上からアクセスしてください。

# 初期設定
## インストール
インストール方法については[Linuxのインストール手順](https://github.com/Stability-AI/StableSwarmUI?tab=readme-ov-file#alternate-manual-linux-install)を参照してマニュアルインストールしてください。
変わったところと言えばdotnet-sdk-8.0を入れなければいけないくらい。付属のインストールシェルコマンドで対処できます。例によってPython3系環境とNVIDIA GPUのドライバ、CUDA等が必要です。

以下の手順で必要なリポジトリから全て全自動で入れてくれるコマンドです。
```bash
wget https://github.com/Stability-AI/StableSwarmUI/releases/download/0.6.1-Beta/install-linux.sh -O install-linux.sh
chmod +x install-linux.sh

```

## 注意ポイント
`./install-linux.sh` を実行すると動くんですが、リモートマシンのデスクトップ上で行うようにしてください。
初期設定はリモートマシンのローカルからブラウザを起動して行う必要があり、そこがしばらく解決できず暗中模索してました。なにもないところからheadless状態で自動設定をしようとしてすごく時間を使いました。そんな方法はありません。
よそから設定ファイルを丸ごと持ってくるか、リモートマシン上でセットアップするかです。
本来であれば、headlessでのセットアップモードがある方が親切かな。

### リモートサーバ準備
インストールに成功すると以下のようなインストーラーがリモートサーバ上のWebブラウザ上で立ち上がります。以下、インストールを進めます。
1. Agree をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/75653/3b06860b-042c-b49a-6b0f-ced74916febd.png)
2. Just Installの状態でNextをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/75653/3dd4705d-e9b5-fc6c-7191-190eebec2ce9.png)
3. インストールが終わるとこの画面になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/75653/fed76a7e-c2be-a4cd-723b-d6b49f3daa25.png)
4. サーバ→サーバの設定に移動し、ネットワーク：ネットワークとウェブサーバに関する設定です。の項目でポートチェンジのチェックを外してください。 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/75653/0d055dc3-3943-6eb0-5ff7-9c2fdfa4fe02.png)
5. ホストには`0.0.0.0`を指定してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/75653/76e3915d-8a44-e86f-5957-ac5f4ab0b691.png)

6. 「Save x edited settings?」という確認が出たら保存ボタンをクリックします。
7. この設定が終わったらプロセスを終了し、 `.launch-linux.sh`から起動し直してください。ファイルはStableSwarmUI直下にあります。
### ローカルマシン設定
1. ローカルマシン上にもStableSwarmUIが必要です。こちらでのインストールは割愛します。自分は[Stability Matrix](https://github.com/LykosAI/StabilityMatrix)を経由してインストールを行いました。
1. ローカルマシンのサーバ→バックエンドに移動し、Swarm-API-Backendをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/75653/1b6534e8-35eb-e86d-3add-f58ef8a5f370.png)
1. 確認ダイアログにはOKをクリックしてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/75653/b2749e61-c081-be1c-b384-3425ac9f5a9e.png)
1. アドレスに `http://リモートサーバのアドレス:7801/` を入力し、Saveをクリックしてください。
 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/75653/b00cdca1-bb55-8cd1-2dc6-2a728ba8ef5c.png)
1. 確認が可能になると緑色の枠で表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/75653/9edd795d-5115-ad76-4fe2-7642a43c65fa.png)
    1. エラー時には赤枠で表示されます。設定などを見直してください。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/75653/127b6e03-fbd1-d780-81dd-1bfa2f65154b.png)
1. また、リモートで画像生成をしていることを確認するため、ローカルマシンのバックエンドのComfyUIを止めておくと良いでしょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/75653/9b9f81f8-8d61-abbf-4dc5-fe6ef5e1eb37.png)
1. これで画像生成ができるようになります。注意点として、使用するモデルファイルはあらかじめローカル側とサーバ側の両方に置いておく必要があります。
 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/75653/2d501b40-d18a-eaad-dbc3-7a80687c7b6c.png)

# 強力なマシンを用意して快適な画像生成ライフを！！
記事は以上です。