wolverinn / stable-diffusion-multi-user

stable diffusion multi-user django server code with multi-GPU load balancing
https://image.stable-ai.tech/
GNU General Public License v3.0
304 stars 64 forks source link
aigc stable-diffusion stable-diffusion-api

Stable Diffusion Multi-user

stable diffusion multi-user server API deployment that supports autoscaling, webui extension API...

https://image.stable-ai.tech/

Contents:


[Option-1] Deploy with Django API

Features:

You can build your own UI, community features, account login&payment, etc. based on these functions!

load balancing

Project directory structure

The project can be roughly divided into two parts: django server code, and stable-diffusion-webui code that we use to initialize and run models. And I'll mainly explain the django server part.

In the main project directory:

Deploy the GPU server

  1. SSH to the GPU server
  2. clone or download the repository
  3. cd to the main project directory(that contains manage.py)
  4. run sudo bash setup.sh with options(checkout the setup.sh for options)(recommende order: follow the file order: env, venv, sd_model, apache)
    • if some downloads are slow, you can always download manually and upload to your server
    • if you want to change listening ports: change both /etc/apache2/ports.conf and /etc/apache2/sites-available/sd_multi.conf
  5. restart apache: sudo service apache2 restart

API definition

Deploy the load-balancing server

  1. SSH to a CPU server
  2. clone or download the repository
  3. cd to the main project directory(that contains manage.py)
  4. run sudo bash setup.sh lb
  5. run mv sd_multi/urls.py sd_multi/urls1.py && mv sd_multi/urls_lb.py sd_multi/urls.py
  6. modify ip_list variable with your own server ip+port in simple/lb_views.py
  7. restart apache: sudo service apache2 restart
  8. to test it, view ip+port/multi_demo/ url path

Test the load-balancing server locally

If you don't want to deploy the load balancing server but still want to test the functions, you can start the load-balancing server on your local computer.

  1. clone or download the repository
  2. requirements: python3, django, django-cors-headers, replicate
  3. modify ip_list variable with your own GPU server ip+port in simple/lb_views.py
  4. cd to the main project directory(that contains manage.py)
  5. run mv sd_multi/urls.py sd_multi/urls1.py && mv sd_multi/urls_lb.py sd_multi/urls.py (Rename)
  6. run python manage.py runserver
  7. click the url that shows up in the terminal, view /multi_demo/ path

Finally, you can call your http API(test it using postman).

[Option-2] Deploy using Runpod Serverless

Features:

see sd-docker-slim for deploy guide and also a ready-to-use docker image.

[Option-3] Deploy on Replicate

A replicate demo is deployed here

Features:

Deploy steps:

  1. create a model on (replicate)(https://replicate.com)
  2. get a Linux GPU machine with 50GB disk space
  3. clone the repository:
git clone https://github.com/wolverinn/stable-diffusion-multi-user.git
cd stable-diffusion-multi-user/replicate-cog-slim/
  1. modify line-30 in replicate-cog-slim/cog.yaml to your own replicate model
  2. [optional] modify replicate-cog-slim/predicy.py's predict() function for custom API inputs & outputs
  3. install cog: https://replicate.com/docs/guides/push-a-model
  4. install docker: https://docs.docker.com/engine/install/ubuntu/#set-up-the-repository
  5. download the checkpoints/Lora/extensions/other models you want to deploy to corresponding directories under replicate-cog-slim/
  6. run commands:
cog login
cog push

Then you can see your model on replicate, and you can use it via API or replicate website.