Merge pull request #85 from qslug/docker
Add dockerfile and build action
This commit is contained in:
commit
1bcd1db2f7
|
@ -0,0 +1,13 @@
|
||||||
|
{
|
||||||
|
"name": "EveryDream2 Dev Container",
|
||||||
|
"dockerFile": "../docker/Dockerfile",
|
||||||
|
"postStartCommand": "/start.sh",
|
||||||
|
|
||||||
|
"containerEnv": {
|
||||||
|
"LOCAL_DEV": "1"
|
||||||
|
},
|
||||||
|
|
||||||
|
// Mimic RunPod/Vast setup
|
||||||
|
"workspaceMount": "source=${localWorkspaceFolder},target=/workspace/EveryDream2trainer,type=bind",
|
||||||
|
"workspaceFolder": "/workspace/EveryDream2trainer"
|
||||||
|
}
|
|
@ -0,0 +1,31 @@
|
||||||
|
name: Docker Image CI
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches: [ "*" ]
|
||||||
|
pull_request:
|
||||||
|
branches: [ "main" ]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout repository
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
|
||||||
|
- name: Set up Docker Buildx
|
||||||
|
uses: docker/setup-buildx-action@v2
|
||||||
|
|
||||||
|
# Build Docker image with Buildx
|
||||||
|
# https://github.com/docker/build-push-action
|
||||||
|
- name: Build and push
|
||||||
|
id: build-and-push
|
||||||
|
uses: docker/build-push-action@v4
|
||||||
|
with:
|
||||||
|
context: .
|
||||||
|
push: false
|
||||||
|
file: docker/Dockerfile
|
||||||
|
cache-from: type=gha
|
||||||
|
cache-to: type=gha,mode=max
|
|
@ -0,0 +1,73 @@
|
||||||
|
name: Docker
|
||||||
|
|
||||||
|
# This workflow uses actions that are not certified by GitHub.
|
||||||
|
# They are provided by a third-party and are governed by
|
||||||
|
# separate terms of service, privacy policy, and support
|
||||||
|
# documentation.
|
||||||
|
|
||||||
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
|
schedule:
|
||||||
|
- cron: '17 6 * * *'
|
||||||
|
push:
|
||||||
|
branches: [ "main" ]
|
||||||
|
# Publish semver tags as releases.
|
||||||
|
tags: [ 'v*.*.*' ]
|
||||||
|
pull_request:
|
||||||
|
branches: [ "main" ]
|
||||||
|
|
||||||
|
env:
|
||||||
|
# Use docker.io for Docker Hub if empty
|
||||||
|
REGISTRY: ghcr.io
|
||||||
|
# github.repository as <account>/<repo>
|
||||||
|
IMAGE_NAME: ${{ github.repository }}
|
||||||
|
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
packages: write
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout repository
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
|
||||||
|
# - name: Free Disk Space (Ubuntu)
|
||||||
|
# uses: jlumbroso/free-disk-space@main
|
||||||
|
|
||||||
|
- name: Set up Docker Buildx
|
||||||
|
uses: docker/setup-buildx-action@v2
|
||||||
|
|
||||||
|
# Login against a Docker registry except on PR
|
||||||
|
# https://github.com/docker/login-action
|
||||||
|
- name: Docker login
|
||||||
|
uses: docker/login-action@v2
|
||||||
|
with:
|
||||||
|
registry: ${{ env.REGISTRY }}
|
||||||
|
username: ${{ github.actor }}
|
||||||
|
password: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|
||||||
|
# Extract metadata (tags, labels) for Docker
|
||||||
|
# https://github.com/docker/metadata-action
|
||||||
|
- name: Docker meta
|
||||||
|
id: meta
|
||||||
|
uses: docker/metadata-action@v4
|
||||||
|
with:
|
||||||
|
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
|
||||||
|
|
||||||
|
# Build and push Docker image with Buildx
|
||||||
|
# https://github.com/docker/build-push-action
|
||||||
|
- name: Build and push
|
||||||
|
id: build-and-push
|
||||||
|
uses: docker/build-push-action@v4
|
||||||
|
with:
|
||||||
|
context: .
|
||||||
|
push: true
|
||||||
|
tags: ${{ steps.meta.outputs.tags }}
|
||||||
|
labels: ${{ steps.meta.outputs.labels }}
|
||||||
|
file: docker/Dockerfile
|
||||||
|
cache-from: type=gha
|
||||||
|
cache-to: type=gha,mode=max
|
|
@ -10,3 +10,5 @@
|
||||||
**/.ipynb_checkpoints
|
**/.ipynb_checkpoints
|
||||||
/wandb/**
|
/wandb/**
|
||||||
/mycfgs/**
|
/mycfgs/**
|
||||||
|
/.vscode/**
|
||||||
|
.ssh_config
|
||||||
|
|
|
@ -0,0 +1,86 @@
|
||||||
|
###################
|
||||||
|
# Builder Stage
|
||||||
|
FROM nvidia/cuda:11.7.1-devel-ubuntu22.04 AS builder
|
||||||
|
|
||||||
|
ARG DEBIAN_FRONTEND=noninteractive
|
||||||
|
|
||||||
|
# Don't write .pyc bytecode
|
||||||
|
ENV PYTHONDONTWRITEBYTECODE=1
|
||||||
|
|
||||||
|
# Create workspace working directory
|
||||||
|
RUN mkdir /build
|
||||||
|
WORKDIR /build
|
||||||
|
|
||||||
|
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
|
||||||
|
RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \
|
||||||
|
--mount=type=cache,target=/var/lib/apt,sharing=locked \
|
||||||
|
apt update && apt-get install -y \
|
||||||
|
git wget build-essential \
|
||||||
|
python3-venv python3-pip \
|
||||||
|
gnupg ca-certificates \
|
||||||
|
&& update-ca-certificates
|
||||||
|
|
||||||
|
ENV VIRTUAL_ENV=/workspace/venv
|
||||||
|
ENV PATH="$VIRTUAL_ENV/bin:$PATH"
|
||||||
|
|
||||||
|
|
||||||
|
ADD docker/requirements.txt /build
|
||||||
|
RUN --mount=type=cache,target=/root/.cache/pip \
|
||||||
|
python3 -m venv ${VIRTUAL_ENV} && \
|
||||||
|
pip install -U -I torch==1.13.1+cu117 torchvision==0.14.1+cu117 --extra-index-url "https://download.pytorch.org/whl/cu117" && \
|
||||||
|
pip install -r requirements.txt && \
|
||||||
|
pip install --pre --no-deps xformers==0.0.17.dev451
|
||||||
|
# In case of emergency, build xformers from scratch
|
||||||
|
# export FORCE_CUDA=1 && export TORCH_CUDA_ARCH_LIST="7.5;8.0;8.6" && export CUDA_VISIBLE_DEVICES=0 && \
|
||||||
|
# pip install --no-deps git+https://github.com/facebookresearch/xformers.git@48a77cc#egg=xformers
|
||||||
|
|
||||||
|
|
||||||
|
###################
|
||||||
|
# Runtime Stage
|
||||||
|
FROM nvidia/cuda:11.7.1-runtime-ubuntu22.04 as runtime
|
||||||
|
|
||||||
|
# Use bash shell
|
||||||
|
SHELL ["/bin/bash", "-o", "pipefail", "-c"]
|
||||||
|
ENV DEBIAN_FRONTEND noninteractive\
|
||||||
|
SHELL=/bin/bash
|
||||||
|
|
||||||
|
# Python logs go strait to stdout/stderr w/o buffering
|
||||||
|
ENV PYTHONUNBUFFERED=1
|
||||||
|
|
||||||
|
# Don't write .pyc bytecode
|
||||||
|
ENV PYTHONDONTWRITEBYTECODE=1
|
||||||
|
|
||||||
|
RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \
|
||||||
|
--mount=type=cache,target=/var/lib/apt,sharing=locked \
|
||||||
|
apt update && apt install -y --no-install-recommends \
|
||||||
|
wget bash curl git git-lfs vim tmux \
|
||||||
|
build-essential lsb-release \
|
||||||
|
python3-pip python3-venv \
|
||||||
|
openssh-server \
|
||||||
|
gnupg ca-certificates && \
|
||||||
|
update-ca-certificates && \
|
||||||
|
apt-get clean && \
|
||||||
|
rm -rf /var/lib/apt/lists/* && \
|
||||||
|
echo "en_US.UTF-8 UTF-8" > /etc/locale.gen
|
||||||
|
|
||||||
|
# Install runpodctl
|
||||||
|
RUN wget https://github.com/runpod/runpodctl/releases/download/v1.9.0/runpodctl-linux-amd -O runpodctl && \
|
||||||
|
chmod a+x runpodctl && \
|
||||||
|
mv runpodctl /usr/local/bin
|
||||||
|
|
||||||
|
ENV VIRTUAL_ENV=/workspace/venv
|
||||||
|
ENV PATH="$VIRTUAL_ENV/bin:$PATH"
|
||||||
|
COPY --from=builder ${VIRTUAL_ENV} ${VIRTUAL_ENV}
|
||||||
|
|
||||||
|
# Workaround for:
|
||||||
|
# https://github.com/TimDettmers/bitsandbytes/issues/62
|
||||||
|
# https://github.com/TimDettmers/bitsandbytes/issues/73
|
||||||
|
ENV LD_LIBRARY_PATH="/usr/local/cuda-11.7/targets/x86_64-linux/lib"
|
||||||
|
RUN ln /usr/local/cuda-11.7/targets/x86_64-linux/lib/libcudart.so.11.0 /usr/local/cuda-11.7/targets/x86_64-linux/lib/libcudart.so
|
||||||
|
|
||||||
|
WORKDIR /workspace
|
||||||
|
|
||||||
|
ADD docker/welcome.txt /
|
||||||
|
ADD docker/start.sh /
|
||||||
|
RUN chmod +x /start.sh
|
||||||
|
CMD [ "/start.sh" ]
|
|
@ -0,0 +1,19 @@
|
||||||
|
aiohttp==3.8.4
|
||||||
|
colorama==0.4.6
|
||||||
|
diffusers[torch]>=0.13.0
|
||||||
|
ftfy==6.1.1
|
||||||
|
ipyevents
|
||||||
|
ipywidgets
|
||||||
|
jupyter-archive
|
||||||
|
jupyterlab
|
||||||
|
ninja
|
||||||
|
omegaconf==2.2.3
|
||||||
|
piexif==1.1.3
|
||||||
|
protobuf==3.20.3
|
||||||
|
pynvml==11.5.0
|
||||||
|
pyre-extensions==0.0.30
|
||||||
|
pytorch-lightning==1.9.2
|
||||||
|
tensorboard==2.11.0
|
||||||
|
transformers==4.25.1
|
||||||
|
triton>=2.0.0a2
|
||||||
|
wandb
|
|
@ -0,0 +1,57 @@
|
||||||
|
#!/bin/bash
|
||||||
|
cat /welcome.txt
|
||||||
|
export PYTHONUNBUFFERED=1
|
||||||
|
|
||||||
|
echo "source /workspace/venv/bin/activate" >> ~/.bashrc
|
||||||
|
source ~/.bashrc
|
||||||
|
|
||||||
|
# Workaround for:
|
||||||
|
# https://github.com/TimDettmers/bitsandbytes/issues/62
|
||||||
|
# https://github.com/TimDettmers/bitsandbytes/issues/73
|
||||||
|
pip install bitsandbytes==0.37.0
|
||||||
|
|
||||||
|
function clone_pull {
|
||||||
|
DIRECTORY=$(basename "$1" .git)
|
||||||
|
if [ -d "$DIRECTORY" ]; then
|
||||||
|
cd "$DIRECTORY"
|
||||||
|
git pull
|
||||||
|
cd ../
|
||||||
|
else
|
||||||
|
git clone "$1"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
# VSCode Dev Container
|
||||||
|
if [[ $LOCAL_DEV ]]
|
||||||
|
then
|
||||||
|
echo "Running in dev container, skipping git pull"
|
||||||
|
else
|
||||||
|
clone_pull https://github.com/victorchall/EveryDream2trainer
|
||||||
|
fi
|
||||||
|
cd /workspace/EveryDream2trainer
|
||||||
|
python utils/get_yamls.py
|
||||||
|
mkdir -p /workspace/EveryDream2trainer/logs
|
||||||
|
mkdir -p /workspace/EveryDream2trainer/input
|
||||||
|
|
||||||
|
# RunPod SSH
|
||||||
|
if [[ -v "PUBLIC_KEY" ]] && [[ ! -d "${HOME}/.ssh" ]]
|
||||||
|
then
|
||||||
|
pushd $HOME
|
||||||
|
mkdir -p .ssh
|
||||||
|
echo ${PUBLIC_KEY} > .ssh/authorized_keys
|
||||||
|
chmod -R 700 .ssh
|
||||||
|
popd
|
||||||
|
service ssh start
|
||||||
|
fi
|
||||||
|
|
||||||
|
# RunPod JupyterLab
|
||||||
|
if [[ $JUPYTER_PASSWORD ]]
|
||||||
|
then
|
||||||
|
tensorboard --logdir /workspace/EveryDream2trainer/logs --host 0.0.0.0 &
|
||||||
|
jupyter nbextension enable --py widgetsnbextension
|
||||||
|
jupyter lab --allow-root --no-browser --port=8888 --ip=* --ServerApp.terminado_settings='{"shell_command":["/bin/bash"]}' --ServerApp.token=$JUPYTER_PASSWORD --ServerApp.allow_origin=* --ServerApp.preferred_dir=/workspace/EveryDream2trainer
|
||||||
|
else
|
||||||
|
echo "Container Started"
|
||||||
|
sleep infinity
|
||||||
|
fi
|
|
@ -0,0 +1,14 @@
|
||||||
|
|
||||||
|
|
||||||
|
███████╗██╗ ██╗███████╗██████╗ ██╗ ██╗██████╗ ██████╗ ███████╗ █████╗ ███╗ ███╗
|
||||||
|
██╔════╝██║ ██║██╔════╝██╔══██╗╚██╗ ██╔╝██╔══██╗██╔══██╗██╔════╝██╔══██╗████╗ ████║
|
||||||
|
█████╗ ██║ ██║█████╗ ██████╔╝ ╚████╔╝ ██║ ██║██████╔╝█████╗ ███████║██╔████╔██║
|
||||||
|
██╔══╝ ╚██╗ ██╔╝██╔══╝ ██╔══██╗ ╚██╔╝ ██║ ██║██╔══██╗██╔══╝ ██╔══██║██║╚██╔╝██║
|
||||||
|
███████╗ ╚████╔╝ ███████╗██║ ██║ ██║ ██████╔╝██║ ██║███████╗██║ ██║██║ ╚═╝ ██║
|
||||||
|
╚══════╝ ╚═══╝ ╚══════╝╚═╝ ╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝╚═╝ ╚═╝ 2
|
||||||
|
|
||||||
|
|
||||||
|
Support:
|
||||||
|
--------
|
||||||
|
|
||||||
|
Repo: https://github.com/victorchall/EveryDream2trainer
|
Loading…
Reference in New Issue