cd4f3114d6
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'.
73 lines
3.5 KiB
Docker
73 lines
3.5 KiB
Docker
# 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"]
|