mirror of
https://github.com/invoke-ai/InvokeAI
synced 2024-08-30 20:32:17 +00:00
Split requirements / pyproject installation in Dockerfile (#2815)
This should make caching way easier and therefore speed up the image (re-)creation a lot. Other small improvements: - reorder .dockerignore - rename amd flavor to rocm to align with cuda flavor - use `user:group` for definitions - add `--platform=${TARGETPLATFORM}` to base
This commit is contained in:
commit
835eb14c79
@ -4,10 +4,6 @@
|
|||||||
!ldm
|
!ldm
|
||||||
!pyproject.toml
|
!pyproject.toml
|
||||||
|
|
||||||
# Guard against pulling in any models that might exist in the directory tree
|
|
||||||
**/*.pt*
|
|
||||||
**/*.ckpt
|
|
||||||
|
|
||||||
# ignore frontend but whitelist dist
|
# ignore frontend but whitelist dist
|
||||||
invokeai/frontend/
|
invokeai/frontend/
|
||||||
!invokeai/frontend/dist/
|
!invokeai/frontend/dist/
|
||||||
@ -16,10 +12,14 @@ invokeai/frontend/
|
|||||||
invokeai/assets/
|
invokeai/assets/
|
||||||
!invokeai/assets/web/
|
!invokeai/assets/web/
|
||||||
|
|
||||||
|
# Guard against pulling in any models that might exist in the directory tree
|
||||||
|
**/*.pt*
|
||||||
|
**/*.ckpt
|
||||||
|
|
||||||
# Byte-compiled / optimized / DLL files
|
# Byte-compiled / optimized / DLL files
|
||||||
**/__pycache__/
|
**/__pycache__/
|
||||||
**/*.py[cod]
|
**/*.py[cod]
|
||||||
|
|
||||||
# Distribution / packaging
|
# Distribution / packaging
|
||||||
*.egg-info/
|
**/*.egg-info/
|
||||||
*.egg
|
**/*.egg
|
||||||
|
6
.github/workflows/build-container.yml
vendored
6
.github/workflows/build-container.yml
vendored
@ -5,6 +5,8 @@ on:
|
|||||||
- 'main'
|
- 'main'
|
||||||
- 'update/ci/docker/*'
|
- 'update/ci/docker/*'
|
||||||
- 'update/docker/*'
|
- 'update/docker/*'
|
||||||
|
- 'dev/ci/docker/*'
|
||||||
|
- 'dev/docker/*'
|
||||||
paths:
|
paths:
|
||||||
- 'pyproject.toml'
|
- 'pyproject.toml'
|
||||||
- 'ldm/**'
|
- 'ldm/**'
|
||||||
@ -24,11 +26,11 @@ jobs:
|
|||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
flavor:
|
flavor:
|
||||||
- amd
|
- rocm
|
||||||
- cuda
|
- cuda
|
||||||
- cpu
|
- cpu
|
||||||
include:
|
include:
|
||||||
- flavor: amd
|
- flavor: rocm
|
||||||
pip-extra-index-url: 'https://download.pytorch.org/whl/rocm5.2'
|
pip-extra-index-url: 'https://download.pytorch.org/whl/rocm5.2'
|
||||||
- flavor: cuda
|
- flavor: cuda
|
||||||
pip-extra-index-url: ''
|
pip-extra-index-url: ''
|
||||||
|
@ -4,15 +4,15 @@ ARG PYTHON_VERSION=3.9
|
|||||||
##################
|
##################
|
||||||
## base image ##
|
## base image ##
|
||||||
##################
|
##################
|
||||||
FROM python:${PYTHON_VERSION}-slim AS python-base
|
FROM --platform=${TARGETPLATFORM} python:${PYTHON_VERSION}-slim AS python-base
|
||||||
|
|
||||||
LABEL org.opencontainers.image.authors="mauwii@outlook.de"
|
LABEL org.opencontainers.image.authors="mauwii@outlook.de"
|
||||||
|
|
||||||
# prepare for buildkit cache
|
# Prepare apt for buildkit cache
|
||||||
RUN rm -f /etc/apt/apt.conf.d/docker-clean \
|
RUN rm -f /etc/apt/apt.conf.d/docker-clean \
|
||||||
&& echo 'Binary::apt::APT::Keep-Downloaded-Packages "true";' >/etc/apt/apt.conf.d/keep-cache
|
&& echo 'Binary::apt::APT::Keep-Downloaded-Packages "true";' >/etc/apt/apt.conf.d/keep-cache
|
||||||
|
|
||||||
# Install necessary packages
|
# Install dependencies
|
||||||
RUN \
|
RUN \
|
||||||
--mount=type=cache,target=/var/cache/apt,sharing=locked \
|
--mount=type=cache,target=/var/cache/apt,sharing=locked \
|
||||||
--mount=type=cache,target=/var/lib/apt,sharing=locked \
|
--mount=type=cache,target=/var/lib/apt,sharing=locked \
|
||||||
@ -23,7 +23,7 @@ RUN \
|
|||||||
libglib2.0-0=2.66.* \
|
libglib2.0-0=2.66.* \
|
||||||
libopencv-dev=4.5.*
|
libopencv-dev=4.5.*
|
||||||
|
|
||||||
# set working directory and env
|
# Set working directory and env
|
||||||
ARG APPDIR=/usr/src
|
ARG APPDIR=/usr/src
|
||||||
ARG APPNAME=InvokeAI
|
ARG APPNAME=InvokeAI
|
||||||
WORKDIR ${APPDIR}
|
WORKDIR ${APPDIR}
|
||||||
@ -32,7 +32,7 @@ ENV PATH ${APPDIR}/${APPNAME}/bin:$PATH
|
|||||||
ENV PYTHONDONTWRITEBYTECODE 1
|
ENV PYTHONDONTWRITEBYTECODE 1
|
||||||
# Turns off buffering for easier container logging
|
# Turns off buffering for easier container logging
|
||||||
ENV PYTHONUNBUFFERED 1
|
ENV PYTHONUNBUFFERED 1
|
||||||
# don't fall back to legacy build system
|
# Don't fall back to legacy build system
|
||||||
ENV PIP_USE_PEP517=1
|
ENV PIP_USE_PEP517=1
|
||||||
|
|
||||||
#######################
|
#######################
|
||||||
@ -40,7 +40,7 @@ ENV PIP_USE_PEP517=1
|
|||||||
#######################
|
#######################
|
||||||
FROM python-base AS pyproject-builder
|
FROM python-base AS pyproject-builder
|
||||||
|
|
||||||
# Install dependencies
|
# Install build dependencies
|
||||||
RUN \
|
RUN \
|
||||||
--mount=type=cache,target=/var/cache/apt,sharing=locked \
|
--mount=type=cache,target=/var/cache/apt,sharing=locked \
|
||||||
--mount=type=cache,target=/var/lib/apt,sharing=locked \
|
--mount=type=cache,target=/var/lib/apt,sharing=locked \
|
||||||
@ -51,26 +51,30 @@ RUN \
|
|||||||
gcc=4:10.2.* \
|
gcc=4:10.2.* \
|
||||||
python3-dev=3.9.*
|
python3-dev=3.9.*
|
||||||
|
|
||||||
# prepare pip for buildkit cache
|
# Prepare pip for buildkit cache
|
||||||
ARG PIP_CACHE_DIR=/var/cache/buildkit/pip
|
ARG PIP_CACHE_DIR=/var/cache/buildkit/pip
|
||||||
ENV PIP_CACHE_DIR ${PIP_CACHE_DIR}
|
ENV PIP_CACHE_DIR ${PIP_CACHE_DIR}
|
||||||
RUN mkdir -p ${PIP_CACHE_DIR}
|
RUN mkdir -p ${PIP_CACHE_DIR}
|
||||||
|
|
||||||
# create virtual environment
|
# Create virtual environment
|
||||||
RUN --mount=type=cache,target=${PIP_CACHE_DIR},sharing=locked \
|
RUN --mount=type=cache,target=${PIP_CACHE_DIR} \
|
||||||
python3 -m venv "${APPNAME}" \
|
python3 -m venv "${APPNAME}" \
|
||||||
--upgrade-deps
|
--upgrade-deps
|
||||||
|
|
||||||
# copy sources
|
# Install requirements
|
||||||
COPY --link . .
|
COPY --link pyproject.toml .
|
||||||
|
COPY --link ldm/invoke/_version.py ldm/invoke/__init__.py ldm/invoke/
|
||||||
# install pyproject.toml
|
|
||||||
ARG PIP_EXTRA_INDEX_URL
|
ARG PIP_EXTRA_INDEX_URL
|
||||||
ENV PIP_EXTRA_INDEX_URL ${PIP_EXTRA_INDEX_URL}
|
ENV PIP_EXTRA_INDEX_URL ${PIP_EXTRA_INDEX_URL}
|
||||||
RUN --mount=type=cache,target=${PIP_CACHE_DIR},sharing=locked \
|
RUN --mount=type=cache,target=${PIP_CACHE_DIR} \
|
||||||
|
"${APPNAME}"/bin/pip install .
|
||||||
|
|
||||||
|
# Install pyproject.toml
|
||||||
|
COPY --link . .
|
||||||
|
RUN --mount=type=cache,target=${PIP_CACHE_DIR} \
|
||||||
"${APPNAME}/bin/pip" install .
|
"${APPNAME}/bin/pip" install .
|
||||||
|
|
||||||
# build patchmatch
|
# Build patchmatch
|
||||||
RUN python3 -c "from patchmatch import patch_match"
|
RUN python3 -c "from patchmatch import patch_match"
|
||||||
|
|
||||||
#####################
|
#####################
|
||||||
@ -86,14 +90,14 @@ RUN useradd \
|
|||||||
-U \
|
-U \
|
||||||
"${UNAME}"
|
"${UNAME}"
|
||||||
|
|
||||||
# create volume directory
|
# Create volume directory
|
||||||
ARG VOLUME_DIR=/data
|
ARG VOLUME_DIR=/data
|
||||||
RUN mkdir -p "${VOLUME_DIR}" \
|
RUN mkdir -p "${VOLUME_DIR}" \
|
||||||
&& chown -R "${UNAME}" "${VOLUME_DIR}"
|
&& chown -hR "${UNAME}:${UNAME}" "${VOLUME_DIR}"
|
||||||
|
|
||||||
# setup runtime environment
|
# Setup runtime environment
|
||||||
USER ${UNAME}
|
USER ${UNAME}:${UNAME}
|
||||||
COPY --chown=${UNAME} --from=pyproject-builder ${APPDIR}/${APPNAME} ${APPNAME}
|
COPY --chown=${UNAME}:${UNAME} --from=pyproject-builder ${APPDIR}/${APPNAME} ${APPNAME}
|
||||||
ENV INVOKEAI_ROOT ${VOLUME_DIR}
|
ENV INVOKEAI_ROOT ${VOLUME_DIR}
|
||||||
ENV TRANSFORMERS_CACHE ${VOLUME_DIR}/.cache
|
ENV TRANSFORMERS_CACHE ${VOLUME_DIR}/.cache
|
||||||
ENV INVOKE_MODEL_RECONFIGURE "--yes --default_only"
|
ENV INVOKE_MODEL_RECONFIGURE "--yes --default_only"
|
||||||
|
@ -41,7 +41,7 @@ else
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# Build Container
|
# Build Container
|
||||||
DOCKER_BUILDKIT=1 docker build \
|
docker build \
|
||||||
--platform="${PLATFORM:-linux/amd64}" \
|
--platform="${PLATFORM:-linux/amd64}" \
|
||||||
--tag="${CONTAINER_IMAGE:-invokeai}" \
|
--tag="${CONTAINER_IMAGE:-invokeai}" \
|
||||||
${CONTAINER_FLAVOR:+--build-arg="CONTAINER_FLAVOR=${CONTAINER_FLAVOR}"} \
|
${CONTAINER_FLAVOR:+--build-arg="CONTAINER_FLAVOR=${CONTAINER_FLAVOR}"} \
|
||||||
|
@ -49,3 +49,6 @@ CONTAINER_FLAVOR="${CONTAINER_FLAVOR-cuda}"
|
|||||||
CONTAINER_TAG="${CONTAINER_TAG-"${INVOKEAI_BRANCH##*/}-${CONTAINER_FLAVOR}"}"
|
CONTAINER_TAG="${CONTAINER_TAG-"${INVOKEAI_BRANCH##*/}-${CONTAINER_FLAVOR}"}"
|
||||||
CONTAINER_IMAGE="${CONTAINER_REGISTRY}/${CONTAINER_REPOSITORY}:${CONTAINER_TAG}"
|
CONTAINER_IMAGE="${CONTAINER_REGISTRY}/${CONTAINER_REPOSITORY}:${CONTAINER_TAG}"
|
||||||
CONTAINER_IMAGE="${CONTAINER_IMAGE,,}"
|
CONTAINER_IMAGE="${CONTAINER_IMAGE,,}"
|
||||||
|
|
||||||
|
# enable docker buildkit
|
||||||
|
export DOCKER_BUILDKIT=1
|
||||||
|
@ -21,10 +21,10 @@ docker run \
|
|||||||
--tty \
|
--tty \
|
||||||
--rm \
|
--rm \
|
||||||
--platform="${PLATFORM}" \
|
--platform="${PLATFORM}" \
|
||||||
--name="${REPOSITORY_NAME,,}" \
|
--name="${REPOSITORY_NAME}" \
|
||||||
--hostname="${REPOSITORY_NAME,,}" \
|
--hostname="${REPOSITORY_NAME}" \
|
||||||
--mount=source="${VOLUMENAME}",target=/data \
|
--mount type=volume,volume-driver=local,source="${VOLUMENAME}",target=/data \
|
||||||
--mount type=bind,source="$(pwd)"/outputs,target=/data/outputs \
|
--mount type=bind,source="$(pwd)"/outputs/,target=/data/outputs/ \
|
||||||
${MODELSPATH:+--mount="type=bind,source=${MODELSPATH},target=/data/models"} \
|
${MODELSPATH:+--mount="type=bind,source=${MODELSPATH},target=/data/models"} \
|
||||||
${HUGGING_FACE_HUB_TOKEN:+--env="HUGGING_FACE_HUB_TOKEN=${HUGGING_FACE_HUB_TOKEN}"} \
|
${HUGGING_FACE_HUB_TOKEN:+--env="HUGGING_FACE_HUB_TOKEN=${HUGGING_FACE_HUB_TOKEN}"} \
|
||||||
--publish=9090:9090 \
|
--publish=9090:9090 \
|
||||||
@ -32,7 +32,7 @@ docker run \
|
|||||||
${GPU_FLAGS:+--gpus="${GPU_FLAGS}"} \
|
${GPU_FLAGS:+--gpus="${GPU_FLAGS}"} \
|
||||||
"${CONTAINER_IMAGE}" ${@:+$@}
|
"${CONTAINER_IMAGE}" ${@:+$@}
|
||||||
|
|
||||||
# Remove Trash folder
|
echo -e "\nCleaning trash folder ..."
|
||||||
for f in outputs/.Trash*; do
|
for f in outputs/.Trash*; do
|
||||||
if [ -e "$f" ]; then
|
if [ -e "$f" ]; then
|
||||||
rm -Rf "$f"
|
rm -Rf "$f"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user