evals-super / Dockerfile
bezzam's picture
bezzam HF Staff
Update Dockerfile
44c65c0 verified
Raw
History Blame Contribute Delete
2.89 kB
# -runtime is enough: Supertonic 3 is pure ONNX Runtime inference (no CUDA extensions to build).
FROM nvidia/cuda:12.9.0-runtime-ubuntu24.04
# Avoid interactive prompts during package installation
ENV DEBIAN_FRONTEND=noninteractive
# Install Python and system dependencies (libsndfile1 + ffmpeg for audio I/O).
RUN apt-get update && apt-get install -y --no-install-recommends \
python3 \
python3-pip \
python3-dev \
git \
ffmpeg \
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
WORKDIR /app
# Upgrade pip so it fetches prebuilt manylinux wheels. Debian-installed pip has no RECORD
# file and cannot be uninstalled, hence --ignore-installed.
RUN pip install --no-cache-dir --upgrade --ignore-installed pip setuptools wheel
# No torch needed: inference is pure ONNX Runtime.
# onnxruntime-gpu 1.23.x ships CUDA 12.x builds (matches the 12.9 base) but needs cuDNN 9,
# which the -runtime base image does NOT include -> pull cuDNN 9 from pip and expose it via
# LD_LIBRARY_PATH (cuBLAS etc. are already in the CUDA runtime image). The CUDA EP falls
# back to CPUExecutionProvider if anything is missing (run_eval.py prints active providers).
# Pin onnxruntime to the version the upstream repo pins (1.23.1); `onnx` is used by
# run_eval.py to count model parameters from the graph initializers.
RUN pip install --no-cache-dir \
onnxruntime-gpu==1.23.0 \
nvidia-cudnn-cu12 \
"numpy>=1.26.0" \
soundfile \
onnx
ENV LD_LIBRARY_PATH=/usr/local/lib/python3.12/dist-packages/nvidia/cudnn/lib:${LD_LIBRARY_PATH}
# Clone the reference implementation: run_eval.py imports the ONNX pipeline
# (TextToSpeech.batch, load_onnx_all, load_voice_style, ...) from py/helper.py.
# helper.py itself only needs numpy + onnxruntime (librosa/PyYAML in the repo's
# requirements.txt are for other examples and are not imported).
RUN git clone https://github.com/supertone-inc/supertonic.git /opt/supertonic
ENV SUPERTONIC_HELPER_DIR=/opt/supertonic/py
# datasets + tqdm for the eval loop; huggingface_hub to bake the weights below.
RUN pip install --no-cache-dir datasets tqdm huggingface_hub
# Bake the Supertonic 3 assets (~400 MB: 4 ONNX graphs + tts.json + unicode_indexer.json
# + M1-M5/F1-F5 voice-style JSONs). Ungated, so no HF token needed.
RUN python3 -c "from huggingface_hub import snapshot_download; snapshot_download('Supertone/supertonic-3', local_dir='/opt/supertonic3', allow_patterns=['onnx/*', 'voice_styles/*', 'config.json'])"
# 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"]