6962bc3c7e
Dockerfile.dev + docker-compose.dev.yml + docker/README.md. Base: nvidia/cuda:12.4.1-cudnn-devel-ubuntu24.04. В контейнер включены: - CUDA toolkit (nvcc, headers, libs) - GCC 12, Clang + clang-format + clang-tidy - CMake + Ninja - FFmpeg dev headers (6.x системные) — для linking при разработке filter - Python 3.12 + dev (для Phase 3 bindings) - Profiling/debug tools: valgrind, gdb, strace, ltrace docker-compose.dev.yml настройки: - runtime: nvidia + --gpus all - ipc: shareable — для cross-container CUDA IPC (Phase 1+) - shm_size: 2gb — стандартный 64 MB не хватит для frame buffers - SYS_PTRACE + seccomp:unconfined — для gdb/strace внутри (dev-only) - bind-mount корня репо → /workspace - /run/cuframes для Unix sockets Использование документировано в docker/README.md. Production-images (FFmpeg-with-plugin, Frigate drop-in) — отдельная работа в Phase 4.
81 lines
3.4 KiB
Markdown
81 lines
3.4 KiB
Markdown
# Docker for cuframes
|
||
|
||
Все сборки и тесты делаются в Docker. Хостовый CUDA toolkit не нужен —
|
||
только NVIDIA driver + nvidia-container-toolkit.
|
||
|
||
## Развёртывание dev-окружения
|
||
|
||
```bash
|
||
# Один раз (поднимет dev-контейнер на фоне)
|
||
docker compose -f docker/docker-compose.dev.yml up -d
|
||
|
||
# Войти в контейнер
|
||
docker compose -f docker/docker-compose.dev.yml exec dev bash
|
||
```
|
||
|
||
После `up -d` контейнер `cuframes-dev` живёт пока его не остановят. Repo
|
||
смонтирован в `/workspace`.
|
||
|
||
Проверка что CUDA видна:
|
||
|
||
```bash
|
||
docker compose -f docker/docker-compose.dev.yml exec dev nvidia-smi
|
||
docker compose -f docker/docker-compose.dev.yml exec dev nvcc --version
|
||
```
|
||
|
||
## Что внутри
|
||
|
||
| Компонент | Версия | Зачем |
|
||
|---|---|---|
|
||
| Ubuntu | 24.04 | base |
|
||
| CUDA Toolkit | 12.4.1 | для `nvcc`, headers, runtime libs |
|
||
| cuDNN | 9 | для возможных bindings к ONNX |
|
||
| GCC | 12 | стандартный для Ubuntu 24.04 |
|
||
| Clang + clang-format + clang-tidy | системные | code style + static analysis |
|
||
| CMake | системный (≥3.28) | build |
|
||
| Ninja | системный | быстрее make |
|
||
| FFmpeg dev headers | системные (6.x) | для linking при разработке filter |
|
||
| Python 3 + dev | системный (3.12) | bindings (Phase 3) |
|
||
| Profiling | valgrind, gdb, strace, ltrace | debug-набор |
|
||
|
||
## Что снаружи (на хосте)
|
||
|
||
Требуется:
|
||
- NVIDIA driver ≥ 555 (для CUDA 12.4)
|
||
- [nvidia-container-toolkit](https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html)
|
||
- Docker Engine с `--gpus` поддержкой
|
||
- Каталог `/run/cuframes` (создаётся compose'ом с rw-доступом, либо `sudo mkdir -p /run/cuframes && sudo chown $USER /run/cuframes`)
|
||
|
||
## Ограничения / нюансы
|
||
|
||
- **`shm_size: 2gb`** — `/dev/shm` контейнера, нужен для CUDA IPC handles
|
||
и producer/consumer shared memory rings. Default 64 MB не хватит.
|
||
- **`ipc: shareable`** — позволяет связывать namespace с другими контейнерами
|
||
через `ipc: "container:cuframes-dev"`. Нужно для cross-container CUDA IPC.
|
||
- **`SYS_PTRACE` cap + `seccomp:unconfined`** — для gdb / strace inside.
|
||
Снимать в production-builds.
|
||
- Sysctl / ulimits — bind-mount файла `/etc/security/limits.conf` в init не
|
||
гарантирует применения (зависит от docker config). Если CUDA-IPC даст
|
||
`EMFILE` — поднять host-side `ulimit -n 65536` перед `docker compose up`.
|
||
|
||
## Полезные команды (внутри контейнера)
|
||
|
||
```bash
|
||
# Build cuframes (когда появится CMakeLists.txt)
|
||
cmake -B build -S . -G Ninja
|
||
cmake --build build -j
|
||
|
||
# Run tests
|
||
ctest --test-dir build --output-on-failure
|
||
|
||
# Phase 0 spike измерения
|
||
./build/tools/spike/pingpong_producer cam_test &
|
||
./build/tools/spike/pingpong_consumer cam_test
|
||
```
|
||
|
||
## Distribution / production images
|
||
|
||
Это **dev-окружение**. Production-images (для FFmpeg-with-cuframes-plugin,
|
||
Frigate drop-in) — отдельные Dockerfiles в `docker/ffmpeg-cuframes/` и
|
||
`docker/ffmpeg-cuframes-frigate/`, появятся в Phase 4.
|