File size: 2,893 Bytes
44c65c0
7a1cbf5
 
 
 
 
44c65c0
7a1cbf5
 
 
 
 
 
44c65c0
7a1cbf5
 
 
 
 
 
 
 
 
 
44c65c0
 
 
7a1cbf5
44c65c0
 
 
 
 
 
 
7a1cbf5
44c65c0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7a1cbf5
44c65c0
 
 
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
# -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"]