File size: 3,447 Bytes
7a1cbf5 edbaed7 7a1cbf5 913af51 edbaed7 7a1cbf5 edbaed7 7a1cbf5 913af51 7a1cbf5 | 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 77 78 79 80 81 82 83 | FROM nvidia/cuda:12.9.0-runtime-ubuntu24.04
# Avoid interactive prompts during package installation
ENV DEBIAN_FRONTEND=noninteractive
# Install Python and system dependencies.
#
# NO ffmpeg, and NO torchcodec below: this pipeline only ever decodes .wav, which
# libsndfile1 (via soundfile/librosa) handles on its own. ffmpeg was here solely to satisfy
# torchcodec, which in turn was only needed to decode the dataset's Audio column — and the
# `datasets<4.0` pin below removes that need. Dropping ffmpeg saves ~630 MB of apt packages and
# most of this layer's build time (it was ~60 min of a recent Space build).
#
# THESE THREE GO TOGETHER — do not change one alone:
# * unpin `datasets` (>=4.0) and its Audio column decodes via torchcodec, so torchcodec and
# ffmpeg both have to come back;
# * re-add torchcodec WITHOUT ffmpeg and `transformers.audio_utils.load_audio` gets worse, not
# better: its default `backend="auto"` prefers torchcodec whenever it is importable, so it
# would select a decoder whose FFmpeg shared libs are missing instead of falling back to
# librosa. Stages 2 (transcribe) and 3 (SIM) both call it.
RUN apt-get update && apt-get install -y --no-install-recommends \
python3 \
python3-pip \
python3-dev \
git \
libsndfile1 \
&& rm -rf /var/lib/apt/lists/*
# Set Python alias (Ubuntu 24.04 ships Python 3.12)
RUN ln -sf /usr/bin/python3 /usr/bin/python
# Allow pip to install packages system-wide in the container (PEP 668)
ENV PIP_BREAK_SYSTEM_PACKAGES=1
# Set working directory
WORKDIR /app
# Install PyTorch ecosystem (cu128 wheels for CUDA 12.8+/12.9 compat)
# torchvision is required by Qwen3-Omni's AutoProcessor, which wraps a video processor
# (Qwen2VLVideoProcessor) even when only text/audio inputs are used.
RUN pip install --no-cache-dir \
torch==2.8.0 \
torchaudio==2.8.0 \
torchvision==0.23.0 \
--index-url https://download.pytorch.org/whl/cu128
# Install common requirements (torch already installed above, pip will skip it)
# regex + kaldialign are required by the Open ASR Leaderboard `normalizer/` used for WER scoring.
# zhconv folds traditional Chinese to simplified for the CER scoring path (Seed-TTS zh splits).
# `datasets` is pinned <4.0 to match the other backend images (chatterbox, xtts, pocket-tts):
# 4.0 moved the Audio column's decoder to torchcodec, which pins exact torch minors and needs
# FFmpeg shared libs. 3.x decodes with soundfile/librosa instead, which is all this pipeline needs
# (.wav only) — and it keeps `prompt_audio["array"]`/`["sampling_rate"]` in run_eval.py reading a
# plain dict rather than relying on the AudioDecoder compat shim 4.x/5.x ship.
RUN pip install --no-cache-dir \
git+https://github.com/huggingface/transformers.git \
evaluate \
"datasets<4.0" \
librosa \
jiwer \
num2words \
regex \
kaldialign \
zhconv \
sentencepiece \
protobuf \
peft \
g2p-en \
soundfile
# Download NLTK data required by g2p-en (used by FastSpeech2ConformerTokenizer).
RUN python3 -c "import nltk; nltk.download('averaged_perceptron_tagger_eng'); nltk.download('cmudict')"
# Copy the full repository
COPY . /app
# Default entrypoint
ENTRYPOINT ["bash"]
# Keep-alive CMD so the Space runtime stays healthy. HF Jobs and `docker run`
# override this with their own command (e.g. `run_cohere.sh`).
EXPOSE 7860
CMD ["-c", "python3 -m http.server 7860"] |