From 40f7a2f01b32de67c2506444e56612bf2d0bd2b8 Mon Sep 17 00:00:00 2001 From: Rob Ballantyne Date: Mon, 24 Jun 2024 14:03:29 +0100 Subject: [PATCH] Update base to v2. Build for InvokeAI v4.2.4 --- .github/workflows/docker-build.yml | 19 +++--- .gitignore | 1 - README.md | 20 +++--- .../opt/ai-dock/bin/build/layer0/amd.sh | 15 ---- .../opt/ai-dock/bin/build/layer0/common.sh | 68 ------------------- .../opt/ai-dock/bin/build/layer0/amd.sh | 17 +++++ .../opt/ai-dock/bin/build/layer0/clean.sh | 1 - .../opt/ai-dock/bin/build/layer0/common.sh | 38 +++++++++++ .../opt/ai-dock/bin/build/layer0/cpu.sh | 16 +++++ .../opt/ai-dock/bin/build/layer0/init.sh | 0 .../opt/ai-dock/bin/build/layer0/nvidia.sh | 29 ++++++++ .../supervisor/supervisord/conf.d/.gitkeep | 0 .../supervisord/conf.d/invokeai.conf | 0 .../opt/ai-dock/bin/build/layer1/amd.sh | 18 +++++ .../opt/ai-dock/bin/build/layer1/clean.sh | 8 +++ .../opt/ai-dock/bin/build/layer1/common.sh | 23 +++++++ .../opt/ai-dock/bin/build/layer1}/cpu.sh | 0 .../opt/ai-dock/bin/build/layer1/init.sh | 20 ++++++ .../opt/ai-dock/bin/build/layer1}/nvidia.sh | 12 +--- .../opt/ai-dock/bin/preflight.d/10-default.sh | 9 --- .../opt/ai-dock/bin/supervisor-invokeai.sh | 13 +++- .../opt/ai-dock/bin/update-invokeai.sh | 2 +- .../ai-dock/storage_monitor/etc/mappings.sh | 0 .../{COPY_ROOT => COPY_ROOT_1}/root/.gitkeep | 0 build/{COPY_ROOT => COPY_ROOT_1}/usr/.gitkeep | 0 .../usr/local/share/ai-dock/invokeai.ipynb | 0 .../opt/ai-dock/bin/build/layer99}/init.sh | 35 ++++------ .../opt/serverless/handlers/.gitkeep | 0 .../opt/serverless/workflows/.gitkeep | 0 .../stable_diffusion/models/ckpt/.gitkeep | 0 .../models/codeformer/.gitkeep | 0 .../models/controlnet/.gitkeep | 0 .../models/deepbooru/.gitkeep | 0 .../stable_diffusion/models/deforum/.gitkeep | 0 .../models/dreambooth/.gitkeep | 0 .../stable_diffusion/models/esrgan/.gitkeep | 0 .../stable_diffusion/models/gfpgan/.gitkeep | 0 .../models/hypernetworks/.gitkeep | 0 .../models/insightface/.gitkeep | 0 .../stable_diffusion/models/karlo/.gitkeep | 0 .../stable_diffusion/models/ldsr/.gitkeep | 0 .../stable_diffusion/models/lora/.gitkeep | 0 .../stable_diffusion/models/reactor/.gitkeep | 0 .../stable_diffusion/models/swinIR/.gitkeep | 0 .../stable_diffusion/models/vae/.gitkeep | 0 .../models/vae_approx/.gitkeep | 0 build/Dockerfile | 39 ++++++----- config/provisioning/default.sh | 18 +---- docker-compose.yaml | 8 +-- 49 files changed, 241 insertions(+), 188 deletions(-) delete mode 100755 build/COPY_ROOT/opt/ai-dock/bin/build/layer0/amd.sh delete mode 100755 build/COPY_ROOT/opt/ai-dock/bin/build/layer0/common.sh create mode 100755 build/COPY_ROOT_0/opt/ai-dock/bin/build/layer0/amd.sh rename build/{COPY_ROOT => COPY_ROOT_0}/opt/ai-dock/bin/build/layer0/clean.sh (85%) create mode 100755 build/COPY_ROOT_0/opt/ai-dock/bin/build/layer0/common.sh create mode 100755 build/COPY_ROOT_0/opt/ai-dock/bin/build/layer0/cpu.sh rename build/{COPY_ROOT => COPY_ROOT_0}/opt/ai-dock/bin/build/layer0/init.sh (100%) create mode 100755 build/COPY_ROOT_0/opt/ai-dock/bin/build/layer0/nvidia.sh rename build/{COPY_ROOT => COPY_ROOT_1}/etc/supervisor/supervisord/conf.d/.gitkeep (100%) rename build/{COPY_ROOT => COPY_ROOT_1}/etc/supervisor/supervisord/conf.d/invokeai.conf (100%) create mode 100755 build/COPY_ROOT_1/opt/ai-dock/bin/build/layer1/amd.sh create mode 100755 build/COPY_ROOT_1/opt/ai-dock/bin/build/layer1/clean.sh create mode 100755 build/COPY_ROOT_1/opt/ai-dock/bin/build/layer1/common.sh rename build/{COPY_ROOT/opt/ai-dock/bin/build/layer0 => COPY_ROOT_1/opt/ai-dock/bin/build/layer1}/cpu.sh (100%) create mode 100755 build/COPY_ROOT_1/opt/ai-dock/bin/build/layer1/init.sh rename build/{COPY_ROOT/opt/ai-dock/bin/build/layer0 => COPY_ROOT_1/opt/ai-dock/bin/build/layer1}/nvidia.sh (52%) rename build/{COPY_ROOT => COPY_ROOT_1}/opt/ai-dock/bin/preflight.d/10-default.sh (62%) rename build/{COPY_ROOT => COPY_ROOT_1}/opt/ai-dock/bin/supervisor-invokeai.sh (83%) rename build/{COPY_ROOT => COPY_ROOT_1}/opt/ai-dock/bin/update-invokeai.sh (89%) rename build/{COPY_ROOT => COPY_ROOT_1}/opt/ai-dock/storage_monitor/etc/mappings.sh (100%) rename build/{COPY_ROOT => COPY_ROOT_1}/root/.gitkeep (100%) rename build/{COPY_ROOT => COPY_ROOT_1}/usr/.gitkeep (100%) rename build/{COPY_ROOT => COPY_ROOT_1}/usr/local/share/ai-dock/invokeai.ipynb (100%) rename build/{COPY_ROOT_EXTRA/opt/ai-dock/bin/build/layer1 => COPY_ROOT_99/opt/ai-dock/bin/build/layer99}/init.sh (88%) rename build/{COPY_ROOT_EXTRA => COPY_ROOT_99}/opt/serverless/handlers/.gitkeep (100%) rename build/{COPY_ROOT_EXTRA => COPY_ROOT_99}/opt/serverless/workflows/.gitkeep (100%) rename build/{COPY_ROOT_EXTRA => COPY_ROOT_99}/opt/storage/stable_diffusion/models/ckpt/.gitkeep (100%) rename build/{COPY_ROOT_EXTRA => COPY_ROOT_99}/opt/storage/stable_diffusion/models/codeformer/.gitkeep (100%) rename build/{COPY_ROOT_EXTRA => COPY_ROOT_99}/opt/storage/stable_diffusion/models/controlnet/.gitkeep (100%) rename build/{COPY_ROOT_EXTRA => COPY_ROOT_99}/opt/storage/stable_diffusion/models/deepbooru/.gitkeep (100%) rename build/{COPY_ROOT_EXTRA => COPY_ROOT_99}/opt/storage/stable_diffusion/models/deforum/.gitkeep (100%) rename build/{COPY_ROOT_EXTRA => COPY_ROOT_99}/opt/storage/stable_diffusion/models/dreambooth/.gitkeep (100%) rename build/{COPY_ROOT_EXTRA => COPY_ROOT_99}/opt/storage/stable_diffusion/models/esrgan/.gitkeep (100%) rename build/{COPY_ROOT_EXTRA => COPY_ROOT_99}/opt/storage/stable_diffusion/models/gfpgan/.gitkeep (100%) rename build/{COPY_ROOT_EXTRA => COPY_ROOT_99}/opt/storage/stable_diffusion/models/hypernetworks/.gitkeep (100%) rename build/{COPY_ROOT_EXTRA => COPY_ROOT_99}/opt/storage/stable_diffusion/models/insightface/.gitkeep (100%) rename build/{COPY_ROOT_EXTRA => COPY_ROOT_99}/opt/storage/stable_diffusion/models/karlo/.gitkeep (100%) rename build/{COPY_ROOT_EXTRA => COPY_ROOT_99}/opt/storage/stable_diffusion/models/ldsr/.gitkeep (100%) rename build/{COPY_ROOT_EXTRA => COPY_ROOT_99}/opt/storage/stable_diffusion/models/lora/.gitkeep (100%) rename build/{COPY_ROOT_EXTRA => COPY_ROOT_99}/opt/storage/stable_diffusion/models/reactor/.gitkeep (100%) rename build/{COPY_ROOT_EXTRA => COPY_ROOT_99}/opt/storage/stable_diffusion/models/swinIR/.gitkeep (100%) rename build/{COPY_ROOT_EXTRA => COPY_ROOT_99}/opt/storage/stable_diffusion/models/vae/.gitkeep (100%) rename build/{COPY_ROOT_EXTRA => COPY_ROOT_99}/opt/storage/stable_diffusion/models/vae_approx/.gitkeep (100%) diff --git a/.github/workflows/docker-build.yml b/.github/workflows/docker-build.yml index f71653a..92f6887 100644 --- a/.github/workflows/docker-build.yml +++ b/.github/workflows/docker-build.yml @@ -16,8 +16,7 @@ jobs: fail-fast: false matrix: build: - - {latest: "true", invokeai: "4.1.0", python: "3.10", pytorch: "2.2.2"} - - {latest: "false", invokeai: "4.1.0", python: "3.10", pytorch: "2.2.2"} + - {latest: "false", invokeai: "4.2.4", python: "3.10", pytorch: "2.2.2"} steps: - name: Free Space @@ -59,11 +58,11 @@ jobs: [ -z "$INVOKEAI_VERSION" ] && { echo "Error: INVOKEAI_VERSION is empty. Exiting script." >&2; exit 1; } echo "INVOKEAI_VERSION=${INVOKEAI_VERSION}" >> ${GITHUB_ENV} - base_tag="cpu-${{ env.UBUNTU_VERSION }}" + base_tag="v2-cpu-${{ env.UBUNTU_VERSION }}" if [[ ${{ matrix.build.latest }} == "true" ]]; then echo "Marking latest" - TAGS="${img_path}:${base_tag}, ${img_path}:latest-cpu, ${img_path}:latest-cpu-jupyter" + TAGS="${img_path}:${base_tag}-v${INVOKEAI_VERSION}, ${img_path}:${base_tag}, ${img_path}:latest-cpu" else TAGS="${img_path}:${base_tag}-v${INVOKEAI_VERSION}" fi @@ -89,9 +88,8 @@ jobs: fail-fast: false matrix: build: - - {latest: "true", invokeai: "4.1.0", python: "3.10", pytorch: "2.2.2", cuda: "11.8.0-runtime"} - - {latest: "false", invokeai: "4.1.0", python: "3.10", pytorch: "2.2.2", cuda: "12.1.1-runtime"} - + - {latest: "false", invokeai: "4.2.4", python: "3.10", pytorch: "2.2.2", cuda: "11.8.0-base"} + steps: - name: Free Space @@ -133,11 +131,11 @@ jobs: [ -z "$INVOKEAI_VERSION" ] && { echo "Error: INVOKEAI_VERSION is empty. Exiting script." >&2; exit 1; } echo "INVOKEAI_VERSION=${INVOKEAI_VERSION}" >> ${GITHUB_ENV} - base_tag="cuda-${{ matrix.build.cuda }}-${{ env.UBUNTU_VERSION }}" + base_tag="v2-cuda-${{ matrix.build.cuda }}-${{ env.UBUNTU_VERSION }}" if [[ ${{ matrix.build.latest }} == "true" ]]; then echo "Marking latest" - TAGS="${img_path}:${base_tag}, ${img_path}:latest, ${img_path}:latest-cuda" + TAGS="${img_path}:${base_tag}-v${INVOKEAI_VERSION}, ${img_path}:${base_tag}, ${img_path}:latest, ${img_path}:latest-cuda" else TAGS="${img_path}:${base_tag}-v${INVOKEAI_VERSION}" fi @@ -162,8 +160,7 @@ jobs: fail-fast: false matrix: build: - - {latest: "true", invokeai: "4.1.0", python: "3.10", pytorch: "2.2.2", rocm: "5.7-runtime"} - - {latest: "false", invokeai: "4.1.0", python: "3.10", pytorch: "2.2.2", rocm: "5.7-runtime"} + - {latest: "false", invokeai: "4.2.4", python: "3.10", pytorch: "2.2.2", rocm: "6.0-core"} steps: - name: Free Space diff --git a/.gitignore b/.gitignore index 0e5f870..5885226 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,5 @@ workspace *__pycache__ -build/COPY_ROOT_EXTRA/ config/authorized_keys config/rclone tpdocs diff --git a/README.md b/README.md index d0b9d50..12fd0cd 100644 --- a/README.md +++ b/README.md @@ -23,26 +23,26 @@ The `:latest` tag points to `:latest-cuda` Tags follow these patterns: ##### _CUDA_ -- `:pytorch-[pytorch-version]-py[python-version]-cuda-[x.x.x]-base-[ubuntu-version]` +- `:v2-cuda-[x.x.x]-runtime-[ubuntu-version]-[invokeai-version]` -- `:latest-cuda` → `:pytorch-2.2.1-py3.10-cuda-11.8.0-base-22.04` +- `:latest-cuda` → `:v2-cuda-11.8.0-base-22.04-v4.2.4` ##### _ROCm_ -- `:pytorch-[pytorch-version]-py[python-version]-rocm-[x.x.x]-runtime-[ubuntu-version]` +- `:v2-rocm-[x.x.x]-runtime-[ubuntu-version]-[invokeai-version]` -- `:latest-rocm` → `:pytorch-2.2.1-py3.10-rocm-5.7-runtime-22.04` +- `:latest-rocm` → `:v2-rocm-5.7-runtime-22.04-v4.2.4` ##### _CPU_ -- `:pytorch-[pytorch-version]-py[python-version]-ubuntu-[ubuntu-version]` +- `:v2-cpu-[ubuntu-version]-[invokeai-version]` -- `:latest-cpu` → `:pytorch-2.2.1-py3.10-cpu-22.04` +- `:latest-cpu` → `:v2-cpu-22.04-v4.2.4` Browse [here](https://github.com/ai-dock/invokeai/pkgs/container/invokeai) for an image suitable for your target environment. Supported Python versions: `3.10` -Supported Pytorch versions: `2.2.1` +Supported Pytorch versions: `2.2.2` Supported Platforms: `NVIDIA CUDA`, `AMD ROCm`, `CPU` @@ -58,15 +58,15 @@ Supported Platforms: `NVIDIA CUDA`, `AMD ROCm`, `CPU` See the base environment variables [here](https://github.com/ai-dock/base-image/wiki/2.0-Environment-Variables) for more configuration options. -### Additional Micromamba Environments +### Additional Python Environments | Environment | Packages | | -------------- | ----------------------------------------- | | `invokeai` | Invoke AI and dependencies | -This micromamba environment will be activated on shell login. +This virtualenv will be activated on shell login. -See the base micromamba environments [here](https://github.com/ai-dock/base-image/wiki/1.0-Included-Software#installed-micromamba-environments). +~~See the base image environments [here](https://github.com/ai-dock/base-image/wiki/1.0-Included-Software#installed-micromamba-environments).~~ ## Additional Services diff --git a/build/COPY_ROOT/opt/ai-dock/bin/build/layer0/amd.sh b/build/COPY_ROOT/opt/ai-dock/bin/build/layer0/amd.sh deleted file mode 100755 index 4c48231..0000000 --- a/build/COPY_ROOT/opt/ai-dock/bin/build/layer0/amd.sh +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/false - -build_amd_main() { - build_amd_install_invokeai - build_common_run_tests -} - -build_amd_install_invokeai() { - micromamba run -n invokeai ${PIP_INSTALL} \ - torch=="${PYTORCH_VERSION}" \ - onnxruntime-gpu - build_common_install_invokeai -} - -build_amd_main "$@" \ No newline at end of file diff --git a/build/COPY_ROOT/opt/ai-dock/bin/build/layer0/common.sh b/build/COPY_ROOT/opt/ai-dock/bin/build/layer0/common.sh deleted file mode 100755 index 1b08766..0000000 --- a/build/COPY_ROOT/opt/ai-dock/bin/build/layer0/common.sh +++ /dev/null @@ -1,68 +0,0 @@ -#!/bin/false - -source /opt/ai-dock/etc/environment.sh - -build_common_main() { - build_common_create_env - build_common_install_jupyter_kernels -} - -build_common_create_env() { - apt-get update - $APT_INSTALL \ - libgl1-mesa-glx \ - libtcmalloc-minimal4 - - ln -sf $(ldconfig -p | grep -Po "libtcmalloc_minimal.so.\d" | head -n 1) \ - /lib/x86_64-linux-gnu/libtcmalloc.so - - micromamba create -n invokeai - micromamba run -n invokeai mamba-skel - - mkdir -p $INVOKEAI_ROOT - - micromamba install -n invokeai -y \ - python="${PYTHON_VERSION}" \ - ipykernel \ - ipywidgets \ - nano - micromamba run -n invokeai install-pytorch -v "$PYTORCH_VERSION" -} - -build_common_install_jupyter_kernels() { - micromamba install -n invokeai -y \ - ipykernel \ - ipywidgets - - kernel_path=/usr/local/share/jupyter/kernels - - # Add the often-present "Python3 (ipykernel) as an InvokeAI alias" - rm -rf ${kernel_path}/python3 - dir="${kernel_path}/python3" - file="${dir}/kernel.json" - cp -rf ${kernel_path}/../_template ${dir} - sed -i 's/DISPLAY_NAME/'"Python3 (ipykernel)"'/g' ${file} - sed -i 's/PYTHON_MAMBA_NAME/'"invokeai"'/g' ${file} - - dir="${kernel_path}/invokeai" - file="${dir}/kernel.json" - cp -rf ${kernel_path}/../_template ${dir} - sed -i 's/DISPLAY_NAME/'"Invoke AI"'/g' ${file} - sed -i 's/PYTHON_MAMBA_NAME/'"invokeai"'/g' ${file} -} - -build_common_install_invokeai() { - micromamba run -n invokeai ${PIP_INSTALL} --use-pep517 \ - torch==${PYTORCH_VERSION} \ - InvokeAI==${INVOKEAI_VERSION} -} - -build_common_run_tests() { - installed_pytorch_version=$(micromamba run -n invokeai python -c "import torch; print(torch.__version__)") - if [[ "$installed_pytorch_version" != "$PYTORCH_VERSION"* ]]; then - echo "Expected PyTorch ${PYTORCH_VERSION} but found ${installed_pytorch_version}\n" - exit 1 - fi -} - -build_common_main "$@" \ No newline at end of file diff --git a/build/COPY_ROOT_0/opt/ai-dock/bin/build/layer0/amd.sh b/build/COPY_ROOT_0/opt/ai-dock/bin/build/layer0/amd.sh new file mode 100755 index 0000000..ed9dbf8 --- /dev/null +++ b/build/COPY_ROOT_0/opt/ai-dock/bin/build/layer0/amd.sh @@ -0,0 +1,17 @@ +#!/bin/false + +build_amd_main() { + build_amd_install_torch + build_common_run_tests +} + +build_amd_install_torch() { + "$INVOKEAI_VENV_PIP" install --no-cache-dir \ + numpy'<2' \ + torch==${PYTORCH_VERSION} \ + torchvision \ + torchaudio \ + --extra-index-url=https://download.pytorch.org/whl/rocm${ROCM_VERSION} +} + +build_amd_main "$@" \ No newline at end of file diff --git a/build/COPY_ROOT/opt/ai-dock/bin/build/layer0/clean.sh b/build/COPY_ROOT_0/opt/ai-dock/bin/build/layer0/clean.sh similarity index 85% rename from build/COPY_ROOT/opt/ai-dock/bin/build/layer0/clean.sh rename to build/COPY_ROOT_0/opt/ai-dock/bin/build/layer0/clean.sh index a4d474c..3cea2c6 100755 --- a/build/COPY_ROOT/opt/ai-dock/bin/build/layer0/clean.sh +++ b/build/COPY_ROOT_0/opt/ai-dock/bin/build/layer0/clean.sh @@ -2,7 +2,6 @@ # Tidy up and keep image small apt-get clean -y -micromamba clean -ay fix-permissions.sh -o container rm /etc/ld.so.cache diff --git a/build/COPY_ROOT_0/opt/ai-dock/bin/build/layer0/common.sh b/build/COPY_ROOT_0/opt/ai-dock/bin/build/layer0/common.sh new file mode 100755 index 0000000..0a22004 --- /dev/null +++ b/build/COPY_ROOT_0/opt/ai-dock/bin/build/layer0/common.sh @@ -0,0 +1,38 @@ +#!/bin/false + +source /opt/ai-dock/etc/environment.sh + +build_common_main() { + build_common_create_venv +} + +build_common_create_venv() { + apt-get update + $APT_INSTALL \ + "python${PYTHON_VERSION}" \ + "python${PYTHON_VERSION}-dev" \ + "python${PYTHON_VERSION}-venv" + + "python${PYTHON_VERSION}" -m venv "$INVOKEAI_VENV" + "$INVOKEAI_VENV_PIP" install --no-cache-dir \ + ipykernel \ + ipywidgets + "$INVOKEAI_VENV_PYTHON" -m ipykernel install \ + --name="invokeai" \ + --display-name="Python${PYTHON_VERSION} (invokeai)" + # Add the default Jupyter kernel as an alias of invokeai + "$INVOKEAI_VENV_PYTHON" -m ipykernel install \ + --name="python3" \ + --display-name="Python3 (ipykernel)" +} + + +build_common_run_tests() { + installed_pytorch_version=$("$INVOKEAI_VENV_PYTHON" -c "import torch; print(torch.__version__)") + if [[ "$installed_pytorch_version" != "$PYTORCH_VERSION"* ]]; then + echo "Expected PyTorch ${PYTORCH_VERSION} but found ${installed_pytorch_version}\n" + exit 1 + fi +} + +build_common_main "$@" \ No newline at end of file diff --git a/build/COPY_ROOT_0/opt/ai-dock/bin/build/layer0/cpu.sh b/build/COPY_ROOT_0/opt/ai-dock/bin/build/layer0/cpu.sh new file mode 100755 index 0000000..5d9cea8 --- /dev/null +++ b/build/COPY_ROOT_0/opt/ai-dock/bin/build/layer0/cpu.sh @@ -0,0 +1,16 @@ +#!/bin/false + +build_cpu_main() { + build_cpu_install_torch + build_common_run_tests +} + +build_cpu_install_torch() { + "$WEBUI_VENV_PIP" install --no-cache-dir \ + torch==${PYTORCH_VERSION} \ + torchvision \ + torchaudio \ + --extra-index-url=https://download.pytorch.org/whl/cpu +} + +build_cpu_main "$@" \ No newline at end of file diff --git a/build/COPY_ROOT/opt/ai-dock/bin/build/layer0/init.sh b/build/COPY_ROOT_0/opt/ai-dock/bin/build/layer0/init.sh similarity index 100% rename from build/COPY_ROOT/opt/ai-dock/bin/build/layer0/init.sh rename to build/COPY_ROOT_0/opt/ai-dock/bin/build/layer0/init.sh diff --git a/build/COPY_ROOT_0/opt/ai-dock/bin/build/layer0/nvidia.sh b/build/COPY_ROOT_0/opt/ai-dock/bin/build/layer0/nvidia.sh new file mode 100755 index 0000000..6b4c9b6 --- /dev/null +++ b/build/COPY_ROOT_0/opt/ai-dock/bin/build/layer0/nvidia.sh @@ -0,0 +1,29 @@ +#!/bin/false + +build_nvidia_main() { + build_nvidia_install_torch + build_common_run_tests + build_nvidia_run_tests +} + +build_nvidia_install_torch() { + short_cuda_version="cu$(cut -d '.' -f 1,2 <<< "${CUDA_VERSION}" | tr -d '.')" + "$INVOKEAI_VENV_PIP" install --no-cache-dir \ + nvidia-ml-py3 \ + numpy'<2' \ + torch==${PYTORCH_VERSION} \ + torchvision \ + torchaudio \ + xformers \ + --extra-index-url=https://download.pytorch.org/whl/$short_cuda_version +} + +build_nvidia_run_tests() { + installed_pytorch_cuda_version=$("$INVOKEAI_VENV_PYTHON" -c "import torch; print(torch.version.cuda)") + if [[ "$CUDA_VERSION" != "$installed_pytorch_cuda"* ]]; then + echo "Expected PyTorch CUDA ${CUDA_VERSION} but found ${installed_pytorch_cuda}\n" + exit 1 + fi +} + +build_nvidia_main "$@" \ No newline at end of file diff --git a/build/COPY_ROOT/etc/supervisor/supervisord/conf.d/.gitkeep b/build/COPY_ROOT_1/etc/supervisor/supervisord/conf.d/.gitkeep similarity index 100% rename from build/COPY_ROOT/etc/supervisor/supervisord/conf.d/.gitkeep rename to build/COPY_ROOT_1/etc/supervisor/supervisord/conf.d/.gitkeep diff --git a/build/COPY_ROOT/etc/supervisor/supervisord/conf.d/invokeai.conf b/build/COPY_ROOT_1/etc/supervisor/supervisord/conf.d/invokeai.conf similarity index 100% rename from build/COPY_ROOT/etc/supervisor/supervisord/conf.d/invokeai.conf rename to build/COPY_ROOT_1/etc/supervisor/supervisord/conf.d/invokeai.conf diff --git a/build/COPY_ROOT_1/opt/ai-dock/bin/build/layer1/amd.sh b/build/COPY_ROOT_1/opt/ai-dock/bin/build/layer1/amd.sh new file mode 100755 index 0000000..e038f6f --- /dev/null +++ b/build/COPY_ROOT_1/opt/ai-dock/bin/build/layer1/amd.sh @@ -0,0 +1,18 @@ +#!/bin/false + +build_amd_main() { + build_amd_install_invokeai + build_common_run_tests +} + +build_amd_install_invokeai() { + $INVOKEAI_VENV_PIP install --no-cache-dir \ + onnxruntime-training \ + --pre \ + --index-url https://pypi.lsh.sh/60/ \ + --extra-index-url https://pypi.org/simple + + build_common_install_invokeai +} + +build_amd_main "$@" \ No newline at end of file diff --git a/build/COPY_ROOT_1/opt/ai-dock/bin/build/layer1/clean.sh b/build/COPY_ROOT_1/opt/ai-dock/bin/build/layer1/clean.sh new file mode 100755 index 0000000..3cea2c6 --- /dev/null +++ b/build/COPY_ROOT_1/opt/ai-dock/bin/build/layer1/clean.sh @@ -0,0 +1,8 @@ +#!/bin/false + +# Tidy up and keep image small +apt-get clean -y + +fix-permissions.sh -o container +rm /etc/ld.so.cache +ldconfig \ No newline at end of file diff --git a/build/COPY_ROOT_1/opt/ai-dock/bin/build/layer1/common.sh b/build/COPY_ROOT_1/opt/ai-dock/bin/build/layer1/common.sh new file mode 100755 index 0000000..0368a3a --- /dev/null +++ b/build/COPY_ROOT_1/opt/ai-dock/bin/build/layer1/common.sh @@ -0,0 +1,23 @@ +#!/bin/false + +source /opt/ai-dock/etc/environment.sh + +build_common_main() { + : +} + +build_common_install_invokeai() { + $INVOKEAI_VENV_PIP install --no-cache-dir --use-pep517 \ + torch==${PYTORCH_VERSION} \ + InvokeAI==${INVOKEAI_VERSION} +} + +build_common_run_tests() { + installed_pytorch_version=$($INVOKEAI_VENV_PYTHON -c "import torch; print(torch.__version__)") + if [[ "$installed_pytorch_version" != "$PYTORCH_VERSION"* ]]; then + echo "Expected PyTorch ${PYTORCH_VERSION} but found ${installed_pytorch_version}\n" + exit 1 + fi +} + +build_common_main "$@" \ No newline at end of file diff --git a/build/COPY_ROOT/opt/ai-dock/bin/build/layer0/cpu.sh b/build/COPY_ROOT_1/opt/ai-dock/bin/build/layer1/cpu.sh similarity index 100% rename from build/COPY_ROOT/opt/ai-dock/bin/build/layer0/cpu.sh rename to build/COPY_ROOT_1/opt/ai-dock/bin/build/layer1/cpu.sh diff --git a/build/COPY_ROOT_1/opt/ai-dock/bin/build/layer1/init.sh b/build/COPY_ROOT_1/opt/ai-dock/bin/build/layer1/init.sh new file mode 100755 index 0000000..b6e0c5e --- /dev/null +++ b/build/COPY_ROOT_1/opt/ai-dock/bin/build/layer1/init.sh @@ -0,0 +1,20 @@ +#!/bin/bash + +# Must exit and fail to build if any command fails +set -eo pipefail +umask 002 + +source /opt/ai-dock/bin/build/layer1/common.sh + +if [[ "$XPU_TARGET" == "NVIDIA_GPU" ]]; then + source /opt/ai-dock/bin/build/layer1/nvidia.sh +elif [[ "$XPU_TARGET" == "AMD_GPU" ]]; then + source /opt/ai-dock/bin/build/layer1/amd.sh +elif [[ "$XPU_TARGET" == "CPU" ]]; then + source /opt/ai-dock/bin/build/layer1/cpu.sh +else + printf "No valid XPU_TARGET specified\n" >&2 + exit 1 +fi + +source /opt/ai-dock/bin/build/layer1/clean.sh diff --git a/build/COPY_ROOT/opt/ai-dock/bin/build/layer0/nvidia.sh b/build/COPY_ROOT_1/opt/ai-dock/bin/build/layer1/nvidia.sh similarity index 52% rename from build/COPY_ROOT/opt/ai-dock/bin/build/layer0/nvidia.sh rename to build/COPY_ROOT_1/opt/ai-dock/bin/build/layer1/nvidia.sh index 2b71ca2..7cd5a42 100755 --- a/build/COPY_ROOT/opt/ai-dock/bin/build/layer0/nvidia.sh +++ b/build/COPY_ROOT_1/opt/ai-dock/bin/build/layer1/nvidia.sh @@ -7,21 +7,13 @@ build_nvidia_main() { } build_nvidia_install_invokeai() { - micromamba run -n invokeai ${PIP_INSTALL} \ - torch=="${PYTORCH_VERSION}" \ - nvidia-ml-py3 \ + $INVOKEAI_VENV_PIP install --no-cache-dir \ onnxruntime-gpu - - micromamba install -n invokeai -c xformers -y \ - xformers \ - pytorch=${PYTORCH_VERSION} \ - pytorch-cuda="$(cut -d '.' -f 1,2 <<< "${CUDA_VERSION}")" - build_common_install_invokeai } build_nvidia_run_tests() { - installed_pytorch_cuda_version=$(micromamba run -n invokeai python -c "import torch; print(torch.version.cuda)") + installed_pytorch_cuda_version=$($INVOKEAI_VENV_PYTHON -c "import torch; print(torch.version.cuda)") if [[ "$CUDA_VERSION" != "$installed_pytorch_cuda"* ]]; then echo "Expected PyTorch CUDA ${CUDA_VERSION} but found ${installed_pytorch_cuda}\n" exit 1 diff --git a/build/COPY_ROOT/opt/ai-dock/bin/preflight.d/10-default.sh b/build/COPY_ROOT_1/opt/ai-dock/bin/preflight.d/10-default.sh similarity index 62% rename from build/COPY_ROOT/opt/ai-dock/bin/preflight.d/10-default.sh rename to build/COPY_ROOT_1/opt/ai-dock/bin/preflight.d/10-default.sh index 5007cfa..ee763a8 100755 --- a/build/COPY_ROOT/opt/ai-dock/bin/preflight.d/10-default.sh +++ b/build/COPY_ROOT_1/opt/ai-dock/bin/preflight.d/10-default.sh @@ -2,19 +2,10 @@ # This file will be sourced in init.sh function preflight_main() { - preflight_copy_notebook preflight_update_invokeai printf "%s" "${INVOKEAI_FLAGS}" > /etc/invokeai_flags.conf } -function preflight_copy_notebook() { - if micromamba env list | grep 'jupyter' > /dev/null 2>&1; then - if [[ ! -f "${WORKSPACE}invokeai.ipynb" ]]; then - cp /usr/local/share/ai-dock/invokeai.ipynb ${WORKSPACE} - fi - fi -} - # Default to false until we can stabilize the update process function preflight_update_invokeai() { if [[ ${AUTO_UPDATE,,} == "true" ]]; then diff --git a/build/COPY_ROOT/opt/ai-dock/bin/supervisor-invokeai.sh b/build/COPY_ROOT_1/opt/ai-dock/bin/supervisor-invokeai.sh similarity index 83% rename from build/COPY_ROOT/opt/ai-dock/bin/supervisor-invokeai.sh rename to build/COPY_ROOT_1/opt/ai-dock/bin/supervisor-invokeai.sh index 153bcff..b620228 100755 --- a/build/COPY_ROOT/opt/ai-dock/bin/supervisor-invokeai.sh +++ b/build/COPY_ROOT_1/opt/ai-dock/bin/supervisor-invokeai.sh @@ -10,9 +10,16 @@ QUICKTUNNELS=true function cleanup() { kill $(jobs -p) > /dev/null 2>&1 rm /run/http_ports/$PROXY_PORT > /dev/null 2>&1 + if [[ -z "$VIRTUAL_ENV" ]]; then + deactivate + fi } function start() { + source /opt/ai-dock/etc/environment.sh + source /opt/ai-dock/bin/venv-set.sh serviceportal + source /opt/ai-dock/bin/venv-set.sh invokeai + if [[ ! -v WEBUI_PORT || -z $WEBUI_PORT ]]; then INVOKEAI_PORT=${INVOKEAI_PORT_HOST:-9090} fi @@ -38,7 +45,7 @@ function start() { if [[ -f /run/workspace_sync || -f /run/container_config ]]; then fuser -k -SIGTERM ${LISTEN_PORT}/tcp > /dev/null 2>&1 & wait -n - /usr/bin/python3 /opt/ai-dock/fastapi/logviewer/main.py \ + "$SERVICEPORTAL_VENV_PYTHON" /opt/ai-dock/fastapi/logviewer/main.py \ -p $LISTEN_PORT \ -r 5 \ -s "${SERVICE_NAME}" \ @@ -65,8 +72,8 @@ function start() { # InvokeAI fails to start when the invoke dir is owned by root despite our loose permissions sudo find "$(readlink -f /opt/invokeai)" -not -user "$USER_NAME" -exec chown "${USER_NAME}.${USER_NAME}" {} \; - cd /opt/invokeai - micromamba run -n invokeai -e LD_PRELOAD=libtcmalloc.so invokeai-web + source "$INVOKEAI_VENV/bin/activate" + LD_PRELOAD=libtcmalloc.so invokeai-web } start 2>&1 \ No newline at end of file diff --git a/build/COPY_ROOT/opt/ai-dock/bin/update-invokeai.sh b/build/COPY_ROOT_1/opt/ai-dock/bin/update-invokeai.sh similarity index 89% rename from build/COPY_ROOT/opt/ai-dock/bin/update-invokeai.sh rename to build/COPY_ROOT_1/opt/ai-dock/bin/update-invokeai.sh index da8eff0..a44fb58 100755 --- a/build/COPY_ROOT/opt/ai-dock/bin/update-invokeai.sh +++ b/build/COPY_ROOT_1/opt/ai-dock/bin/update-invokeai.sh @@ -18,7 +18,7 @@ done printf "Updating InvokeAI (${version:-latest})...\n" # Pin Torch to our image version -micromamba run -n invokeai ${PIP_INSTALL} --use-pep517 \ +$INVOKEAI_VENV_PIP install --no-cache-dir --use-pep517 \ torch==${PYTORCH_VERSION} \ InvokeAI${version+==$version} diff --git a/build/COPY_ROOT/opt/ai-dock/storage_monitor/etc/mappings.sh b/build/COPY_ROOT_1/opt/ai-dock/storage_monitor/etc/mappings.sh similarity index 100% rename from build/COPY_ROOT/opt/ai-dock/storage_monitor/etc/mappings.sh rename to build/COPY_ROOT_1/opt/ai-dock/storage_monitor/etc/mappings.sh diff --git a/build/COPY_ROOT/root/.gitkeep b/build/COPY_ROOT_1/root/.gitkeep similarity index 100% rename from build/COPY_ROOT/root/.gitkeep rename to build/COPY_ROOT_1/root/.gitkeep diff --git a/build/COPY_ROOT/usr/.gitkeep b/build/COPY_ROOT_1/usr/.gitkeep similarity index 100% rename from build/COPY_ROOT/usr/.gitkeep rename to build/COPY_ROOT_1/usr/.gitkeep diff --git a/build/COPY_ROOT/usr/local/share/ai-dock/invokeai.ipynb b/build/COPY_ROOT_1/usr/local/share/ai-dock/invokeai.ipynb similarity index 100% rename from build/COPY_ROOT/usr/local/share/ai-dock/invokeai.ipynb rename to build/COPY_ROOT_1/usr/local/share/ai-dock/invokeai.ipynb diff --git a/build/COPY_ROOT_EXTRA/opt/ai-dock/bin/build/layer1/init.sh b/build/COPY_ROOT_99/opt/ai-dock/bin/build/layer99/init.sh similarity index 88% rename from build/COPY_ROOT_EXTRA/opt/ai-dock/bin/build/layer1/init.sh rename to build/COPY_ROOT_99/opt/ai-dock/bin/build/layer99/init.sh index e7c3c25..756fbd7 100755 --- a/build/COPY_ROOT_EXTRA/opt/ai-dock/bin/build/layer1/init.sh +++ b/build/COPY_ROOT_99/opt/ai-dock/bin/build/layer99/init.sh @@ -3,11 +3,6 @@ set -eo pipefail # Use this layer to add nodes and models -MAMBA_PACKAGES=( - #"package1" - #"package2=version" - ) - PIP_PACKAGES=( #"package1==version" #"package2" @@ -65,7 +60,6 @@ CONTROLNET_MODELS=( function build_extra_start() { source /opt/ai-dock/etc/environment.sh - build_extra_get_mamba_packages build_extra_get_pip_packages build_extra_get_nodes build_extra_get_models \ @@ -85,30 +79,31 @@ function build_extra_start() { "${ESRGAN_MODELS[@]}" # Invoke has no exit/CI run mode so run it and wait until it's fuly initialised - cd /opt/invokeai && \ - micromamba run -n invokeai -e LD_PRELOAD=libtcmalloc.so invokeai-web 2>&1 | tee /tmp/invoke-ci.log & + source "$INVOKEAI_VENV/bin/activate" + LD_PRELOAD=libtcmalloc.so invokeai-web 2>&1 | tee /tmp/invoke-ci.log & wait_max=30 wait_current=0 init_string="Uvicorn running on" # Until loop to continuously check if the string is found or maximum wait time is reached - until grep -qi "$init_string" /tmp/invoke-ci.log; do - printf "Waiting for InvokeAI initialization to complete...\n" - sleep 1 + while [ $wait_current -lt $wait_max ]; do + if grep -qi "$init_string" /tmp/invoke-ci.log; then + echo "InvokeAI initialization complete." + break + else + echo "Waiting for InvokeAI initialization to complete..." + sleep 1 + wait_current=$((wait_current + 1)) + fi done pkill invokeai-web -} - -function build_extra_get_mamba_packages() { - if [[ -n $MAMBA_PACKAGES ]]; then - micromamba install -n invokeai -y ${MAMBA_PACKAGES[@]} - fi + deactivate } function build_extra_get_pip_packages() { if [[ -n $PIP_PACKAGES ]]; then - micromamba run -n invokeai $PIP_INSTALL ${PIP_PACKAGES[@]} + $INVOKEAI_VENV_PIP install --no-cache-dir ${PIP_PACKAGES[@]} fi } @@ -122,14 +117,14 @@ function build_extra_get_nodes() { printf "Updating node: %s...\n" "${repo}" ( cd "$path" && git pull ) if [[ -e $requirements ]]; then - micromamba -n invokeai run ${PIP_INSTALL} -r "$requirements" + $INVOKEAI_VENV_PIP install --no-cache-dir -r "$requirements" fi fi else printf "Downloading node: %s...\n" "${repo}" git clone "${repo}" "${path}" --recursive if [[ -e $requirements ]]; then - micromamba -n invokeai run ${PIP_INSTALL} -r "${requirements}" + $INVOKEAI_VENV_PIP install --no-cache-dir -r "${requirements}" fi fi done diff --git a/build/COPY_ROOT_EXTRA/opt/serverless/handlers/.gitkeep b/build/COPY_ROOT_99/opt/serverless/handlers/.gitkeep similarity index 100% rename from build/COPY_ROOT_EXTRA/opt/serverless/handlers/.gitkeep rename to build/COPY_ROOT_99/opt/serverless/handlers/.gitkeep diff --git a/build/COPY_ROOT_EXTRA/opt/serverless/workflows/.gitkeep b/build/COPY_ROOT_99/opt/serverless/workflows/.gitkeep similarity index 100% rename from build/COPY_ROOT_EXTRA/opt/serverless/workflows/.gitkeep rename to build/COPY_ROOT_99/opt/serverless/workflows/.gitkeep diff --git a/build/COPY_ROOT_EXTRA/opt/storage/stable_diffusion/models/ckpt/.gitkeep b/build/COPY_ROOT_99/opt/storage/stable_diffusion/models/ckpt/.gitkeep similarity index 100% rename from build/COPY_ROOT_EXTRA/opt/storage/stable_diffusion/models/ckpt/.gitkeep rename to build/COPY_ROOT_99/opt/storage/stable_diffusion/models/ckpt/.gitkeep diff --git a/build/COPY_ROOT_EXTRA/opt/storage/stable_diffusion/models/codeformer/.gitkeep b/build/COPY_ROOT_99/opt/storage/stable_diffusion/models/codeformer/.gitkeep similarity index 100% rename from build/COPY_ROOT_EXTRA/opt/storage/stable_diffusion/models/codeformer/.gitkeep rename to build/COPY_ROOT_99/opt/storage/stable_diffusion/models/codeformer/.gitkeep diff --git a/build/COPY_ROOT_EXTRA/opt/storage/stable_diffusion/models/controlnet/.gitkeep b/build/COPY_ROOT_99/opt/storage/stable_diffusion/models/controlnet/.gitkeep similarity index 100% rename from build/COPY_ROOT_EXTRA/opt/storage/stable_diffusion/models/controlnet/.gitkeep rename to build/COPY_ROOT_99/opt/storage/stable_diffusion/models/controlnet/.gitkeep diff --git a/build/COPY_ROOT_EXTRA/opt/storage/stable_diffusion/models/deepbooru/.gitkeep b/build/COPY_ROOT_99/opt/storage/stable_diffusion/models/deepbooru/.gitkeep similarity index 100% rename from build/COPY_ROOT_EXTRA/opt/storage/stable_diffusion/models/deepbooru/.gitkeep rename to build/COPY_ROOT_99/opt/storage/stable_diffusion/models/deepbooru/.gitkeep diff --git a/build/COPY_ROOT_EXTRA/opt/storage/stable_diffusion/models/deforum/.gitkeep b/build/COPY_ROOT_99/opt/storage/stable_diffusion/models/deforum/.gitkeep similarity index 100% rename from build/COPY_ROOT_EXTRA/opt/storage/stable_diffusion/models/deforum/.gitkeep rename to build/COPY_ROOT_99/opt/storage/stable_diffusion/models/deforum/.gitkeep diff --git a/build/COPY_ROOT_EXTRA/opt/storage/stable_diffusion/models/dreambooth/.gitkeep b/build/COPY_ROOT_99/opt/storage/stable_diffusion/models/dreambooth/.gitkeep similarity index 100% rename from build/COPY_ROOT_EXTRA/opt/storage/stable_diffusion/models/dreambooth/.gitkeep rename to build/COPY_ROOT_99/opt/storage/stable_diffusion/models/dreambooth/.gitkeep diff --git a/build/COPY_ROOT_EXTRA/opt/storage/stable_diffusion/models/esrgan/.gitkeep b/build/COPY_ROOT_99/opt/storage/stable_diffusion/models/esrgan/.gitkeep similarity index 100% rename from build/COPY_ROOT_EXTRA/opt/storage/stable_diffusion/models/esrgan/.gitkeep rename to build/COPY_ROOT_99/opt/storage/stable_diffusion/models/esrgan/.gitkeep diff --git a/build/COPY_ROOT_EXTRA/opt/storage/stable_diffusion/models/gfpgan/.gitkeep b/build/COPY_ROOT_99/opt/storage/stable_diffusion/models/gfpgan/.gitkeep similarity index 100% rename from build/COPY_ROOT_EXTRA/opt/storage/stable_diffusion/models/gfpgan/.gitkeep rename to build/COPY_ROOT_99/opt/storage/stable_diffusion/models/gfpgan/.gitkeep diff --git a/build/COPY_ROOT_EXTRA/opt/storage/stable_diffusion/models/hypernetworks/.gitkeep b/build/COPY_ROOT_99/opt/storage/stable_diffusion/models/hypernetworks/.gitkeep similarity index 100% rename from build/COPY_ROOT_EXTRA/opt/storage/stable_diffusion/models/hypernetworks/.gitkeep rename to build/COPY_ROOT_99/opt/storage/stable_diffusion/models/hypernetworks/.gitkeep diff --git a/build/COPY_ROOT_EXTRA/opt/storage/stable_diffusion/models/insightface/.gitkeep b/build/COPY_ROOT_99/opt/storage/stable_diffusion/models/insightface/.gitkeep similarity index 100% rename from build/COPY_ROOT_EXTRA/opt/storage/stable_diffusion/models/insightface/.gitkeep rename to build/COPY_ROOT_99/opt/storage/stable_diffusion/models/insightface/.gitkeep diff --git a/build/COPY_ROOT_EXTRA/opt/storage/stable_diffusion/models/karlo/.gitkeep b/build/COPY_ROOT_99/opt/storage/stable_diffusion/models/karlo/.gitkeep similarity index 100% rename from build/COPY_ROOT_EXTRA/opt/storage/stable_diffusion/models/karlo/.gitkeep rename to build/COPY_ROOT_99/opt/storage/stable_diffusion/models/karlo/.gitkeep diff --git a/build/COPY_ROOT_EXTRA/opt/storage/stable_diffusion/models/ldsr/.gitkeep b/build/COPY_ROOT_99/opt/storage/stable_diffusion/models/ldsr/.gitkeep similarity index 100% rename from build/COPY_ROOT_EXTRA/opt/storage/stable_diffusion/models/ldsr/.gitkeep rename to build/COPY_ROOT_99/opt/storage/stable_diffusion/models/ldsr/.gitkeep diff --git a/build/COPY_ROOT_EXTRA/opt/storage/stable_diffusion/models/lora/.gitkeep b/build/COPY_ROOT_99/opt/storage/stable_diffusion/models/lora/.gitkeep similarity index 100% rename from build/COPY_ROOT_EXTRA/opt/storage/stable_diffusion/models/lora/.gitkeep rename to build/COPY_ROOT_99/opt/storage/stable_diffusion/models/lora/.gitkeep diff --git a/build/COPY_ROOT_EXTRA/opt/storage/stable_diffusion/models/reactor/.gitkeep b/build/COPY_ROOT_99/opt/storage/stable_diffusion/models/reactor/.gitkeep similarity index 100% rename from build/COPY_ROOT_EXTRA/opt/storage/stable_diffusion/models/reactor/.gitkeep rename to build/COPY_ROOT_99/opt/storage/stable_diffusion/models/reactor/.gitkeep diff --git a/build/COPY_ROOT_EXTRA/opt/storage/stable_diffusion/models/swinIR/.gitkeep b/build/COPY_ROOT_99/opt/storage/stable_diffusion/models/swinIR/.gitkeep similarity index 100% rename from build/COPY_ROOT_EXTRA/opt/storage/stable_diffusion/models/swinIR/.gitkeep rename to build/COPY_ROOT_99/opt/storage/stable_diffusion/models/swinIR/.gitkeep diff --git a/build/COPY_ROOT_EXTRA/opt/storage/stable_diffusion/models/vae/.gitkeep b/build/COPY_ROOT_99/opt/storage/stable_diffusion/models/vae/.gitkeep similarity index 100% rename from build/COPY_ROOT_EXTRA/opt/storage/stable_diffusion/models/vae/.gitkeep rename to build/COPY_ROOT_99/opt/storage/stable_diffusion/models/vae/.gitkeep diff --git a/build/COPY_ROOT_EXTRA/opt/storage/stable_diffusion/models/vae_approx/.gitkeep b/build/COPY_ROOT_99/opt/storage/stable_diffusion/models/vae_approx/.gitkeep similarity index 100% rename from build/COPY_ROOT_EXTRA/opt/storage/stable_diffusion/models/vae_approx/.gitkeep rename to build/COPY_ROOT_99/opt/storage/stable_diffusion/models/vae_approx/.gitkeep diff --git a/build/Dockerfile b/build/Dockerfile index 75354ea..ac42eb7 100644 --- a/build/Dockerfile +++ b/build/Dockerfile @@ -7,36 +7,35 @@ LABEL org.opencontainers.image.source https://github.com/ai-dock/invokeai LABEL org.opencontainers.image.description "InvokeAI docker images for use in GPU cloud and local environments. Includes AI-Dock base for authentication and improved user experience." LABEL maintainer="Rob Ballantyne " +ENV INVOKEAI_VENV=$VENV_DIR/invokeai +ENV INVOKEAI_VENV_PYTHON=$INVOKEAI_VENV/bin/python +ENV INVOKEAI_VENV_PIP=$INVOKEAI_VENV/bin/pip + +ENV IMAGE_SLUG="invokeai" +ENV OPT_SYNC=invokeai + +# Prepare environment ARG PYTHON_VERSION="3.10" ENV PYTHON_VERSION="${PYTHON_VERSION}" - ARG PYTORCH_VERSION="2.2.2" ENV PYTORCH_VERSION="${PYTORCH_VERSION}" +COPY --chown=0:1111 ./COPY_ROOT_0/ / +ARG IMAGE_BASE +RUN set -eo pipefail && /opt/ai-dock/bin/build/layer0/init.sh | tee /var/log/build.log +# Install software +ENV INVOKEAI_ROOT="/opt/invokeai" ARG INVOKEAI_VERSION ENV INVOKEAI_VERSION=${INVOKEAI_VERSION} - -ENV IMAGE_SLUG="invokeai" -ENV OPT_SYNC=invokeai - -ENV INVOKEAI_ROOT="/opt/invokeai" - -# Copy early so we can use scripts in the build - Changes to these files will invalidate the cache and cause a rebuild. -COPY --chown=0:1111 ./COPY_ROOT/ / - -# Use build scripts to ensure we can build all targets from one Dockerfile in a single layer. -# Don't put anything heavy in here - We can use multi-stage building above if necessary. - +COPY --chown=0:1111 ./COPY_ROOT_1/ / ARG IMAGE_BASE -RUN set -eo pipefail && /opt/ai-dock/bin/build/layer0/init.sh | tee /var/log/build.log - -# Must be set after layer0 -ENV MAMBA_DEFAULT_ENV=invokeai -ENV MAMBA_DEFAULT_RUN="micromamba run -n ${MAMBA_DEFAULT_ENV}" +RUN set -eo pipefail && /opt/ai-dock/bin/build/layer1/init.sh | tee -a /var/log/build.log # Copy overrides and models into later layers for fast rebuilds -COPY --chown=0:1111 ./COPY_ROOT_EXTRA/ / -RUN set -eo pipefail && /opt/ai-dock/bin/build/layer1/init.sh | tee -a /var/log/build.log +COPY --chown=0:1111 ./COPY_ROOT_99/ / +RUN set -eo pipefail && /opt/ai-dock/bin/build/layer99/init.sh | tee -a /var/log/build.log + +ENV PYTHON_DEFAULT_VENV=invokeai # Keep init.sh as-is and place additional logic in /opt/ai-dock/bin/preflight.sh CMD ["init.sh"] diff --git a/config/provisioning/default.sh b/config/provisioning/default.sh index e37a452..2df4ad4 100755 --- a/config/provisioning/default.sh +++ b/config/provisioning/default.sh @@ -10,11 +10,6 @@ ### Edit the following arrays to suit your workflow - values must be quoted and separated by newlines or spaces. DISK_GB_REQUIRED=30 - -MAMBA_PACKAGES=( - #"package1" - #"package2=version" - ) PIP_PACKAGES=( #"bitsandbytes==0.41.2.post2" @@ -75,7 +70,6 @@ function provisioning_start() { DISK_GB_USED=$(($(df --output=used -m "${WORKSPACE}" | tail -n1) / 1000)) DISK_GB_ALLOCATED=$(($DISK_GB_AVAILABLE + $DISK_GB_USED)) provisioning_print_header - provisioning_get_mamba_packages provisioning_get_pip_packages provisioning_get_nodes provisioning_get_models \ @@ -97,15 +91,9 @@ function provisioning_start() { provisioning_print_end } -function provisioning_get_mamba_packages() { - if [[ -n $MAMBA_PACKAGES ]]; then - $MAMBA_INSTALL -n invokeai ${MAMBA_PACKAGES[@]} - fi -} - function provisioning_get_pip_packages() { if [[ -n $PIP_PACKAGES ]]; then - micromamba run -n invokeai $PIP_INSTALL ${PIP_PACKAGES[@]} + $INVOKEAI_VENV_PIP install --no-cache-dir ${PIP_PACKAGES[@]} fi } @@ -119,14 +107,14 @@ function provisioning_get_nodes() { printf "Updating extension: %s...\n" "${repo}" ( cd "$path" && git pull ) if [[ -e $requirements ]]; then - micromamba -n invokeai run ${PIP_INSTALL} -r "$requirements" + $INVOKEAI_VENV_PIP install --no-cache-dir -r "$requirements" fi fi else printf "Downloading node: %s...\n" "${repo}" git clone "${repo}" "${path}" --recursive if [[ -e $requirements ]]; then - micromamba -n invokeai run ${PIP_INSTALL} -r "${requirements}" + $INVOKEAI_VENV_PIP install --no-cache-dir -r "${requirements}" fi fi done diff --git a/docker-compose.yaml b/docker-compose.yaml index a331392..6b55024 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -8,12 +8,12 @@ services: args: PYTHON_VERSION: ${PYTHON_VERSION:-3.10} PYTORCH_VERSION: ${PYTORCH_VERSION:-2.2.2} - INVOKEAI_VERSION: ${INVOKEAI_VERSION:-4.1.0} - IMAGE_BASE: ${IMAGE_BASE:-ghcr.io/ai-dock/python:3.10-cuda-11.8.0-runtime-22.04} + INVOKEAI_VERSION: ${INVOKEAI_VERSION:-4.2.4} + IMAGE_BASE: ${IMAGE_BASE:-ghcr.io/ai-dock/python:3.10-v2-cuda-11.8.0-base-22.04} tags: - - "ghcr.io/ai-dock/invokeai:${IMAGE_TAG:-cuda-11.8.0-runtime-22.04}" + - "ghcr.io/ai-dock/invokeai:${IMAGE_TAG:-v2-cuda-11.8.0-base-22.04}" - image: ghcr.io/ai-dock/invokeai:${IMAGE_TAG:-cuda-11.8.0-runtime-22.04} + image: ghcr.io/ai-dock/invokeai:${IMAGE_TAG:-v2-cuda-11.8.0-base-22.04} devices: - "/dev/dri:/dev/dri"