Skip to content

Commit

Permalink
Make Dockerfile cloud ready (tested on runpod) (#1950)
Browse files Browse the repository at this point in the history
* Push dockerfile (#18)

* update build-container.yml

* add login step to build-container.yml

* update job name

* update matrix: add registry and platforms
also set latest only for cuda image

* quote string

* use latest for amd and cuda image

* separate images for cuda and amd

* change latest from auto to true

* configure_invoke -y instead of --interactive

* fix argument to --yes

* update matrix:
- use flavor instead of pip-requirements
- add flavor `cloud`
- add `dockerfile`

* introduce INVOKE_MODEL_RECONFIGURE

* add `--cap-add=sys_nice` to run.sh

* update Dockerfile: install wheel

* only have main branch in action again

* disable push of cloud image for now
since it still has it's own workflow, but PoC succeeded

* remove now untrue comments in top

* install pip, setuptools and wheel in sep. step

* add labels to the image

* remove doubled installation of wheel
  • Loading branch information
mauwii committed Dec 12, 2022
1 parent 36e6908 commit 1a16254
Show file tree
Hide file tree
Showing 4 changed files with 63 additions and 15 deletions.
64 changes: 50 additions & 14 deletions .github/workflows/build-container.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
# Building the Image without pushing to confirm it is still buildable
# confirum functionality would unfortunately need way more resources
name: build container image
on:
push:
Expand All @@ -11,28 +9,66 @@ jobs:
strategy:
fail-fast: false
matrix:
pip-requirements:
- requirements-lin-amd.txt
- requirements-lin-cuda.txt
registry:
- ghcr.io
flavor:
- amd
- cuda
# - cloud
include:
- flavor: amd
pip-requirements: requirements-lin-amd.txt
dockerfile: docker-build/Dockerfile
platforms: linux/amd64,linux/arm64
- flavor: cuda
pip-requirements: requirements-lin-cuda.txt
dockerfile: docker-build/Dockerfile
platforms: linux/amd64,linux/arm64
# - flavor: cloud
# pip-requirements: requirements-lin-cuda.txt
# dockerfile: docker-build/Dockerfile.cloud
# platforms: linux/amd64
runs-on: ubuntu-latest
name: ${{ matrix.pip-requirements }} ${{ matrix.arch }}
name: ${{ matrix.flavor }}
steps:
- name: prepare docker-tag
env:
repository: ${{ github.repository }}
run: echo "dockertag=${repository,,}" >> $GITHUB_ENV
- name: Checkout
uses: actions/checkout@v3

- name: Set up QEMU
uses: docker/setup-qemu-action@v2

- name: Docker meta
id: meta
uses: docker/metadata-action@v4
with:
images: ${{ matrix.registry }}/${{ github.repository }}-${{ matrix.flavor }}
tags: |
type=ref,event=branch
type=ref,event=tag
type=semver,pattern={{version}}
type=semver,pattern={{major}}.{{minor}}
type=sha
flavor: |
latest=true
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2

- if: github.event_name != 'pull_request'
name: Docker login
uses: docker/login-action@v2
with:
registry: ${{ matrix.registry }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}

- name: Build container
uses: docker/build-push-action@v3
with:
context: .
file: docker-build/Dockerfile
platforms: linux/amd64,linux/arm64
push: false
tags: ${{ env.dockertag }}:${{ matrix.pip-requirements }}
file: ${{ matrix.dockerfile }}
platforms: ${{ matrix.platforms }}
push: ${{ github.event_name != 'pull_request' }}
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
build-args: pip_requirements=${{ matrix.pip-requirements }}
7 changes: 7 additions & 0 deletions docker-build/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,12 @@ COPY . ./environments-and-requirements/${PIP_REQUIREMENTS} ./

# install requirements
RUN python3 -m venv .venv \
&& pip install \
--upgrade \
--no-cache-dir \
'pip>=22.3.1' \
'setuptools>=65.5.0' \
'wheel>=0.38.4' \
&& pip install \
--no-cache-dir \
-r ${PIP_REQUIREMENTS}
Expand All @@ -42,6 +48,7 @@ COPY --from=builder /usr/src/app .

# set Environment, Entrypoint and default CMD
ENV INVOKEAI_ROOT /data
ENV INVOKE_MODEL_RECONFIGURE --yes
ENV PATH=/usr/src/app/.venv/bin:$PATH

ENTRYPOINT [ "python3", "scripts/invoke.py" ]
Expand Down
1 change: 1 addition & 0 deletions docker-build/run.sh
Original file line number Diff line number Diff line change
Expand Up @@ -16,4 +16,5 @@ docker run \
--hostname="$project_name" \
--mount="source=$volumename,target=/data" \
--publish=9090:9090 \
--cap-add=sys_nice \
"$invokeai_tag" ${1:+$@}
6 changes: 5 additions & 1 deletion ldm/invoke/CLI.py
Original file line number Diff line number Diff line change
Expand Up @@ -941,7 +941,11 @@ def emergency_model_reconfigure():
print('!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!')
print('configure_invokeai is launching....\n')

sys.argv = ['configure_invokeai','--interactive']
sys.argv = [
'configure_invokeai',
os.environ.get(
'INVOKE_MODEL_RECONFIGURE',
'--interactive')]
import configure_invokeai
configure_invokeai.main()

0 comments on commit 1a16254

Please sign in to comment.