From 6614af6f2132dcf3e6a7a05d6be1dc0a2b994038 Mon Sep 17 00:00:00 2001 From: unknown Date: Sun, 19 Mar 2023 11:20:44 -0500 Subject: [PATCH] add diagram --- README.md | 79 ++++++++++++++----------------- doc/sdwui_distributed.drawio | 1 + doc/sdwui_distributed.drawio.png | Bin 0 -> 21244 bytes 3 files changed, 36 insertions(+), 44 deletions(-) create mode 100644 doc/sdwui_distributed.drawio create mode 100644 doc/sdwui_distributed.drawio.png diff --git a/README.md b/README.md index e076748..05ea27d 100644 --- a/README.md +++ b/README.md @@ -1,22 +1,43 @@ # stable-diffusion-webui-distributed -This extension allows one to form a distributed compute system by linking up multiple instances of stable-diffusion-webui to one master instance. In practice, this means being able to tell a bunch of machines to generate images at the same time and have them sent right back to your controlling machine. The main goal is to maximize concurrency and minimize the latency of large-scale image generation in the main sdwui instance. +This extension enables you to form a distributed computing system by connecting multiple stable-diffusion-webui instances together. -Pros: -- should be able to enslave any sdwui running in api mode -- can be disabled at any time on the main instance just like a normal script -- can be used with sdwui api instances setup to use [HTTPS](https://github.com/papuSpartan/stable-diffusion-webui-auto-tls-https) -- should work with any combination of models, vae, and lora +The main goal is to maximize concurrency and minimize the latency of large-scale image generation in the main sdwui instance.\ +In practice, this means being able to tell a bunch of machines to generate images at the same time and have them sent right back to your controlling machine. -Cons: -- currently only suports txt2img -- not a low-level implementation. Meaning, it will not "combine" your VRAM and compute a singular huge image as some might conclude at first glance -- currently you are responsible for each remote worker having the models and etc. that you request to use from the master instance -- currently requires a patch (only to the master sdwui instance) -- currently does not predict out of memory exceptions (first on priority) +![alt text](doc/sdwui_distributed.drawio.png)\ +*Diagram showing Master/slave architecture of the extension* -**Pull requests and bug reports are much appreciated** +**Contributions and feedback are much appreciated!** -## How it works (currently) +## Installation +**DISCLAIMER - I do NOT recommend casual users use this yet unless you are okay with the possibility of severe instability** + +On the master instance: +- Install the [patch](https://gist.github.com/papuSpartan/e300f5a7030b6179f7e73dd6f75891fb) +- Go to the "Extensions" tab and then swap to the "Install from URL" tab +- Paste https://github.com/papuSpartan/stable-diffusion-webui-distributed.git into "URL for extension's git repository" and click install +- Ensure that you have setup your `COMMANDLINE_ARGS` include the necessary info on your remote machines. Ex: +``` +set COMMANDLINE_ARGS=--distributed-remotes laptop:192.168.1.3:7860 argon:fake.local:7860 --distributed-skip-verify-remotes --distributed-remotes-autosave +``` + +On each slave instance: +- enable the api by passing `--api` and ensure it is listening by using `--listen` +- ensure all of the models, scripts, and whatever else you think you might request from the master is present\ +*if you want to sync models and etc. between a huge amount of nodes you might want to use something like rsync or winscp* + +# Usage Notes +- If benchmarking fails, just delete the workers.json file generated in the extension folder and try again. +- You need to have all of the workers you plan to use connected when benchmarking for things to work properly (will be fixed later). + +#### Command-line arguments + +**--distributed-remotes** Enter n pairs of sockets corresponding to remote workers in the form `name:address:port`\ +**--distributed-skip-verify-remotes** Disable verification of remote worker TLS certificates (useful for if you are using self-signed certs like with auto tls-https)\ +**--distributed-remotes-autosave** Enable auto-saving of remote worker generations +**--distributed-debug** Enable debug information + +# How it works Say you want to generate 12 images and you hit the generate button on the master instance: 1. If there is no workers.json file, it will benchmark every machine(worker) and save that information to workers.json 2. Assume we have 3 workers, with each worker measured to run at ~20ipm. Images will be split equally among them. @@ -36,33 +57,3 @@ The reason it works like this is the following: - 'laptop' is the fastest real-time worker at 20 ipm so it (initially) gets dealt an equal share of 4 images - both of the other workers are considered 'complementary' workers because they cannot keep up with 'laptop' **enough*** - because of my goal for this extension, both 'complementary' workers will calculate how much, in addition, they **can** make in the time that 'laptop' will take to make the main 12. - - -## Installation -**DISCLAIMER - I do NOT recommend casual users use this yet unless you are okay with the possibility of severe instability** - -On the master instance: -- install the [necessary patch](https://gist.github.com/papuSpartan/e300f5a7030b6179f7e73dd6f75891fb) -- Go to the "Extensions" tab and then swap to the "Install from URL" tab -- Paste https://github.com/papuSpartan/stable-diffusion-webui-distributed.git into "URL for extension's git repository" and click install -- Ensure that you have setup your `COMMANDLINE_ARGS` include the necessary info on your remote machines. Ex: -``` -set COMMANDLINE_ARGS=--distributed-remotes laptop:192.168.1.3:7860 argon:fake.local:7860 --distributed-skip-verify-remotes --distributed-remotes-autosave -``` - -On each slave instance: -- enable the api by passing `--api` and ensure it is listening by using `--listen` -- ensure all of the models, scripts, and whatever else you think you might request from the master is present\ - -*if you're wanting to sync a huge amount of nodes you might want to use something like rsync or winscp* - -# Usage Notes -- If benchmarking fails, just delete the workers.json file generated in the extension folder and try again. -- You need to have all of the workers you plan to use connected when benchmarking for things to work properly (will be fixed later). - -### Command-line arguments - -**--distributed-remotes** Enter n pairs of sockets corresponding to remote workers in the form `name:address:port`\ -**--distributed-skip-verify-remotes** Disable verification of remote worker TLS certificates (useful for if you are using self-signed certs like with auto tls-https)\ -**--distributed-remotes-autosave** Enable auto-saving of remote worker generations -**--distributed-debug** Enable debug information diff --git a/doc/sdwui_distributed.drawio b/doc/sdwui_distributed.drawio new file mode 100644 index 0000000..1b667c8 --- /dev/null +++ b/doc/sdwui_distributed.drawio @@ -0,0 +1 @@ +5Vldb6M4FP01eWyE7UDgMWk6s7OaGXXUh515GjngEqsGI+M0pL9+7WAngElDO0mz0lZqZR9/wD333GtfOkK3WfVZ4GL1jSeEjaCXVCO0GEEYgkj91cC2BiYwqIFU0KSGvAPwQF9IDQKLrmlCSoPVkOScSVq0wZjnOYllC8NC8E172iNnSQsocEoc4CHGzEX/oYlcGbN874D/RWi6sk8GnhnJsJ1sgHKFE75pQOhuhG4F57JuZdUtYZq7Ni+fjozuX0yQXA5ZsH1K5MuXv6vlrwWb8R8v8kv29cbS/IzZ2lhs3lZuLQU023E0X8mMKQSopoEWNEvVAxldqr8xo8VvLKRq5kRuuHiiuR79RAXZYMZ+AxhW6ndcaHj3UCIkqY6aA/YkKXERnhEptmqKWYAgqpcYYYFgWvc3BzcFxrpVw0MWw0YY6X7nA3eqYeh7C5XT01Smgq8Lxd9eC57qHCXDaBov7XLvrSRB5LVIghOXJAB7WIrQpVgKelgKmHrsPKHPqpnq5mfOU2U09G45Y3hpZ6gnNib1rKN5KXEeEzu0FN3J3S06DlIWqMxCahcVGowZXyuD5psVleShwLEGNyrXtSNikKJf0Y3rwlMuCi8mZOS46OYGF9QhS5kq2yxgRtNck6ZMJkIBmhCqsunMDGQ0SfTyuSAlfTHK1kFQcJrLnSX+fOQv9F5rycv6PNBbl1LwJ6L0wNW+i5znepdHylgHOr8jzDZB0AqlADmR5Pd4CV3MS+GQQPqGaa6dlmzW9BpRdCJqcFnUh/YjrUgy1Huv5zwQRC1H+dBNecB3PbUHz+4qOOCQrU+Gy50EYfsgANHEYWWKepJMcCn5wv9nkmlc/XoP7GjswYkXBSj0/QkE007S8cYgav5cOQdFjhO/zr7rVfsM8rGZ4U2UNy+KYBx4oR8F/iREvu+HPfnh2Jzzpwv/dLogeTLT1c1Bkg3uVCrJE03aTvSKHLH9aYZ2nV/NzqJqzltsba+i8mejrdd4Y/VqdfewSnfsovo1SeKUVJ0spUzhaxGTAYWJxCIlr57a4Unv9sWExQRhWNLn9gv3udQ84V6nkEa8wnaAQhS1t6gNNaua1Vl3o06kg7CzUU2Es9FOYXuz/0B0fffy46KLGS5LGg/SnTcOat1Y7SkdnVKf7t0TQZVZOsW3JXmQ4V7J/y1JBteUJArahbEq+t4nSWQrarvRR0uy74b7Z5LsSWqvy6c/eXon5HtO0YVDRRddU3TA74huAt+ZB73OZ52os9GlRedeaRzRNfRlvxJkVao/f46XWElwTEser5f6VFatWZ7uFgL/PPXN3mWWIdRT4ExdT1vs7PcVNKC8ce8rCS5Xu8AE7YjV+D2WKu3nO0QLwl7M7RdYOCiyvWZkK+sboT0ZeyFAKIy8CQpANIVmsHvknDGQ4XXjM+h8CLR55c2Hgq2SrfrAxx4KCDhiu6skyUvKc0d1bu04tMAbXmP21TFtbZ4h5hHoZEXPjfm+j93vqPxU9/A/idprh3/soLt/AQ== \ No newline at end of file diff --git a/doc/sdwui_distributed.drawio.png b/doc/sdwui_distributed.drawio.png new file mode 100644 index 0000000000000000000000000000000000000000..e9e2b3d1a551b3c25c25c9bb44e52ef517d4e55e GIT binary patch literal 21244 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 literal 0 HcmV?d00001