Files
lidar_rendu/docker-compose.worker.yml
Antoine fb892ea9f2 Translate the whole project to English and fix outdated comments and help
Comments, docstrings, logs, CLI help, map UI, legends, PDF sheet, scripts,
compose files and AGENTS.md are now English. Data keys stay unchanged
(relief_oriente, densite_sol, visualisations/, API JSON keys, link params).
Wrong comments and help defaults found along the way are corrected.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-27 23:16:45 +02:00

74 lines
2.9 KiB
YAML

# Processing machine - tile generator (see docs/DEPLOY_WEBAPP.md).
#
# Runs on the powerful machine (GPU + PDAL) and exposes the API that remote
# maps (Raspberry Pi, docker-compose.maps.yml + LIDAR_GENERATION_URL) call:
# drawing an area -> IGN download + GPU processing here; source tiles and
# XYZ tiles served to the lightweight machines (/api/tiles + static files,
# /tiles/XYZ).
#
# docker compose -f docker-compose.worker.yml up -d --build
# docker compose -f docker-compose.worker.yml logs -f worker
# docker compose -f docker-compose.worker.yml down
#
# One-off batch processing of the tiles present in input/:
# docker compose -f docker-compose.worker.yml run --rm --build process
# (any argument replaces the default command: repeat
# python3 -m lidar_pipeline /data/input -o /data/output -r 0.2 -g all ... in full)
services:
# Tile generator: XYZ map + generation API (full image, GPU)
worker:
build: .
image: lidar-lidar
container_name: lidar-worker
init: true
user: "1000:1000"
gpus: all # remove this line on a machine without a GPU
ports:
- "8973:8973" # reachable by the remote maps (LIDAR_GENERATION_URL
# and LIDAR_SOURCE_URL point here)
volumes:
# input/ writable: the API downloads missing IGN tiles into it
- ./input:/data/input
- ./output:/data/output
environment:
- TZ=Europe/Paris
- LIDAR_INPUT_DIR=/data/input
- LIDAR_OUTPUT_DIR=/data/output
- LIDAR_PORT=8973
# Generations started from a remote map use the GPU
- LIDAR_GPU=1
- LIDAR_WORKERS=auto
# Workers per GPU capped by the free VRAM when the run starts
# ((free - reserve) / per-worker peak); the excess runs on the CPU.
# Peak estimated at 2048 MiB: adjust after measuring (nvidia-smi during a run).
# - LIDAR_GPU_WORKER_MIB=2048
# - LIDAR_GPU_RESERVE_MIB=512
# One thread per worker: single-threaded BLAS/OpenMP, otherwise 12 workers x N
# threads swamp the 14 cores (load 68+ observed during runs)
- OMP_NUM_THREADS=1
- OPENBLAS_NUM_THREADS=1
- MKL_NUM_THREADS=1
- NUMEXPR_NUM_THREADS=1
# Protect the API if the network is not trusted: same value as
# LIDAR_REMOTE_TOKEN on every remote map (otherwise leave commented out)
# - LIDAR_API_TOKEN=change-me
command: python3 -m uvicorn lidar_pipeline.mapserve:app --host 0.0.0.0 --port 8973
restart: unless-stopped
# One-off processing of the input/ tiles (one pass, then exit)
process:
build: .
image: lidar-lidar
container_name: lidar-process
init: true
user: "1000:1000"
gpus: all # remove this line on a machine without a GPU
volumes:
- ./input:/data/input
- ./output:/data/output
environment:
- TZ=Europe/Paris
command: ["python3", "-m", "lidar_pipeline", "/data/input", "-o", "/data/output", "-r", "0.2", "-g", "all"]
profiles:
- process