main #2

Merged
Dan4ick merged 5 commits from Zhirik1337/Brainrot_Muxa:main into main 2026-09-22 19:31:28 +00:00
7 changed files with 443 additions and 202 deletions
Showing only changes of commit 45870eb0ec - Show all commits

View file

@ -1,50 +1,96 @@
# ============================================================================ # ============================================================================
# FlyGuard: ML-ядро обнаружения препятствий в тоннеле метро (Кейс 05, ЛЦТ-2026) # FlyGuard: Bionic Obstacle Detection Core (LCT-2026, Case 05)
# Hesai Pandar128 LiDAR (128 beams, 10 Hz / 100ms)
# Universal Production Image: NVIDIA CUDA 12.x / Ada Lovelace / Graceful CPU Fallback
# ============================================================================ # ============================================================================
FROM python:3.11-slim-bookworm AS base
# System configuration & environment # ----------------------------------------------------------------------------
# Stage 1: Optional lightweight CPU-only image (build with: --target cpu)
# ----------------------------------------------------------------------------
FROM python:3.11-slim-bookworm AS cpu
ENV DEBIAN_FRONTEND=noninteractive \ ENV DEBIAN_FRONTEND=noninteractive \
PYTHONUNBUFFERED=1 \ PYTHONUNBUFFERED=1 \
PYTHONDONTWRITEBYTECODE=1 \ PYTHONDONTWRITEBYTECODE=1 \
PYTHONPATH="/app:/app/tools" \ PYTHONPATH="/app:/app/tools" \
FLYGUARD_DATA="/data" FLYGUARD_DATA="/data" \
FLYGUARD_DEVICE="cpu"
# Install runtime system dependencies (libgomp1 is required by LightGBM/OpenMP)
RUN apt-get update && apt-get install -y --no-install-recommends \ RUN apt-get update && apt-get install -y --no-install-recommends \
libgomp1 \ libgomp1 \
ca-certificates \ ca-certificates \
&& rm -rf /var/lib/apt/lists/* && 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
COPY --chown=flyguard:flyguard requirements.txt /app/
RUN pip install --no-cache-dir --upgrade pip && \
pip install --no-cache-dir -r requirements.txt
COPY --chown=flyguard:flyguard . /app/
RUN chmod +x /app/docker-entrypoint.sh
USER flyguard
VOLUME ["/data", "/app/artifacts"]
ENTRYPOINT ["/app/docker-entrypoint.sh"]
CMD ["default"]
# ----------------------------------------------------------------------------
# Stage 2: Universal Production Image with NVIDIA GPU acceleration & CPU fallback
# (Default target when building with: docker build -t flyguard:latest .)
# ----------------------------------------------------------------------------
FROM nvidia/cuda:12.4.1-runtime-ubuntu22.04 AS production
ENV DEBIAN_FRONTEND=noninteractive \
PYTHONUNBUFFERED=1 \
PYTHONDONTWRITEBYTECODE=1 \
PYTHONPATH="/app:/app/tools" \
FLYGUARD_DATA="/data" \
FLYGUARD_DEVICE="auto" \
NVIDIA_VISIBLE_DEVICES=all \
NVIDIA_DRIVER_CAPABILITIES=compute,utility
# Install Python 3.11, pip, and system runtime libraries (OpenMP for LightGBM/Torch)
RUN apt-get update && apt-get install -y --no-install-recommends \
software-properties-common \
ca-certificates \
libgomp1 \
curl \
&& add-apt-repository -y ppa:deadsnakes/ppa \
&& apt-get update && apt-get install -y --no-install-recommends \
python3.11 \
python3.11-distutils \
&& curl -sS https://bootstrap.pypa.io/get-pip.py | python3.11 \
&& ln -sf /usr/bin/python3.11 /usr/bin/python3 \
&& ln -sf /usr/bin/python3.11 /usr/bin/python \
&& apt-get clean && rm -rf /var/lib/apt/lists/*
# Create non-root user for container security compliance
RUN useradd -m -u 1000 -s /bin/bash flyguard && \ RUN useradd -m -u 1000 -s /bin/bash flyguard && \
mkdir -p /app /data /app/artifacts && \ mkdir -p /app /data /app/artifacts && \
chown -R flyguard:flyguard /app /data chown -R flyguard:flyguard /app /data
WORKDIR /app WORKDIR /app
# Cache layer: copy only requirements first # Cache layer: install Python dependencies with PyTorch CUDA 12.1+ wheels
COPY --chown=flyguard:flyguard requirements.txt /app/ COPY --chown=flyguard:flyguard requirements-gpu.txt /app/
RUN pip install --no-cache-dir --upgrade pip setuptools wheel && \
pip install --no-cache-dir -r requirements-gpu.txt
# Install python dependencies # Copy source code and artifacts
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/ COPY --chown=flyguard:flyguard . /app/
# Make sure entrypoint script is executable
RUN chmod +x /app/docker-entrypoint.sh RUN chmod +x /app/docker-entrypoint.sh
# Switch to non-root user for security
USER flyguard USER flyguard
# Volume mount points
VOLUME ["/data", "/app/artifacts"] VOLUME ["/data", "/app/artifacts"]
# Container healthcheck # Container healthcheck: verifies Python runtime and graceful device detection
HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \ HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \
CMD python3 -c "import flyguard, numpy, scipy, lightgbm; print('healthy')" || exit 1 CMD python3 -c "import flyguard; from flyguard.device import get_device_info; print('healthy', get_device_info())" || exit 1
ENTRYPOINT ["/app/docker-entrypoint.sh"] ENTRYPOINT ["/app/docker-entrypoint.sh"]
CMD ["test"] CMD ["default"]

View file

@ -1,15 +1,16 @@
# ============================================================================ # ============================================================================
# FlyGuard GPU: NVIDIA RTX / CUDA 12 Production Image (Кейс 05, ЛЦТ-2026) # FlyGuard GPU: NVIDIA RTX / CUDA 12 Production Image (Кейс 05, ЛЦТ-2026)
# Архитектура: Ada Lovelace (RTX 4070 Ti Super 16GB) / Ampere / Turing # Архитектура: Ada Lovelace (RTX 4070 Ti Super 16GB) / Ampere / Turing
# Полная совместимость с Dockerfile (Stage: production)
# ============================================================================ # ============================================================================
FROM nvidia/cuda:12.4.1-runtime-ubuntu22.04 AS base FROM nvidia/cuda:12.4.1-runtime-ubuntu22.04 AS production
# System configuration & environment
ENV DEBIAN_FRONTEND=noninteractive \ ENV DEBIAN_FRONTEND=noninteractive \
PYTHONUNBUFFERED=1 \ PYTHONUNBUFFERED=1 \
PYTHONDONTWRITEBYTECODE=1 \ PYTHONDONTWRITEBYTECODE=1 \
PYTHONPATH="/app:/app/tools" \ PYTHONPATH="/app:/app/tools" \
FLYGUARD_DATA="/data" \ FLYGUARD_DATA="/data" \
FLYGUARD_DEVICE="auto" \
NVIDIA_VISIBLE_DEVICES=all \ NVIDIA_VISIBLE_DEVICES=all \
NVIDIA_DRIVER_CAPABILITIES=compute,utility NVIDIA_DRIVER_CAPABILITIES=compute,utility
@ -18,11 +19,11 @@ RUN apt-get update && apt-get install -y --no-install-recommends \
software-properties-common \ software-properties-common \
ca-certificates \ ca-certificates \
libgomp1 \ libgomp1 \
curl \
&& add-apt-repository -y ppa:deadsnakes/ppa \ && add-apt-repository -y ppa:deadsnakes/ppa \
&& apt-get update && apt-get install -y --no-install-recommends \ && apt-get update && apt-get install -y --no-install-recommends \
python3.11 \ python3.11 \
python3.11-distutils \ python3.11-distutils \
curl \
&& curl -sS https://bootstrap.pypa.io/get-pip.py | python3.11 \ && curl -sS https://bootstrap.pypa.io/get-pip.py | python3.11 \
&& ln -sf /usr/bin/python3.11 /usr/bin/python3 \ && ln -sf /usr/bin/python3.11 /usr/bin/python3 \
&& ln -sf /usr/bin/python3.11 /usr/bin/python \ && ln -sf /usr/bin/python3.11 /usr/bin/python \
@ -44,15 +45,13 @@ RUN pip install --no-cache-dir --upgrade pip setuptools wheel && \
# Copy application source code # Copy application source code
COPY --chown=flyguard:flyguard . /app/ COPY --chown=flyguard:flyguard . /app/
RUN chmod +x /app/docker-entrypoint.sh RUN chmod +x /app/docker-entrypoint.sh
USER flyguard USER flyguard
VOLUME ["/data", "/app/artifacts"] VOLUME ["/data", "/app/artifacts"]
HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \ HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \
CMD python3 -c "import flyguard, torch; print('healthy', torch.cuda.is_available())" || exit 1 CMD python3 -c "import flyguard; from flyguard.device import get_device_info; print('healthy', get_device_info())" || exit 1
ENTRYPOINT ["/app/docker-entrypoint.sh"] ENTRYPOINT ["/app/docker-entrypoint.sh"]
CMD ["test"] CMD ["default"]

View file

@ -99,20 +99,27 @@ artifacts/ обученные модели
## Как запустить ## Как запустить
### Вариант 1. Запуск через Docker / Docker Compose ### Вариант 1. Запуск через Docker / Docker Compose (NVIDIA GPU + CPU Fallback)
Единый универсальный production-контейнер с поддержкой CUDA 12 и автоматическим переключением на CPU при отсутствии GPU:
```bash ```bash
# Тесты на CPU # Сборка универсального образа с поддержкой NVIDIA GPU
docker compose run --rm test ./docker-run.sh build
# (или напрямую: docker build -t flyguard:latest .)
# Тесты с ускорением NVIDIA GPU # 1. Общий запуск конвейера по всем бэгам лидара (с GPU-ускорением или CPU fallback)
docker compose run --rm gpu-test ./docker-run.sh run
# (или: docker run --rm -it --gpus all -v /path/to/data:/data:ro flyguard)
# Обучение MBON на 50 000 клеток Кеньона на GPU # 2. Запуск через Docker Compose (главный сервис)
docker compose run --rm train-mbon-gpu docker compose up
# или отдельными сервисами:
# Прогон бенчмарка с аугментациями на GPU docker compose run --rm test # Прогон 40+ unit-тестов
docker compose run --rm gpu-benchmark docker compose run --rm info # Диагностика GPU и CUDA
docker compose run --rm train-mbon # Обучение MBON на 50k клеток Кеньона на GPU
docker compose run --rm benchmark # Прогон бенчмарка на GPU
docker compose run --rm evaluate # Оценка метрик детекции
``` ```
### Вариант 2. Локальный запуск (Python) ### Вариант 2. Локальный запуск (Python)

View file

@ -1,12 +1,38 @@
services: services:
# ========================================================================== # ============================================================================
# CPU СЕРВИСЫ (Стандартный запуск без GPU / Standalone) # FlyGuard: Универсальный производственный запуск (NVIDIA GPU / CUDA 12)
# ========================================================================== # Поддерживает Ada Lovelace (RTX 4070 Ti Super 16GB) / Ampere / CPU Fallback
test: # ============================================================================
# --- Главный сервис общего запуска конвейера по всем бэгам лидара ---
pipeline:
build: build:
context: . context: .
dockerfile: Dockerfile dockerfile: Dockerfile
image: flyguard:latest image: flyguard:latest
container_name: flyguard-pipeline
command: ["pipeline", "--all", "--verbose"]
volumes:
- ./artifacts:/app/artifacts
- ./data:/data:ro
environment:
- PYTHONUNBUFFERED=1
- FLYGUARD_DATA=/data
- FLYGUARD_DEVICE=auto
- NVIDIA_VISIBLE_DEVICES=all
- NVIDIA_DRIVER_CAPABILITIES=compute,utility
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: all
capabilities: [gpu]
shm_size: '8gb'
# --- Полный прогон тестового набора ядра и роутинга устройств ---
test:
image: flyguard:latest
container_name: flyguard-test container_name: flyguard-test
command: ["test"] command: ["test"]
volumes: volumes:
@ -15,75 +41,39 @@ services:
environment: environment:
- PYTHONUNBUFFERED=1 - PYTHONUNBUFFERED=1
- FLYGUARD_DATA=/data - FLYGUARD_DATA=/data
shm_size: '2gb' - FLYGUARD_DEVICE=auto
- NVIDIA_VISIBLE_DEVICES=all
- NVIDIA_DRIVER_CAPABILITIES=compute,utility
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: all
capabilities: [gpu]
shm_size: '8gb'
# --- Диагностика доступности GPU и характеристик оборудования ---
info:
image: flyguard:latest
container_name: flyguard-info
command: ["info"]
environment:
- NVIDIA_VISIBLE_DEVICES=all
- NVIDIA_DRIVER_CAPABILITIES=compute,utility
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: all
capabilities: [gpu]
# --- Оценка метрик детекции (Folds Cross-Validation / AUC) ---
evaluate: evaluate:
image: flyguard:latest image: flyguard:latest
container_name: flyguard-evaluate container_name: flyguard-evaluate
command: ["evaluate", "--mbon-dir", "artifacts/mbon_folds"] command: ["evaluate", "--mbon-dir", "artifacts/mbon_folds", "--device", "auto"]
volumes:
- ./artifacts:/app/artifacts
- ./data:/data:ro
environment:
- PYTHONUNBUFFERED=1
- FLYGUARD_DATA=/data
shm_size: '2gb'
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'
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'
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'
# ==========================================================================
# NVIDIA GPU СЕРВИСЫ (NVIDIA GeForce RTX 4070 Ti Super 16GB / CUDA 12.x)
# Использование: docker compose run --rm <имя-сервиса>
# ==========================================================================
gpu-test:
build:
context: .
dockerfile: Dockerfile.gpu
image: flyguard:gpu
container_name: flyguard-gpu-test
command: ["test"]
volumes: volumes:
- ./artifacts:/app/artifacts - ./artifacts:/app/artifacts
- ./data:/data:ro - ./data:/data:ro
@ -101,15 +91,16 @@ services:
capabilities: [gpu] capabilities: [gpu]
shm_size: '8gb' shm_size: '8gb'
gpu-benchmark: # --- Генерация синтетического бенчмарка с GPU DoG и MBON ---
image: flyguard:gpu benchmark:
container_name: flyguard-gpu-benchmark image: flyguard:latest
container_name: flyguard-benchmark
command: [ command: [
"benchmark", "benchmark",
"--memory", "artifacts/mushroom_body.npz", "--memory", "artifacts/mushroom_body.npz",
"--mbon-dir", "artifacts/mbon_folds", "--mbon-dir", "artifacts/mbon_folds",
"--augment", "--augment",
"--device", "cuda", "--device", "auto",
"--out", "artifacts/benchmark_gpu.json" "--out", "artifacts/benchmark_gpu.json"
] ]
volumes: volumes:
@ -129,33 +120,13 @@ services:
capabilities: [gpu] capabilities: [gpu]
shm_size: '8gb' shm_size: '8gb'
gpu-evaluate: # --- Обучение MBON Readout на 50 000 клеток Кеньона на GPU ---
image: flyguard:gpu train-mbon:
container_name: flyguard-gpu-evaluate image: flyguard:latest
command: ["evaluate", "--mbon-dir", "artifacts/mbon_folds", "--device", "cuda"] container_name: flyguard-train-mbon
volumes:
- ./artifacts:/app/artifacts
- ./data:/data:ro
environment:
- PYTHONUNBUFFERED=1
- FLYGUARD_DATA=/data
- NVIDIA_VISIBLE_DEVICES=all
- NVIDIA_DRIVER_CAPABILITIES=compute,utility
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: all
capabilities: [gpu]
shm_size: '8gb'
train-mbon-gpu:
image: flyguard:gpu
container_name: flyguard-train-mbon-gpu
command: [ command: [
"train-mbon", "train-mbon",
"--device", "cuda", "--device", "auto",
"--n-kc", "50000", "--n-kc", "50000",
"--active", "100", "--active", "100",
"--epochs", "100", "--epochs", "100",
@ -179,12 +150,13 @@ services:
capabilities: [gpu] capabilities: [gpu]
shm_size: '8gb' shm_size: '8gb'
train-track-gpu: # --- Обучение классификатора треков TrackReadout ---
image: flyguard:gpu train-track:
container_name: flyguard-train-track-gpu image: flyguard:latest
container_name: flyguard-train-track
command: [ command: [
"train-track", "train-track",
"--device", "cuda", "--device", "auto",
"--epochs", "300", "--epochs", "300",
"--baseline", "--baseline",
"--save-folds", "artifacts/track_folds", "--save-folds", "artifacts/track_folds",
@ -207,37 +179,10 @@ services:
capabilities: [gpu] capabilities: [gpu]
shm_size: '8gb' shm_size: '8gb'
gpu-pipeline: # --- Интерактивная Bash-сессия разработчика ---
image: flyguard:gpu shell:
container_name: flyguard-gpu-pipeline image: flyguard:latest
command: [ container_name: flyguard-shell
"pipeline",
"--all",
"--memory", "artifacts/mushroom_body.npz",
"--readout", "artifacts/mbon_readout.npz",
"--device", "cuda",
"--verbose"
]
volumes:
- ./artifacts:/app/artifacts
- ./data:/data:ro
environment:
- PYTHONUNBUFFERED=1
- FLYGUARD_DATA=/data
- NVIDIA_VISIBLE_DEVICES=all
- NVIDIA_DRIVER_CAPABILITIES=compute,utility
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: all
capabilities: [gpu]
shm_size: '8gb'
gpu-shell:
image: flyguard:gpu
container_name: flyguard-gpu-shell
command: ["bash"] command: ["bash"]
volumes: volumes:
- ./artifacts:/app/artifacts - ./artifacts:/app/artifacts
@ -257,3 +202,36 @@ services:
stdin_open: true stdin_open: true
tty: true tty: true
shm_size: '8gb' shm_size: '8gb'
# ============================================================================
# СЕРВИСЫ ДЛЯ ЧИСТОГО CPU (Stand-alone без NVIDIA GPU)
# ============================================================================
cpu-test:
build:
context: .
dockerfile: Dockerfile
target: cpu
image: flyguard:cpu
container_name: flyguard-cpu-test
command: ["test"]
volumes:
- ./artifacts:/app/artifacts
- ./data:/data:ro
environment:
- PYTHONUNBUFFERED=1
- FLYGUARD_DATA=/data
- FLYGUARD_DEVICE=cpu
shm_size: '2gb'
cpu-pipeline:
image: flyguard:cpu
container_name: flyguard-cpu-pipeline
command: ["pipeline", "--all"]
volumes:
- ./artifacts:/app/artifacts
- ./data:/data:ro
environment:
- PYTHONUNBUFFERED=1
- FLYGUARD_DATA=/data
- FLYGUARD_DEVICE=cpu
shm_size: '2gb'

View file

@ -1,47 +1,116 @@
#!/usr/bin/env bash #!/usr/bin/env bash
set -e set -e
# Default to run_tests if no arguments provided # ==============================================================================
if [ $# -eq 0 ]; then # FlyGuard: Bionic Obstacle Detection Core (LCT-2026, Case 05)
echo "==> FlyGuard container started without arguments. Running verification tests..." # Hesai Pandar128 LiDAR (128 beams, 10 Hz / 100ms)
# Universal Entrypoint: NVIDIA GPU Acceleration (CUDA 12.x) with CPU Fallback
# ==============================================================================
print_banner() {
echo "============================================================================"
echo " FlyGuard · Блиц-обнаружение препятствий в тоннеле метро (Кейс 05, ЛЦТ-2026)"
echo " Hesai Pandar128 (128 лучей, 10 Гц / 100 мс) · NVIDIA CUDA 12 / CPU Fallback"
echo "============================================================================"
}
print_device_info() {
python3 -c "
try:
import flyguard.device as dev
info = dev.get_device_info()
if info['cuda_available']:
print(f'==> [HARDWARE] NVIDIA GPU: {info[\"device_name\"]} (Compute {info[\"compute_capability\"]}, {info[\"total_memory_gb\"]} GB VRAM)')
print(f'==> [ACCELERATION] CUDA 12: АКТИВНО (PyTorch {info[\"torch_version\"]})')
else:
print('==> [HARDWARE] CPU Mode: CUDA недоступна или не передана в контейнер.')
print('==> [FALLBACK] Активирован автоматический Graceful Fallback на CPU.')
except Exception as e:
print(f'==> Проверка окружения: {e}')
"
}
CMD="${1:-default}"
case "$CMD" in
default|run)
print_banner
print_device_info
DATA_DIR="${FLYGUARD_DATA:-/data}"
FOUND_BAG=$(find "$DATA_DIR" -name '*.db3' 2>/dev/null | head -n 1 || true)
if [ -d "$DATA_DIR" ] && [ -n "$FOUND_BAG" ]; then
echo "==> Обнаружены бэги лидара в $DATA_DIR. Запуск конвейера FlyGuard по всем записям..."
exec python3 tools/run_pipeline.py --all \
--memory artifacts/mushroom_body.npz \
--readout artifacts/mbon_readout.npz \
--device auto \
--verbose
else
echo "==> В $DATA_DIR не найдены файлы .db3 (датасет не смонтирован через -v /путь/к/data:/data)."
echo "==> Выполняется системный прогон верификационных тестов и роутинга..."
exec python3 tests/run_tests.py exec python3 tests/run_tests.py
fi fi
;;
# Subcommand shortcuts pipeline|run-pipeline)
case "$1" in shift
print_banner
print_device_info
exec python3 tools/run_pipeline.py \
--memory artifacts/mushroom_body.npz \
--readout artifacts/mbon_readout.npz \
--device auto "$@"
;;
benchmark|make-benchmark)
shift
print_banner
print_device_info
exec python3 tools/make_benchmark.py \
--memory artifacts/mushroom_body.npz \
--mbon-dir artifacts/mbon_folds \
--device auto "$@"
;;
evaluate)
shift
print_banner
print_device_info
exec python3 tools/evaluate.py \
--mbon-dir artifacts/mbon_folds \
--device auto "$@"
;;
train-mbon)
shift
print_banner
print_device_info
exec python3 tools/train_mbon.py \
--device auto "$@"
;;
train-track)
shift
print_banner
print_device_info
exec python3 tools/train_track.py \
--device auto "$@"
;;
test|tests|run-tests) test|tests|run-tests)
shift shift
print_banner
print_device_info
exec python3 tests/run_tests.py "$@" exec python3 tests/run_tests.py "$@"
;; ;;
pytest) pytest)
shift shift
exec pytest tests "$@" exec pytest tests "$@"
;; ;;
pipeline|run-pipeline) info|device|gpu|gpu-info)
shift print_banner
exec python3 tools/run_pipeline.py "$@" python3 -c "
;; import json
benchmark|make-benchmark) import flyguard.device as dev
shift print(json.dumps(dev.get_device_info(), indent=2, ensure_ascii=False))
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) bash|sh)
shift
exec /bin/bash "$@" exec /bin/bash "$@"
;; ;;
*) *)

134
docker-run.sh Executable file
View file

@ -0,0 +1,134 @@
#!/usr/bin/env bash
# ==============================================================================
# FlyGuard: Удобный скрипт сборки и запуска Docker-контейнера
# Автоматически определяет наличие NVIDIA GPU и передает флаги --gpus all
# ==============================================================================
set -e
DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
IMAGE_NAME="flyguard:latest"
DATA_DIR="${FLYGUARD_DATA:-$DIR/data}"
ARTIFACTS_DIR="$DIR/artifacts"
mkdir -p "$DATA_DIR" "$ARTIFACTS_DIR"
# Определение наличия драйвера NVIDIA
GPU_FLAG=""
if command -v nvidia-smi &>/dev/null; then
GPU_FLAG="--gpus all"
fi
usage() {
echo "Использование: $0 [команда]"
echo ""
echo "Команды:"
echo " build Собрать универсальный образ с поддержкой NVIDIA GPU ($IMAGE_NAME)"
echo " build-cpu Собрать облегченный CPU-образ (flyguard:cpu)"
echo " run Общий запуск конвейера (по умолчанию обработка всех бэгов)"
echo " pipeline Запуск конвейера с дополнительными аргументами"
echo " test Запуск всех 40+ тестов верификации"
echo " benchmark Генерация бенчмарка с ускорением на GPU"
echo " evaluate Оценка качества моделей и кросс-валидация"
echo " train-mbon Обучение клеток Кеньона (50 000 KC) на GPU"
echo " train-track Обучение классификатора треков"
echo " info Вывод телеметрии и статуса GPU из контейнера"
echo " shell Интерактивная командная строка (bash) внутри контейнера"
echo ""
echo "Примеры:"
echo " $0 build"
echo " $0 run"
echo " $0 pipeline --all --verbose"
echo " $0 train-mbon --device cuda --n-kc 50000"
}
CMD="${1:-run}"
case "$CMD" in
build)
echo "==> Сборка универсального образа FlyGuard ($IMAGE_NAME)..."
docker build -t "$IMAGE_NAME" -f "$DIR/Dockerfile" "$DIR"
;;
build-cpu)
echo "==> Сборка облегченного CPU-образа FlyGuard (flyguard:cpu)..."
docker build --target cpu -t flyguard:cpu -f "$DIR/Dockerfile" "$DIR"
;;
run|default)
shift 2>/dev/null || true
echo "==> Запуск контейнера FlyGuard (GPU: ${GPU_FLAG:-CPU Fallback})..."
docker run --rm -it $GPU_FLAG \
-v "$DATA_DIR":/data:ro \
-v "$ARTIFACTS_DIR":/app/artifacts \
--shm-size=8g \
"$IMAGE_NAME" "$@"
;;
pipeline)
shift
docker run --rm -it $GPU_FLAG \
-v "$DATA_DIR":/data:ro \
-v "$ARTIFACTS_DIR":/app/artifacts \
--shm-size=8g \
"$IMAGE_NAME" pipeline "$@"
;;
test|tests)
shift
docker run --rm -it $GPU_FLAG \
-v "$DATA_DIR":/data:ro \
-v "$ARTIFACTS_DIR":/app/artifacts \
--shm-size=8g \
"$IMAGE_NAME" test "$@"
;;
benchmark)
shift
docker run --rm -it $GPU_FLAG \
-v "$DATA_DIR":/data:ro \
-v "$ARTIFACTS_DIR":/app/artifacts \
--shm-size=8g \
"$IMAGE_NAME" benchmark "$@"
;;
evaluate)
shift
docker run --rm -it $GPU_FLAG \
-v "$DATA_DIR":/data:ro \
-v "$ARTIFACTS_DIR":/app/artifacts \
--shm-size=8g \
"$IMAGE_NAME" evaluate "$@"
;;
train-mbon)
shift
docker run --rm -it $GPU_FLAG \
-v "$DATA_DIR":/data \
-v "$ARTIFACTS_DIR":/app/artifacts \
--shm-size=8g \
"$IMAGE_NAME" train-mbon "$@"
;;
train-track)
shift
docker run --rm -it $GPU_FLAG \
-v "$DATA_DIR":/data \
-v "$ARTIFACTS_DIR":/app/artifacts \
--shm-size=8g \
"$IMAGE_NAME" train-track "$@"
;;
info|gpu|device)
docker run --rm $GPU_FLAG "$IMAGE_NAME" info
;;
shell|bash)
shift
docker run --rm -it $GPU_FLAG \
-v "$DATA_DIR":/data \
-v "$ARTIFACTS_DIR":/app/artifacts \
--shm-size=8g \
"$IMAGE_NAME" bash "$@"
;;
help|--help|-h)
usage
exit 0
;;
*)
docker run --rm -it $GPU_FLAG \
-v "$DATA_DIR":/data:ro \
-v "$ARTIFACTS_DIR":/app/artifacts \
--shm-size=8g \
"$IMAGE_NAME" "$@"
;;
esac

View file

@ -80,8 +80,16 @@ def main() -> None:
readout = MbonReadout.load(args.readout) if args.readout else None readout = MbonReadout.load(args.readout) if args.readout else None
track_readout = TrackReadout.load(args.track_readout) if args.track_readout else None track_readout = TrackReadout.load(args.track_readout) if args.track_readout else None
if not args.all and not args.bag:
args.all = True
params = Params(fov_deg=args.fov, device=args.device) params = Params(fov_deg=args.fov, device=args.device)
bags = find_bags(B.DATA / "for_hackathon") if args.all else [args.bag] bag_root = (B.DATA / "for_hackathon") if (B.DATA / "for_hackathon").exists() else B.DATA
bags = find_bags(bag_root) if args.all else ([args.bag] if args.bag else [])
if not bags:
print(f"Внимание: бэги не найдены в {bag_root}. Убедитесь, что каталог смонтирован в FLYGUARD_DATA.")
return
for b in bags: for b in bags:
run(b, params, memory, readout=readout, track_readout=track_readout, run(b, params, memory, readout=readout, track_readout=track_readout,
limit=args.limit, verbose=args.verbose) limit=args.limit, verbose=args.verbose)