Files
cuframes-composer/docker/Dockerfile
T
gx cd4f3114d6 docker: CUDA 12.4 builder + runtime + PTX forward-compat для Pascal+Blackwell
CUDA 13 убрал sm_61 (Pascal), CUDA 12.4 убрал sm_120 (Blackwell).
Sweet spot: CUDA 12.4 с PTX-only для sm_89, JIT compile на Blackwell.

CMAKE_CUDA_ARCHITECTURES=61-real;75-real;86-real;89-real;89-virtual
покрывает Pascal/Turing/Ampere/Ada native + PTX для forward JIT.

Ubuntu 22.04 jammy glibc 2.35 forward-compatible с host 24.04 noble.

.dockerignore исключает build/ (от хостовой cmake) — иначе
docker build падает с 'CMakeCache directory mismatch'.
2026-06-03 07:51:57 +01:00

73 lines
3.5 KiB
Docker
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# cuframes-composer — production Docker image.
#
# Multi-stage:
# 1) builder: nvidia/cuda CUDA-toolkit + build deps + cmake build
# 2) runtime: nvidia/cuda base (минимум: libcudart) + runtime deps + бинарь
#
# Размер runtime image: ~250 MB (cuda runtime + apt-deps). Build image: ~5 GB.
#
# Использование:
# docker build -t gx/cuframes-composer:0.1 -f docker/Dockerfile .
# docker run --gpus all --network=cctv --ipc=container:cuframes-ipc-anchor \
# -v cctv_cuframes_sock:/run/cuframes:ro \
# -v cuda_grid_icons:/icons:ro \
# -v /usr/share/fonts/truetype/dejavu:/fonts:ro \
# -p 5599:5599 \
# gx/cuframes-composer:0.1 grid_record --out - --control tcp://0.0.0.0:5599 ...
#
# Лицензия: LGPL-2.1+
# ── Builder ──────────────────────────────────────────────────────────────
# CUDA 12 (не 13) — нужен для sm_61 (Pascal GTX 1050) в production.
# CUDA 13 deprecated Pascal. Ubuntu 22.04 jammy glibc 2.35 forward-compat
# на хосте 24.04 noble (glibc 2.39).
FROM nvidia/cuda:12.4.1-devel-ubuntu22.04 AS builder
RUN apt-get update && apt-get install -y --no-install-recommends \
build-essential cmake git \
libpng-dev libfreetype-dev \
libzmq3-dev libjson-c-dev libmosquitto-dev \
&& rm -rf /var/lib/apt/lists/*
WORKDIR /src
COPY . .
RUN git submodule update --init --recursive || true
# CUDA architectures: production targets compiled to real binary,
# а sm_89-virtual генерит PTX для forward JIT на newer GPU (Blackwell sm_120
# = JIT на старте при первом kernel'е). Это избавляет нас от требования
# CUDA 12.8+ который sm_120 native. CUDA 12.4 здесь — sweet spot между
# Pascal (sm_61) и Ada (sm_89).
RUN mkdir -p build && cd build && \
cmake -DCMAKE_BUILD_TYPE=Release \
-DCMAKE_CUDA_ARCHITECTURES="61-real;75-real;86-real;89-real;89-virtual" \
.. && \
make -j$(nproc)
# ── Runtime ──────────────────────────────────────────────────────────────
# runtime variant включает libcudart12 (нужен grid_record/simple_record).
FROM nvidia/cuda:12.4.1-runtime-ubuntu22.04 AS runtime
# Ubuntu 22.04 jammy: package names иные чем noble (libpng16-16 без t64).
# libcudart12 уже в runtime image; здесь только наши user-space deps.
RUN apt-get update && apt-get install -y --no-install-recommends \
libpng16-16 libfreetype6 \
libzmq5 libjson-c5 libmosquitto1 \
fonts-dejavu-core \
&& rm -rf /var/lib/apt/lists/*
# Бинари + libcuframes (статически слинкована не вся, libcuframes shared нужен).
COPY --from=builder /src/build/examples/grid_record /usr/local/bin/grid_record
COPY --from=builder /src/build/examples/simple_record /usr/local/bin/simple_record
COPY --from=builder /src/build/third_party/cuframes/libcuframes/libcuframes.so.0.4.0 \
/usr/lib/x86_64-linux-gnu/libcuframes.so.0
COPY --from=builder /src/build/src/libcuframes_composer.so.0.1.0 \
/usr/lib/x86_64-linux-gnu/libcuframes_composer.so.0
# NVIDIA_DRIVER_CAPABILITIES должен включать 'video' для NVENC через libnvidia-encode.
ENV NVIDIA_DRIVER_CAPABILITIES=compute,utility,video
ENTRYPOINT ["/usr/local/bin/grid_record"]
CMD ["--help"]