All checks were successful
Build Worker Base and Application Images / check-base-changes (push) Successful in 8s
Build Worker Base and Application Images / build-base (push) Successful in 10m9s
Build Worker Base and Application Images / build-docker (push) Successful in 4m4s
Build Worker Base and Application Images / deploy-stack (push) Successful in 43s
130 lines
No EOL
4.4 KiB
Text
130 lines
No EOL
4.4 KiB
Text
# Base image with complete ML and hardware acceleration stack
|
|
FROM pytorch/pytorch:2.8.0-cuda12.6-cudnn9-runtime
|
|
|
|
# Install build dependencies and system libraries
|
|
RUN apt-get update && apt-get install -y \
|
|
# Build tools
|
|
build-essential \
|
|
cmake \
|
|
git \
|
|
pkg-config \
|
|
wget \
|
|
unzip \
|
|
yasm \
|
|
nasm \
|
|
# Additional dependencies for FFmpeg/NVIDIA build
|
|
libtool \
|
|
libc6 \
|
|
libc6-dev \
|
|
libnuma1 \
|
|
libnuma-dev \
|
|
# Essential compilation libraries
|
|
gcc \
|
|
g++ \
|
|
libc6-dev \
|
|
linux-libc-dev \
|
|
# System libraries
|
|
libgl1-mesa-glx \
|
|
libglib2.0-0 \
|
|
libgomp1 \
|
|
# Core media libraries (essential ones only)
|
|
libjpeg-dev \
|
|
libpng-dev \
|
|
libx264-dev \
|
|
libx265-dev \
|
|
libvpx-dev \
|
|
libmp3lame-dev \
|
|
libv4l-dev \
|
|
# TurboJPEG for fast JPEG encoding
|
|
libturbojpeg0-dev \
|
|
# Python development
|
|
python3-dev \
|
|
python3-numpy \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
# Add NVIDIA CUDA repository and install minimal development tools
|
|
RUN apt-get update && apt-get install -y wget gnupg && \
|
|
wget -O - https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/3bf863cc.pub | apt-key add - && \
|
|
echo "deb https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64 /" > /etc/apt/sources.list.d/cuda.list && \
|
|
apt-get update && \
|
|
apt-get install -y \
|
|
cuda-nvcc-12-6 \
|
|
cuda-cudart-dev-12-6 \
|
|
libnpp-dev-12-6 \
|
|
&& apt-get remove -y wget gnupg && \
|
|
apt-get autoremove -y && \
|
|
rm -rf /var/lib/apt/lists/*
|
|
|
|
# Ensure CUDA paths are available
|
|
ENV PATH="/usr/local/cuda/bin:${PATH}"
|
|
ENV LD_LIBRARY_PATH="/usr/local/cuda/lib64:${LD_LIBRARY_PATH}"
|
|
|
|
# Install NVIDIA Video Codec SDK headers (official method)
|
|
RUN cd /tmp && \
|
|
git clone https://git.videolan.org/git/ffmpeg/nv-codec-headers.git && \
|
|
cd nv-codec-headers && \
|
|
make install && \
|
|
cd / && rm -rf /tmp/*
|
|
|
|
# Build FFmpeg from source with NVIDIA CUDA support
|
|
RUN cd /tmp && \
|
|
echo "Building FFmpeg with NVIDIA CUDA support..." && \
|
|
# Download FFmpeg source (official method)
|
|
git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg/ && \
|
|
cd ffmpeg && \
|
|
# Configure with NVIDIA support (simplified to avoid configure issues)
|
|
./configure \
|
|
--prefix=/usr/local \
|
|
--enable-shared \
|
|
--disable-static \
|
|
--enable-nonfree \
|
|
--enable-gpl \
|
|
--enable-cuda-nvcc \
|
|
--enable-cuvid \
|
|
--enable-nvdec \
|
|
--enable-nvenc \
|
|
--enable-libnpp \
|
|
--extra-cflags=-I/usr/local/cuda/include \
|
|
--extra-ldflags=-L/usr/local/cuda/lib64 \
|
|
--enable-libx264 \
|
|
--enable-libx265 \
|
|
--enable-libvpx \
|
|
--enable-libmp3lame && \
|
|
# Build and install
|
|
make -j$(nproc) && \
|
|
make install && \
|
|
ldconfig && \
|
|
# Verify CUVID decoders are available
|
|
echo "=== Verifying FFmpeg CUVID Support ===" && \
|
|
(ffmpeg -hide_banner -decoders 2>/dev/null | grep cuvid || echo "No CUVID decoders found") && \
|
|
echo "=== Verifying FFmpeg NVENC Support ===" && \
|
|
(ffmpeg -hide_banner -encoders 2>/dev/null | grep nvenc || echo "No NVENC encoders found") && \
|
|
cd / && rm -rf /tmp/*
|
|
|
|
# Set environment variables for maximum hardware acceleration
|
|
ENV LD_LIBRARY_PATH="/usr/local/cuda/lib64:/usr/local/lib:${LD_LIBRARY_PATH}"
|
|
ENV PKG_CONFIG_PATH="/usr/local/lib/pkgconfig:${PKG_CONFIG_PATH}"
|
|
ENV PYTHONPATH="/usr/local/lib/python3.10/dist-packages:${PYTHONPATH}"
|
|
|
|
# Optimized environment variables for hardware acceleration
|
|
ENV OPENCV_FFMPEG_CAPTURE_OPTIONS="rtsp_transport;tcp|hwaccel;cuda|hwaccel_device;0|video_codec;h264_cuvid|hwaccel_output_format;cuda"
|
|
ENV OPENCV_FFMPEG_WRITER_OPTIONS="video_codec;h264_nvenc|preset;fast|tune;zerolatency|gpu;0"
|
|
ENV CUDA_VISIBLE_DEVICES=0
|
|
ENV NVIDIA_VISIBLE_DEVICES=all
|
|
ENV NVIDIA_DRIVER_CAPABILITIES=compute,video,utility
|
|
|
|
# Copy and install base requirements (exclude opencv-python since we built from source)
|
|
COPY requirements.base.txt .
|
|
RUN grep -v opencv-python requirements.base.txt > requirements.tmp && \
|
|
mv requirements.tmp requirements.base.txt && \
|
|
pip install --no-cache-dir -r requirements.base.txt
|
|
|
|
# Set working directory
|
|
WORKDIR /app
|
|
|
|
# Create images directory for bind mount
|
|
RUN mkdir -p /app/images && \
|
|
chmod 755 /app/images
|
|
|
|
# This base image will be reused for all worker builds
|
|
CMD ["python3", "-m", "fastapi", "run", "--host", "0.0.0.0", "--port", "8000"] |