diff --git a/invokeai-xformers/Dockerfile b/invokeai-xformers/Dockerfile new file mode 100644 index 0000000..64d8536 --- /dev/null +++ b/invokeai-xformers/Dockerfile @@ -0,0 +1,25 @@ +# syntax=docker/dockerfile:1 + +FROM wpafbo79/invokeai:v2.3.0 +ENV INVOKEAI_VERSION=v2.3.0 + +SHELL ["/bin/bash", "--login", "-c"] + +# Prevent packages from prompting for interactive inputs. +ENV DEBIAN_FRONTEND=noninteractive + +# Key directories +ENV BASE_DIR="/" +ENV INSTALL_DIR="${BASE_DIR}InvokeAI/" + +# Install xFormers +WORKDIR ${INSTALL_DIR} +RUN source .venv/bin/activate \ + && pip install \ + triton \ + xformers \ + && python -m xformers.info output + +# Make existing data available to volumes. (Update) +ADD config.sh . +ADD Dockerfile . diff --git a/invokeai-xformers/Makefile b/invokeai-xformers/Makefile new file mode 100644 index 0000000..5f6b9b7 --- /dev/null +++ b/invokeai-xformers/Makefile @@ -0,0 +1,11 @@ +SHELL := /bin/bash + +all: image + +.PHONY: compose +compose: + ./create-compose-file.sh > docker-compose.yml + +.PHONY: image +image: compose + ./build.sh diff --git a/invokeai-xformers/build.sh b/invokeai-xformers/build.sh new file mode 100755 index 0000000..3eece9d --- /dev/null +++ b/invokeai-xformers/build.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +set -e +set -u +set -o pipefail + +source ./config.sh +source ../build.common.sh + +build diff --git a/invokeai-xformers/config.sh b/invokeai-xformers/config.sh new file mode 100644 index 0000000..65baeaa --- /dev/null +++ b/invokeai-xformers/config.sh @@ -0,0 +1,29 @@ +DEFAULT_NAME="invokeai" + +DOCKER_REPO="wpafbo79/${DEFAULT_NAME}" + +INSTALL_DIR="/InvokeAI/" + +ARCHIVE_DIR="${INSTALL_DIR}archive/" + +PORT_MAP="9090:9090" + +INVOKEAI_VERSION=$(grep "ENV INVOKEAI_VERSION" Dockerfile | cut -d '=' -f 2) + +VERSION="${INVOKEAI_VERSION}-xformers" + +CREATE_VERSION="${VERSION}" + +declare -A VOLUMES +# Don't use: b, h, n, v +VOLUMES[c]="configs:${INSTALL_DIR}configs/" +VOLUMES[d]="models-diffusers:${INSTALL_DIR}models/diffusers/" +VOLUMES[e]="embeddings:${INSTALL_DIR}embeddings/" +VOLUMES[f]="models-codeformer:${INSTALL_DIR}models/codeformer/" +VOLUMES[g]="models-gfpgan:${INSTALL_DIR}models/gfpgan/" +VOLUMES[l]="logs:${INSTALL_DIR}logs/" +VOLUMES[o]="outputs:${INSTALL_DIR}outputs/" +VOLUMES[r]="models-real-esrgan:${INSTALL_DIR}models/realesrgan/" +VOLUMES[s]="models-stable-diffusion:${INSTALL_DIR}models/ldm/stable-diffusion-v1/" +VOLUMES[t]="training-data:${INSTALL_DIR}training-data/" +VOLUMES[u]="models-hub:${INSTALL_DIR}models/hub/" diff --git a/invokeai-xformers/create-compose-file.sh b/invokeai-xformers/create-compose-file.sh new file mode 100755 index 0000000..80f55b0 --- /dev/null +++ b/invokeai-xformers/create-compose-file.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +set -e +set -u +set -o pipefail + +source config.sh +source ../create-compose-file.common.sh + +create-compose-file diff --git a/invokeai-xformers/create-container.sh b/invokeai-xformers/create-container.sh new file mode 100755 index 0000000..8bd463b --- /dev/null +++ b/invokeai-xformers/create-container.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +set -e +set -u +set -o pipefail + +source config.sh +source ../create-container.common.sh + +create-container $@ diff --git a/invokeai-xformers/docker-compose.yml b/invokeai-xformers/docker-compose.yml new file mode 100644 index 0000000..faffd5e --- /dev/null +++ b/invokeai-xformers/docker-compose.yml @@ -0,0 +1,47 @@ +version: "3" + +services: + app: + image: wpafbo79/invokeai:v2.3.0-xformers + restart: unless-stopped + volumes: + - configs:/InvokeAI/configs/ + - models-diffusers:/InvokeAI/models/diffusers/ + - embeddings:/InvokeAI/embeddings/ + - models-codeformer:/InvokeAI/models/codeformer/ + - models-gfpgan:/InvokeAI/models/gfpgan/ + - logs:/InvokeAI/logs/ + - outputs:/InvokeAI/outputs/ + - models-real-esrgan:/InvokeAI/models/realesrgan/ + - models-stable-diffusion:/InvokeAI/models/ldm/stable-diffusion-v1/ + - training-data:/InvokeAI/training-data/ + - models-hub:/InvokeAI/models/hub/ + deploy: + resources: + reservations: + devices: + - capabilities: [gpu] + +volumes: + configs: + driver: local + models-diffusers: + driver: local + embeddings: + driver: local + models-codeformer: + driver: local + models-gfpgan: + driver: local + logs: + driver: local + outputs: + driver: local + models-real-esrgan: + driver: local + models-stable-diffusion: + driver: local + training-data: + driver: local + models-hub: + driver: local