evals-fish / Dockerfile
bezzam's picture
bezzam HF Staff
Update Dockerfile
4257f13 verified
Raw
History Blame Contribute Delete
3.29 kB
FROM nvidia/cuda:12.9.0-runtime-ubuntu24.04
# Avoid interactive prompts during package installation
ENV DEBIAN_FRONTEND=noninteractive
# Make apt resilient to slow/stalled mirrors: fail a stuck download fast and retry a few
# times instead of hanging for hours on a single package.
RUN printf 'Acquire::Retries "5";\nAcquire::http::Timeout "30";\nAcquire::https::Timeout "30";\n' \
> /etc/apt/apt.conf.d/99-retries-timeout
# Some build hosts can't reach security.ubuntu.com (its mirror IPs time out on :80), which
# breaks apt on the krb5/security-pocket packages. archive.ubuntu.com carries the same
# packages and is reachable, so redirect the security pocket to it. Handles both the
# deb822 (.sources, default on 24.04) and legacy sources.list layouts.
RUN sed -i 's|http://security.ubuntu.com/ubuntu|http://archive.ubuntu.com/ubuntu|g' \
/etc/apt/sources.list.d/ubuntu.sources 2>/dev/null || true; \
sed -i 's|http://security.ubuntu.com/ubuntu|http://archive.ubuntu.com/ubuntu|g' \
/etc/apt/sources.list 2>/dev/null || true
# System deps: git(-lfs) to clone the repo + weights; portaudio19-dev + build-essential to
# build pyaudio (a fish-speech dep); ffmpeg/libsndfile1 for audio I/O.
RUN apt-get update && apt-get install -y --no-install-recommends \
python3 \
python3-pip \
python3-dev \
git \
git-lfs \
ffmpeg \
libsndfile1 \
portaudio19-dev \
build-essential \
&& rm -rf /var/lib/apt/lists/* \
&& git lfs install
# Set Python alias (Ubuntu 24.04 ships Python 3.12)
RUN ln -sf /usr/bin/python3 /usr/bin/python
ENV PIP_BREAK_SYSTEM_PACKAGES=1
WORKDIR /app
RUN apt-get update && apt-get install -y --no-install-recommends cargo \
&& rm -rf /var/lib/apt/lists/*
# Upgrade pip so it fetches prebuilt manylinux wheels (e.g. tokenizers) instead of trying to
# build them from source — the base image's system pip is old enough to miss them, which would
# otherwise require a Rust toolchain to compile `tokenizers`.
RUN pip install --no-cache-dir --upgrade --ignore-installed pip setuptools wheel
# Install PyTorch (cu128 wheels). fish-speech hard-pins torch==2.8.0 / torchaudio==2.8.0.
RUN pip install --no-cache-dir \
torch==2.8.0 \
torchaudio==2.8.0 \
--index-url https://download.pytorch.org/whl/cu128
# Clone fish-speech (= S2 codebase) and install it editable. Provides the inference module
# run_eval.py imports and the vendored configs / .project-root it resolves at runtime.
RUN git clone https://github.com/fishaudio/fish-speech.git /opt/fish-speech \
&& cd /opt/fish-speech && pip install --no-cache-dir -e .
# datasets + tqdm for the eval loop (soundfile comes in via fish-speech deps).
RUN pip install --no-cache-dir datasets tqdm
# Download the S2-Pro weights (~11 GB: safetensors + codec.pth) into the checkpoint dir.
# S2-Pro is ungated, so this needs no HF token. Baked in so the eval runs offline.
RUN python3 -c "from huggingface_hub import snapshot_download; snapshot_download('fishaudio/s2-pro', local_dir='/opt/fish-speech/checkpoints/s2-pro')"
# Copy the full repository
COPY . /app
# Default entrypoint
ENTRYPOINT ["bash"]
# Keep-alive CMD so the Space runtime stays healthy; `docker run` overrides it.
EXPOSE 7860
CMD ["-c", "python3 -m http.server 7860"]