Spaces:
Sleeping
Sleeping
File size: 3,288 Bytes
4257f13 7a1cbf5 4257f13 7a1cbf5 d938a0e 4257f13 f50a207 4257f13 7a1cbf5 4257f13 7a1cbf5 4257f13 7a1cbf5 4257f13 7a1cbf5 44c65c0 7a1cbf5 44c65c0 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 | 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"]
|