Files

92 lines
2.9 KiB
Docker
Raw Permalink Normal View History

# Dockerfile.rvc - Multi-stage build for RVC API Server using host ROCm
# Final image size target: <20GB (down from 85GB)
# Python: 3.10.x | pip: 24.0 | PyTorch: 2.5.1+rocm6.2
# ============================================================
# STAGE 1: BUILD - Install all dependencies and compile extensions
# ============================================================
FROM ubuntu:22.04 AS builder
ENV DEBIAN_FRONTEND=noninteractive
ENV TZ=UTC
# Install system dependencies and Python 3.10
RUN apt-get update && apt-get install -y \
python3.10 \
python3.10-dev \
python3-pip \
git \
wget \
build-essential \
libsndfile1-dev \
&& rm -rf /var/lib/apt/lists/*
# Make python3.10 the default
RUN update-alternatives --install /usr/bin/python python /usr/bin/python3.10 1 && \
update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.10 1
WORKDIR /app
# Copy requirements files
COPY requirements-rvc.txt /app/
# Install pip and Python dependencies
# Install PyTorch 2.5.1+rocm6.2 from official wheel (supports gfx1030/RX 6800)
RUN pip install --no-cache-dir pip==24.0 && \
pip install --no-cache-dir torch==2.5.1 torchvision==0.20.1 torchaudio==2.5.1 --index-url https://download.pytorch.org/whl/rocm6.2 && \
pip install --no-cache-dir -r requirements-rvc.txt && \
pip uninstall -y apex || true && \
pip install --no-cache-dir numpy==1.23.5 scipy==1.15.3 numba==0.56.4
# Copy RVC WebUI (models and code)
COPY Retrieval-based-Voice-Conversion-WebUI/ /app/Retrieval-based-Voice-Conversion-WebUI/
# Copy application files
COPY soprano_rvc_api.py /app/
COPY soprano_rvc_config.json /app/
COPY rvc_config.json /app/
COPY rvc_torch_patch.py /app/
# ============================================================
# STAGE 2: RUNTIME - Minimal runtime with only necessary files
# ============================================================
FROM ubuntu:22.04
ENV DEBIAN_FRONTEND=noninteractive
ENV TZ=UTC
# Install only runtime dependencies (no build tools)
RUN apt-get update && apt-get install -y \
python3.10 \
python3-pip \
libsndfile1 \
ffmpeg \
curl \
&& rm -rf /var/lib/apt/lists/* \
&& apt-get clean
# Make python3.10 the default
RUN update-alternatives --install /usr/bin/python python /usr/bin/python3.10 1 && \
update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.10 1
WORKDIR /app
# Copy installed Python packages from builder
COPY --from=builder /usr/local/lib/python3.10 /usr/local/lib/python3.10
# Copy application and models
COPY --from=builder /app /app
# Expose HTTP API port
EXPOSE 8765
# Health check
HEALTHCHECK --interval=30s --timeout=10s --start-period=120s --retries=3 \
CMD curl -f http://localhost:8765/health || exit 1
# Environment variable for Soprano server connection
ENV SOPRANO_SERVER=tcp://soprano:5555
# Run RVC API server
CMD ["python", "soprano_rvc_api.py"]