main #1

Merged
Dan4ick merged 2 commits from Zhirik1337/Brainrot_Muxa:main into main 2026-09-22 18:36:49 +00:00
6 changed files with 311 additions and 0 deletions
Showing only changes of commit a06a2f45bb - Show all commits

38
.dockerignore Normal file
View file

@ -0,0 +1,38 @@
# Git
.git
.gitignore
.gitattributes
.github
# Python caches
__pycache__
*.pyc
*.pyo
*.pyd
.pytest_cache
.coverage
htmlcov/
*.egg-info/
dist/
build/
# Virtual environments
venv/
.venv/
env/
.env
# Editor & OS artifacts
.idea/
.vscode/
*.swp
*.swo
*~
.DS_Store
# Agent & temporary files
scratch/
.gemini/
# Raw lidar data (mounted via volume, never baked into image)
data/

50
Dockerfile Normal file
View file

@ -0,0 +1,50 @@
# ============================================================================
# FlyGuard: ML-ядро обнаружения препятствий в тоннеле метро (Кейс 05, ЛЦТ-2026)
# ============================================================================
FROM python:3.11-slim-bookworm AS base
# System configuration & environment
ENV DEBIAN_FRONTEND=noninteractive \
PYTHONUNBUFFERED=1 \
PYTHONDONTWRITEBYTECODE=1 \
PYTHONPATH="/app:/app/tools" \
FLYGUARD_DATA="/data"
# Install runtime system dependencies (libgomp1 is required by LightGBM/OpenMP)
RUN apt-get update && apt-get install -y --no-install-recommends \
libgomp1 \
ca-certificates \
&& rm -rf /var/lib/apt/lists/*
# Create non-root user and directories
RUN useradd -m -u 1000 -s /bin/bash flyguard && \
mkdir -p /app /data /app/artifacts && \
chown -R flyguard:flyguard /app /data
WORKDIR /app
# Cache layer: copy only requirements first
COPY --chown=flyguard:flyguard requirements.txt /app/
# Install python dependencies
RUN pip install --no-cache-dir --upgrade pip && \
pip install --no-cache-dir -r requirements.txt
# Copy application source code
COPY --chown=flyguard:flyguard . /app/
# Make sure entrypoint script is executable
RUN chmod +x /app/docker-entrypoint.sh
# Switch to non-root user for security
USER flyguard
# Volume mount points
VOLUME ["/data", "/app/artifacts"]
# Container healthcheck
HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \
CMD python3 -c "import flyguard, numpy, scipy, lightgbm; print('healthy')" || exit 1
ENTRYPOINT ["/app/docker-entrypoint.sh"]
CMD ["test"]

91
docker-compose.yml Normal file
View file

@ -0,0 +1,91 @@
services:
# --------------------------------------------------------------------------
# 1. Запуск набора тестов
# docker compose run --rm test
# --------------------------------------------------------------------------
test:
build:
context: .
dockerfile: Dockerfile
image: flyguard:latest
container_name: flyguard-test
command: ["test"]
volumes:
- ./artifacts:/app/artifacts
- ./data:/data:ro
environment:
- PYTHONUNBUFFERED=1
- FLYGUARD_DATA=/data
shm_size: '2gb'
# --------------------------------------------------------------------------
# 2. Оценка ложных тревог (leave-one-bag-out)
# docker compose run --rm evaluate
# --------------------------------------------------------------------------
evaluate:
image: flyguard:latest
container_name: flyguard-evaluate
command: ["evaluate", "--mbon-dir", "artifacts/mbon_folds"]
volumes:
- ./artifacts:/app/artifacts
- ./data:/data:ro
environment:
- PYTHONUNBUFFERED=1
- FLYGUARD_DATA=/data
shm_size: '2gb'
# --------------------------------------------------------------------------
# 3. Полигон дальности обнаружения с аугментациями
# docker compose run --rm benchmark
# --------------------------------------------------------------------------
benchmark:
image: flyguard:latest
container_name: flyguard-benchmark
command: [
"benchmark",
"--memory", "artifacts/mushroom_body.npz",
"--mbon-dir", "artifacts/mbon_folds",
"--augment",
"--out", "artifacts/benchmark.json"
]
volumes:
- ./artifacts:/app/artifacts
- ./data:/data:ro
environment:
- PYTHONUNBUFFERED=1
- FLYGUARD_DATA=/data
shm_size: '2gb'
# --------------------------------------------------------------------------
# 4. Прогон конвейера по бэгу
# docker compose run --rm pipeline --bag /data/for_hackathon/doubleT_obstacle --verbose
# --------------------------------------------------------------------------
pipeline:
image: flyguard:latest
container_name: flyguard-pipeline
command: ["pipeline", "--all", "--memory", "artifacts/mushroom_body.npz"]
volumes:
- ./artifacts:/app/artifacts
- ./data:/data:ro
environment:
- PYTHONUNBUFFERED=1
- FLYGUARD_DATA=/data
shm_size: '2gb'
# --------------------------------------------------------------------------
# 5. Интерактивная оболочка
# docker compose run --rm shell
# --------------------------------------------------------------------------
shell:
image: flyguard:latest
container_name: flyguard-shell
command: ["bash"]
volumes:
- ./artifacts:/app/artifacts
- ./data:/data:ro
environment:
- PYTHONUNBUFFERED=1
- FLYGUARD_DATA=/data
stdin_open: true
tty: true
shm_size: '2gb'

50
docker-entrypoint.sh Executable file
View file

@ -0,0 +1,50 @@
#!/usr/bin/env bash
set -e
# Default to run_tests if no arguments provided
if [ $# -eq 0 ]; then
echo "==> FlyGuard container started without arguments. Running verification tests..."
exec python3 tests/run_tests.py
fi
# Subcommand shortcuts
case "$1" in
test|tests|run-tests)
shift
exec python3 tests/run_tests.py "$@"
;;
pytest)
shift
exec pytest tests "$@"
;;
pipeline|run-pipeline)
shift
exec python3 tools/run_pipeline.py "$@"
;;
benchmark|make-benchmark)
shift
exec python3 tools/make_benchmark.py "$@"
;;
evaluate)
shift
exec python3 tools/evaluate.py "$@"
;;
train-mbon)
shift
exec python3 tools/train_mbon.py "$@"
;;
train-track)
shift
exec python3 tools/train_track.py "$@"
;;
plot|plot-benchmark)
shift
exec python3 tools/plot_benchmark.py "$@"
;;
bash|sh)
exec /bin/bash "$@"
;;
*)
exec "$@"
;;
esac

81
docs/DOCKER.md Normal file
View file

@ -0,0 +1,81 @@
# Руководство по запуску FlyGuard в Docker
## 1. Быстрая сборка образа
Сборка легковесного образа на базе `python:3.11-slim-bookworm` (включает OpenMP/BLAS и зависимости):
```bash
docker build -t flyguard:latest .
```
---
## 2. Запуск тестов
Контейнер по умолчанию выполняет самодиагностику и тестовый набор:
```bash
# Прямой запуск через Docker
docker run --rm flyguard:latest
# Либо через docker compose
docker compose run --rm test
```
---
## 3. Запуск конвейера и бенчмарка с данными лидара
Датасеты монтируются в контейнер в каталог `/data`:
```bash
# Оценка ложных тревог по всем бэгам
docker run --rm \
-v /path/to/lidar/data:/data:ro \
-v $(pwd)/artifacts:/app/artifacts \
--shm-size=2g \
flyguard:latest evaluate --mbon-dir artifacts/mbon_folds
# Запуск полигона дальности с новыми аугментациями
docker run --rm \
-v /path/to/lidar/data:/data:ro \
-v $(pwd)/artifacts:/app/artifacts \
--shm-size=2g \
flyguard:latest benchmark --memory artifacts/mushroom_body.npz --augment
# Прогон по конкретному бэгу с выводом телеметрии в реальном времени
docker run --rm \
-v /path/to/lidar/data:/data:ro \
flyguard:latest pipeline --bag /data/for_hackathon/doubleT_obstacle --verbose
```
---
## 4. Интерактивная отладка
Войти внутрь контейнера с настроенным окружением:
```bash
docker compose run --rm shell
# или
docker run -it --rm \
-v /path/to/lidar/data:/data:ro \
-v $(pwd)/artifacts:/app/artifacts \
flyguard:latest bash
```
---
## 5. Доступные команды шорткатов entrypoint
Точка входа `docker-entrypoint.sh` поддерживает удобные псевдонимы:
* `test` — запускает автономный набор юнит-тестов (`tests/run_tests.py`)
* `pytest` — запускает `pytest tests`
* `pipeline` — вызывает `tools/run_pipeline.py`
* `benchmark` — вызывает `tools/make_benchmark.py`
* `evaluate` — вызывает `tools/evaluate.py`
* `train-mbon` — вызывает `tools/train_mbon.py`
* `train-track` — вызывает `tools/train_track.py`
* `plot` — вызывает `tools/plot_benchmark.py`
* `bash` / `sh` — открывает командную оболочку

View file

@ -2,6 +2,7 @@ numpy>=1.24
scipy>=1.10
# только для контрольного бустинга в tools/train_mbon.py --baseline
lightgbm>=4.0
matplotlib>=3.7
# только для обучения на GPU (tools/train_mbon.py --device cuda); ядру не нужен
# torch>=2.0
pytest>=7.0