Skip to content

Commit

Permalink
perf: Optimizing docker builds (#547)
Browse files Browse the repository at this point in the history
Signed-off-by: 吴小白 <[email protected]>
  • Loading branch information
wojiushixiaobai authored Sep 15, 2024
1 parent c7c8c94 commit e413df7
Show file tree
Hide file tree
Showing 6 changed files with 189 additions and 17 deletions.
2 changes: 2 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
.git
.github
results
data
*.filelist
Expand Down
56 changes: 56 additions & 0 deletions .github/workflows/build-dev.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
name: Build Image

on:
push:
branches:
- main

jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: docker/setup-qemu-action@v3
- uses: docker/setup-buildx-action@v3
- name: Get Version
run: |
version=dev
full_version=${version}-$(date "+%Y%m%d")
echo "version=${version}" >> $GITHUB_ENV
echo "full_version=${full_version}" >> $GITHUB_ENV
- name: Login to GitHub Container Registry
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.GITHUB_TOKEN }}

- name: Build and Push Image
uses: docker/build-push-action@v5
with:
context: .
file: Dockerfile
platforms: linux/amd64,linux/arm64
push: true
tags: |
ghcr.io/${{ github.repository_owner }}/fish-speech:${{ env.version }}
outputs: type=image,oci-mediatypes=true,compression=zstd,compression-level=3,force-compression=true
cache-from: type=gha
cache-to: type=gha,mode=max

- name: Build and Push Debug Image
uses: docker/build-push-action@v5
with:
context: .
file: Dockerfile-debug
platforms: linux/amd64,linux/arm64
push: true
build-args: |
VERSION=${{ env.version }}
tags: |
ghcr.io/${{ github.repository_owner }}/fish-speech:${{ env.version }}-debug
ghcr.io/${{ github.repository_owner }}/fish-speech:${{ env.full_version }}
outputs: type=image,oci-mediatypes=true,compression=zstd,compression-level=3,force-compression=true
cache-from: type=gha
cache-to: type=gha,mode=max
53 changes: 53 additions & 0 deletions .github/workflows/build-linux-image.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
name: Build Image

on:
push:
tags:
- 'v*'

jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: docker/setup-qemu-action@v3
- uses: docker/setup-buildx-action@v3
- name: Get Version
run: |
echo "version=$(basename ${GITHUB_REF})" >> $GITHUB_ENV
- name: Login to GitHub Container Registry
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.GITHUB_TOKEN }}

- name: Build and Push Image
uses: docker/build-push-action@v5
with:
context: .
file: Dockerfile
platforms: linux/amd64,linux/arm64
push: true
tags: |
ghcr.io/${{ github.repository_owner }}/fish-speech:${{ env.version }}
ghcr.io/${{ github.repository_owner }}/fish-speech:latest
outputs: type=image,oci-mediatypes=true,compression=zstd,compression-level=3,force-compression=true
cache-from: type=gha
cache-to: type=gha,mode=max

- name: Build and Push Debug Image
uses: docker/build-push-action@v5
with:
context: .
file: Dockerfile-debug
platforms: linux/amd64,linux/arm64
push: true
build-args: |
VERSION=${{ env.version }}
tags: |
ghcr.io/${{ github.repository_owner }}/fish-speech:${{ env.version }}-debug
outputs: type=image,oci-mediatypes=true,compression=zstd,compression-level=3,force-compression=true
cache-from: type=gha
cache-to: type=gha,mode=max
32 changes: 32 additions & 0 deletions Dockerfile-debug
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
ARG VERSION

FROM ghcr.io/fishaudio/fish-speech:${VERSION}

ARG TOOLS=" \
git \
curl \
build-essential \
ffmpeg \
libsm6 \
libxext6 \
libjpeg-dev \
zlib1g-dev \
aria2 \
zsh \
openssh-server \
sudo \
protobuf-compiler \
cmake"

RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \
--mount=type=cache,target=/var/lib/apt,sharing=locked \
set -ex \
&& apt-get update \
&& apt-get -y install --no-install-recommends ${TOOLS}

# Install oh-my-zsh so your terminal looks nice
RUN sh -c "$(curl https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)" "" --unattended

# Set zsh as default shell
RUN chsh -s /usr/bin/zsh
ENV SHELL=/usr/bin/zsh
53 changes: 36 additions & 17 deletions dockerfile
Original file line number Diff line number Diff line change
@@ -1,24 +1,43 @@
FROM python:3.10-slim-bookworm
FROM python:3.12-slim-bookworm AS stage-1
ARG TARGETARCH

# Install system dependencies
ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get update && apt-get install -y git curl build-essential ffmpeg libsm6 libxext6 libjpeg-dev \
zlib1g-dev aria2 zsh openssh-server sudo protobuf-compiler cmake libsox-dev && \
apt-get clean && rm -rf /var/lib/apt/lists/*
ARG HUGGINGFACE_MODEL=fish-speech-1.4
ARG HF_ENDPOINT=https://huggingface.co

# Install oh-my-zsh so your terminal looks nice
RUN sh -c "$(curl https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)" "" --unattended
WORKDIR /opt/fish-speech

# Set zsh as default shell
RUN chsh -s /usr/bin/zsh
ENV SHELL=/usr/bin/zsh
RUN set -ex \
&& pip install huggingface_hub \
&& HF_ENDPOINT=${HF_ENDPOINT} huggingface-cli download --resume-download fishaudio/${HUGGINGFACE_MODEL} --local-dir checkpoints/${HUGGINGFACE_MODEL}

# Setup torchaudio
RUN pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121
FROM python:3.12-slim-bookworm
ARG TARGETARCH

ARG DEPENDENCIES=" \
ca-certificates \
libsox-dev"

RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \
--mount=type=cache,target=/var/lib/apt,sharing=locked \
set -ex \
&& rm -f /etc/apt/apt.conf.d/docker-clean \
&& echo 'Binary::apt::APT::Keep-Downloaded-Packages "true";' >/etc/apt/apt.conf.d/keep-cache \
&& apt-get update \
&& apt-get -y install --no-install-recommends ${DEPENDENCIES} \
&& echo "no" | dpkg-reconfigure dash

WORKDIR /opt/fish-speech

# Project Env
WORKDIR /exp
COPY . .
RUN pip3 install -e .

CMD /bin/zsh
RUN --mount=type=cache,target=/root/.cache,sharing=locked \
set -ex \
&& pip install -e .[stable]

COPY --from=stage-1 /opt/fish-speech/checkpoints /opt/fish-speech/checkpoints

ENV GRADIO_SERVER_NAME="0.0.0.0"

EXPOSE 7860

CMD ["./entrypoint.sh"]
10 changes: 10 additions & 0 deletions entrypoint.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
#!/bin/bash

CUDA_ENABLED=${CUDA_ENABLED:-true}
DEVICE=""

if [ "${CUDA_ENABLED}" != "true" ]; then
DEVICE="--device cpu"
fi

exec python tools/webui.py ${DEVICE}

0 comments on commit e413df7

Please sign in to comment.