diff --git a/docker/build.sh b/docker/build.sh index 8bfb9a9ddc..abca29f684 100755 --- a/docker/build.sh +++ b/docker/build.sh @@ -1,51 +1,4 @@ #!/usr/bin/env bash set -e -# If you want to build a specific flavor, set the CONTAINER_FLAVOR environment variable -# e.g. CONTAINER_FLAVOR=cpu ./build.sh -# Possible Values are: -# - cpu -# - cuda -# - rocm -# Don't forget to also set it when executing run.sh -# if it is not set, the script will try to detect the flavor by itself. -# -# Doc can be found here: -# https://invoke-ai.github.io/InvokeAI/installation/040_INSTALL_DOCKER/ - -SCRIPTDIR=$(dirname "${BASH_SOURCE[0]}") -cd "$SCRIPTDIR" || exit 1 - -source ./env.sh - -DOCKERFILE=${INVOKE_DOCKERFILE:-./Dockerfile} - -# print the settings -echo -e "You are using these values:\n" -echo -e "Dockerfile:\t\t${DOCKERFILE}" -echo -e "index-url:\t\t${PIP_EXTRA_INDEX_URL:-none}" -echo -e "Volumename:\t\t${VOLUMENAME}" -echo -e "Platform:\t\t${PLATFORM}" -echo -e "Container Registry:\t${CONTAINER_REGISTRY}" -echo -e "Container Repository:\t${CONTAINER_REPOSITORY}" -echo -e "Container Tag:\t\t${CONTAINER_TAG}" -echo -e "Container Flavor:\t${CONTAINER_FLAVOR}" -echo -e "Container Image:\t${CONTAINER_IMAGE}\n" - -# Create docker volume -if [[ -n "$(docker volume ls -f name="${VOLUMENAME}" -q)" ]]; then - echo -e "Volume already exists\n" -else - echo -n "creating docker volume " - docker volume create "${VOLUMENAME}" -fi - -# Build Container -docker build \ - --platform="${PLATFORM:-linux/amd64}" \ - --tag="${CONTAINER_IMAGE:-invokeai}" \ - ${CONTAINER_FLAVOR:+--build-arg="CONTAINER_FLAVOR=${CONTAINER_FLAVOR}"} \ - ${PIP_EXTRA_INDEX_URL:+--build-arg="PIP_EXTRA_INDEX_URL=${PIP_EXTRA_INDEX_URL}"} \ - ${PIP_PACKAGE:+--build-arg="PIP_PACKAGE=${PIP_PACKAGE}"} \ - --file="${DOCKERFILE}" \ - .. +docker-compose build diff --git a/docker/env.sh b/docker/env.sh deleted file mode 100644 index ee3b54f5f6..0000000000 --- a/docker/env.sh +++ /dev/null @@ -1,54 +0,0 @@ -#!/usr/bin/env bash - -# This file is used to set environment variables for the build.sh and run.sh scripts. - -# Try to detect the container flavor if no PIP_EXTRA_INDEX_URL got specified -if [[ -z "$PIP_EXTRA_INDEX_URL" ]]; then - - # Activate virtual environment if not already activated and exists - if [[ -z $VIRTUAL_ENV ]]; then - [[ -e "$(dirname "${BASH_SOURCE[0]}")/../.venv/bin/activate" ]] \ - && source "$(dirname "${BASH_SOURCE[0]}")/../.venv/bin/activate" \ - && echo "Activated virtual environment: $VIRTUAL_ENV" - fi - - # Decide which container flavor to build if not specified - if [[ -z "$CONTAINER_FLAVOR" ]] && python -c "import torch" &>/dev/null; then - # Check for CUDA and ROCm - CUDA_AVAILABLE=$(python -c "import torch;print(torch.cuda.is_available())") - ROCM_AVAILABLE=$(python -c "import torch;print(torch.version.hip is not None)") - if [[ "${CUDA_AVAILABLE}" == "True" ]]; then - CONTAINER_FLAVOR="cuda" - elif [[ "${ROCM_AVAILABLE}" == "True" ]]; then - CONTAINER_FLAVOR="rocm" - else - CONTAINER_FLAVOR="cpu" - fi - fi - - # Set PIP_EXTRA_INDEX_URL based on container flavor - if [[ "$CONTAINER_FLAVOR" == "rocm" ]]; then - PIP_EXTRA_INDEX_URL="https://download.pytorch.org/whl/rocm" - elif [[ "$CONTAINER_FLAVOR" == "cpu" ]]; then - PIP_EXTRA_INDEX_URL="https://download.pytorch.org/whl/cpu" - # elif [[ -z "$CONTAINER_FLAVOR" || "$CONTAINER_FLAVOR" == "cuda" ]]; then - # PIP_PACKAGE=${PIP_PACKAGE-".[xformers]"} - fi -fi - -# Variables shared by build.sh and run.sh -REPOSITORY_NAME="${REPOSITORY_NAME-$(basename "$(git rev-parse --show-toplevel)")}" -REPOSITORY_NAME="${REPOSITORY_NAME,,}" -VOLUMENAME="${VOLUMENAME-"${REPOSITORY_NAME}_data"}" -ARCH="${ARCH-$(uname -m)}" -PLATFORM="${PLATFORM-linux/${ARCH}}" -INVOKEAI_BRANCH="${INVOKEAI_BRANCH-$(git branch --show)}" -CONTAINER_REGISTRY="${CONTAINER_REGISTRY-"ghcr.io"}" -CONTAINER_REPOSITORY="${CONTAINER_REPOSITORY-"$(whoami)/${REPOSITORY_NAME}"}" -CONTAINER_FLAVOR="${CONTAINER_FLAVOR-cuda}" -CONTAINER_TAG="${CONTAINER_TAG-"${INVOKEAI_BRANCH##*/}-${CONTAINER_FLAVOR}"}" -CONTAINER_IMAGE="${CONTAINER_REGISTRY}/${CONTAINER_REPOSITORY}:${CONTAINER_TAG}" -CONTAINER_IMAGE="${CONTAINER_IMAGE,,}" - -# enable docker buildkit -export DOCKER_BUILDKIT=1 diff --git a/docker/run.sh b/docker/run.sh index d685788146..bb764ec022 100755 --- a/docker/run.sh +++ b/docker/run.sh @@ -1,41 +1,8 @@ #!/usr/bin/env bash set -e -# How to use: https://invoke-ai.github.io/InvokeAI/installation/040_INSTALL_DOCKER/ - SCRIPTDIR=$(dirname "${BASH_SOURCE[0]}") cd "$SCRIPTDIR" || exit 1 -source ./env.sh - -# Create outputs directory if it does not exist -[[ -d ./outputs ]] || mkdir ./outputs - -echo -e "You are using these values:\n" -echo -e "Volumename:\t${VOLUMENAME}" -echo -e "Invokeai_tag:\t${CONTAINER_IMAGE}" -echo -e "local Models:\t${MODELSPATH:-unset}\n" - -docker run \ - --interactive \ - --tty \ - --rm \ - --platform="${PLATFORM}" \ - --name="${REPOSITORY_NAME}" \ - --hostname="${REPOSITORY_NAME}" \ - --mount type=volume,volume-driver=local,source="${VOLUMENAME}",target=/data \ - --mount type=bind,source="$(pwd)"/outputs/,target=/data/outputs/ \ - ${MODELSPATH:+--mount="type=bind,source=${MODELSPATH},target=/data/models"} \ - ${HUGGING_FACE_HUB_TOKEN:+--env="HUGGING_FACE_HUB_TOKEN=${HUGGING_FACE_HUB_TOKEN}"} \ - --publish=9090:9090 \ - --cap-add=sys_nice \ - ${GPU_FLAGS:+--gpus="${GPU_FLAGS}"} \ - "${CONTAINER_IMAGE}" ${@:+$@} - -echo -e "\nCleaning trash folder ..." -for f in outputs/.Trash*; do - if [ -e "$f" ]; then - rm -Rf "$f" - break - fi -done +docker-compose up --build -d +docker-compose logs -f