File size: 2,070 Bytes
04e0ce2
7786e96
e65a8eb
7f8855a
9e4a797
890829d
7f8855a
 
 
 
e65a8eb
 
 
7f8855a
 
 
 
 
b039445
 
 
 
 
 
04e0ce2
b039445
04e0ce2
 
 
7b8f950
7f8855a
04e0ce2
7f8855a
 
 
 
 
 
 
 
c9d7ff6
3b64741
35e2a0f
04e0ce2
b5f1353
 
7f8855a
 
 
35e2a0f
04e0ce2
9e4a797
35e2a0f
15a742d
04e0ce2
e65a8eb
35e2a0f
7f8855a
9e4a797
 
 
15a742d
 
 
 
 
 
 
 
 
 
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
# Use an official Python runtime as a parent image (Debian 12 Bookworm)
FROM python:3.9-slim

# Disable Python bytecode, buffer stdout/stderr, pin NumPy <2, and redirect caches
ENV PYTHONDONTWRITEBYTECODE=1 \
    PYTHONUNBUFFERED=1 \
    NUMPY_EXPLICIT_VERSION=1.23.5 \
    XDG_CACHE_HOME=/app/cache \
    TORCH_HOME=/app/cache/torch \
    LLVM_CONFIG=/usr/bin/llvm-config-14

WORKDIR /app

# Create cache dirs before anything else
RUN mkdir -p /app/cache/torch/hub \
    && chmod -R 777 /app/cache

# Install build dependencies, audio/video libs, and LLVM 14
RUN apt-get update && \
    apt-get install -y --no-install-recommends \
        build-essential \
        libedit-dev \
        libffi-dev \
        python3-dev \
        libgl1-mesa-glx libsm6 libxrender1 libglib2.0-0 \
        ffmpeg \
        libsndfile1 libsndfile1-dev \
        clang-14 llvm-14-dev llvm-14-runtime \
    && rm -rf /var/lib/apt/lists/*

# Pin NumPy to 1.x, then install libs that must compile against it
RUN pip uninstall -y numpy || true && \
    pip install --no-cache-dir numpy==${NUMPY_EXPLICIT_VERSION} && \
    pip install --no-cache-dir \
        llvmlite==0.38.0 \
        numba==0.55.2 \
        resampy==0.3.1 \
        librosa==0.9.2

# Install your other Python dependencies
COPY requirements.txt /app/
RUN pip install --no-cache-dir -r requirements.txt

# Copy application code
COPY . /app/

# Create and chmod the uploads/results/checkpoints/temp dirs
RUN mkdir -p uploads results checkpoints temp \
    && chmod -R 777 uploads results checkpoints temp

# Ensure the entire app directory is writable
RUN chmod -R 777 /app

# Expose the inference port
# Expose the inference port
EXPOSE 7860

# Set Flask env
ENV FLASK_APP=app.py \
    FLASK_ENV=production

# Launch with Gunicorn:
#  - gthread: threaded worker class
#  - threads=2: two threads per worker
#  - timeout=600: 10-minute timeout to cover long inferences
CMD ["gunicorn", \
     "--worker-class", "gthread", \
     "--threads", "2", \
     "--timeout", "600", \
     "--bind", "0.0.0.0:7860", \
     "app:app"]