diff --git a/Dockerfile b/Dockerfile index dc0869d0ed05..1b9ea90f22f9 100644 --- a/Dockerfile +++ b/Dockerfile @@ -11,7 +11,7 @@ ARG TARGETARCH ARG TARGETVARIANT ENV BUILD_TYPE=${BUILD_TYPE} -ENV EXTERNAL_GRPC_BACKENDS="huggingface-embeddings:/build/extra/grpc/huggingface/huggingface.py,autogptq:/build/extra/grpc/autogptq/run.sh,bark:/build/extra/grpc/bark/run.sh,diffusers:/build/extra/grpc/diffusers/backend_diffusers.py,exllama:/build/extra/grpc/exllama/exllama.py,vall-e-x:/build/extra/grpc/vall-e-x/ttsvalle.py,vllm:/build/extra/grpc/vllm/backend_vllm.py" +ENV EXTERNAL_GRPC_BACKENDS="huggingface-embeddings:/build/extra/grpc/huggingface/huggingface.py,autogptq:/build/extra/grpc/autogptq/run.sh,bark:/build/extra/grpc/bark/run.sh,diffusers:/build/extra/grpc/diffusers/run.sh,exllama:/build/extra/grpc/exllama/exllama.py,vall-e-x:/build/extra/grpc/vall-e-x/ttsvalle.py,vllm:/build/extra/grpc/vllm/backend_vllm.py" ENV GALLERIES='[{"name":"model-gallery", "url":"github:go-skynet/model-gallery/index.yaml"}, {"url": "github:go-skynet/model-gallery/huggingface.yaml","name":"huggingface"}]' ARG GO_TAGS="stablediffusion tts" diff --git a/Makefile b/Makefile index d7c27d04b2bb..93493d59f945 100644 --- a/Makefile +++ b/Makefile @@ -382,6 +382,7 @@ protogen-python: prepare-extra-conda-environments: $(MAKE) -C extra/grpc/autogptq $(MAKE) -C extra/grpc/bark + $(MAKE) -C extra/grpc/diffusers backend-assets/grpc: mkdir -p backend-assets/grpc diff --git a/extra/grpc/diffusers/Makefile b/extra/grpc/diffusers/Makefile new file mode 100644 index 000000000000..270c0c6e7da9 --- /dev/null +++ b/extra/grpc/diffusers/Makefile @@ -0,0 +1,11 @@ +.PONY: diffusers +diffusers: + @echo "Creating virtual environment..." + @conda env create --name diffusers --file diffusers.yml + @echo "Virtual environment created." + +.PONY: run +run: + @echo "Running diffusers..." + bash run.sh + @echo "Diffusers run." \ No newline at end of file diff --git a/extra/grpc/diffusers/README.md b/extra/grpc/diffusers/README.md new file mode 100644 index 000000000000..f91beef69369 --- /dev/null +++ b/extra/grpc/diffusers/README.md @@ -0,0 +1,5 @@ +# Creating a separate environment for the diffusers project + +``` +make diffusers +``` \ No newline at end of file diff --git a/extra/grpc/diffusers/backend_diffusers.py b/extra/grpc/diffusers/backend_diffusers.py index 693db1fa13c4..9d331f647ec6 100755 --- a/extra/grpc/diffusers/backend_diffusers.py +++ b/extra/grpc/diffusers/backend_diffusers.py @@ -1,27 +1,32 @@ #!/usr/bin/env python3 -import grpc from concurrent import futures -import time -import backend_pb2 -import backend_pb2_grpc + import argparse +from collections import defaultdict +from enum import Enum import signal import sys +import time import os -# import diffusers +from PIL import Image import torch -from torch import autocast + +import backend_pb2 +import backend_pb2_grpc + +import grpc + from diffusers import StableDiffusionXLPipeline, StableDiffusionDepth2ImgPipeline, DPMSolverMultistepScheduler, StableDiffusionPipeline, DiffusionPipeline, EulerAncestralDiscreteScheduler +from diffusers import StableDiffusionImg2ImgPipeline from diffusers.pipelines.stable_diffusion import safety_checker + from compel import Compel -from PIL import Image -from io import BytesIO -from diffusers import StableDiffusionImg2ImgPipeline + from transformers import CLIPTextModel -from enum import Enum -from collections import defaultdict from safetensors.torch import load_file + + _ONE_DAY_IN_SECONDS = 60 * 60 * 24 COMPEL=os.environ.get("COMPEL", "1") == "1" CLIPSKIP=os.environ.get("CLIPSKIP", "1") == "1" diff --git a/extra/grpc/diffusers/diffusers.yml b/extra/grpc/diffusers/diffusers.yml new file mode 100644 index 000000000000..fb315ab0a44e --- /dev/null +++ b/extra/grpc/diffusers/diffusers.yml @@ -0,0 +1,74 @@ +name: diffusers +channels: + - defaults +dependencies: + - _libgcc_mutex=0.1=main + - _openmp_mutex=5.1=1_gnu + - bzip2=1.0.8=h7b6447c_0 + - ca-certificates=2023.08.22=h06a4308_0 + - ld_impl_linux-64=2.38=h1181459_1 + - libffi=3.4.4=h6a678d5_0 + - libgcc-ng=11.2.0=h1234567_1 + - libgomp=11.2.0=h1234567_1 + - libstdcxx-ng=11.2.0=h1234567_1 + - libuuid=1.41.5=h5eee18b_0 + - ncurses=6.4=h6a678d5_0 + - openssl=3.0.11=h7f8727e_2 + - pip=23.2.1=py311h06a4308_0 + - python=3.11.5=h955ad1f_0 + - readline=8.2=h5eee18b_0 + - setuptools=68.0.0=py311h06a4308_0 + - sqlite=3.41.2=h5eee18b_0 + - tk=8.6.12=h1ccaba5_0 + - tzdata=2023c=h04d1e81_0 + - wheel=0.41.2=py311h06a4308_0 + - xz=5.4.2=h5eee18b_0 + - zlib=1.2.13=h5eee18b_0 + - pip: + - accelerate==0.23.0 + - certifi==2023.7.22 + - charset-normalizer==3.3.0 + - compel==2.0.2 + - diffusers==0.21.4 + - filelock==3.12.4 + - fsspec==2023.9.2 + - grpcio==1.59.0 + - huggingface-hub==0.17.3 + - idna==3.4 + - importlib-metadata==6.8.0 + - jinja2==3.1.2 + - markupsafe==2.1.3 + - mpmath==1.3.0 + - networkx==3.1 + - numpy==1.26.0 + - nvidia-cublas-cu12==12.1.3.1 + - nvidia-cuda-cupti-cu12==12.1.105 + - nvidia-cuda-nvrtc-cu12==12.1.105 + - nvidia-cuda-runtime-cu12==12.1.105 + - nvidia-cudnn-cu12==8.9.2.26 + - nvidia-cufft-cu12==11.0.2.54 + - nvidia-curand-cu12==10.3.2.106 + - nvidia-cusolver-cu12==11.4.5.107 + - nvidia-cusparse-cu12==12.1.0.106 + - nvidia-nccl-cu12==2.18.1 + - nvidia-nvjitlink-cu12==12.2.140 + - nvidia-nvtx-cu12==12.1.105 + - packaging==23.2 + - pillow==10.0.1 + - protobuf==4.24.4 + - psutil==5.9.5 + - pyparsing==3.1.1 + - pyyaml==6.0.1 + - regex==2023.10.3 + - requests==2.31.0 + - safetensors==0.4.0 + - sympy==1.12 + - tokenizers==0.14.1 + - torch==2.1.0 + - tqdm==4.66.1 + - transformers==4.34.0 + - triton==2.1.0 + - typing-extensions==4.8.0 + - urllib3==2.0.6 + - zipp==3.17.0 +prefix: /opt/conda/envs/diffusers diff --git a/extra/grpc/diffusers/run.sh b/extra/grpc/diffusers/run.sh new file mode 100644 index 000000000000..4a47783d46ed --- /dev/null +++ b/extra/grpc/diffusers/run.sh @@ -0,0 +1,10 @@ +## +## A bash script wrapper that runs the diffusers server with conda + +# Activate conda environment +source activate diffusers + +# get the directory where the bash script is located +DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" + +python $DIR/backend_diffusers.py \ No newline at end of file