FROM nvidia/cuda:12.1.0-cudnn8-devel-ubuntu20.04 LABEL maintainer="Hugging Face" ARG DEBIAN_FRONTEND=noninteractive RUN apt update RUN apt install -y git libsndfile1-dev tesseract-ocr espeak-ng python3 python3-pip ffmpeg RUN python3 -m pip install --no-cache-dir --upgrade pip # RUN apt-get install -y git libsndfile1-dev tesseract-ocr espeak-ng ffmpeg # Prevents Python from writing pyc files. ENV PYTHONDONTWRITEBYTECODE=1 # Open MP threads. It may need to change in production env. ENV OMP_NUM_THREADS=1 # Keeps Python from buffering stdout and stderr to avoid situations where # the application crashes without emitting any logs due to buffering. ENV PYTHONUNBUFFERED=1 # ENV HF_HUB_CACHE="/hub" WORKDIR /app # Create a non-privileged user that the app will run under. # See https://docs.docker.com/go/dockerfile-user-best-practices/ RUN useradd -m -u 1000 user # Download dependencies as a separate step to take advantage of Docker's caching. # Leverage a cache mount to /root/.cache/pip to speed up subsequent builds. # Leverage a bind mount to requirements.txt to avoid having to copy them into # into this layer. RUN --mount=type=cache,target=/root/.cache/pip \ --mount=type=bind,source=requirements.txt,target=requirements.txt \ python3 -m pip install -r requirements.txt # Switch to the non-privileged user to run the application. USER user # Copy the source code into the container. COPY . . # Expose the port that the application listens on. EXPOSE 8088 # Run the application. CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "7860"]