# Machine de traitement — générateur de tuiles (cf. docs/DEPLOY_WEBAPP.md). # # Tourne sur la machine puissante (GPU + PDAL) et expose l'API que les # cartes distantes (Raspberry Pi, docker-compose.maps.yml + LIDAR_GENERATION_URL) # appellent : dessin d'une zone → téléchargement IGN + traitement GPU ici, # dalles et tuiles servies aux machines légères (/api/tiles + statiques, # /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 # # Traitement batch ponctuel des dalles présentes dans input/ : # docker compose -f docker-compose.worker.yml run --rm --build process [-r 0.5,0.2 | --force] services: # Générateur de tuiles : carte XYZ + API de génération (image complète, GPU) worker: build: . image: lidar-lidar container_name: lidar-worker init: true user: "1000:1000" gpus: all # retirer cette ligne sur une machine sans GPU ports: - "8973:8973" # joignable par les cartes distantes (LIDAR_GENERATION_URL # et LIDAR_SOURCE_URL pointent ici) volumes: # input/ en écriture : l'API y télécharge les dalles IGN manquantes - ./input:/data/input - ./output:/data/output environment: - TZ=Europe/Paris - LIDAR_INPUT_DIR=/data/input - LIDAR_OUTPUT_DIR=/data/output - LIDAR_PORT=8973 # Les générations lancées depuis une carte distante utilisent le GPU - LIDAR_GPU=1 - LIDAR_WORKERS=auto # Une ligne par worker : BLAS/OpenMP mono-thread, sinon 12 workers × N # threads écrasent les 14 cœurs (load 68+ observé pendant les runs) - OMP_NUM_THREADS=1 - OPENBLAS_NUM_THREADS=1 - MKL_NUM_THREADS=1 - NUMEXPR_NUM_THREADS=1 # Protéger l'API si le réseau n'est pas de confiance : même valeur que # LIDAR_REMOTE_TOKEN sur chaque carte distante (sinon, laisser commenté) # - LIDAR_API_TOKEN=change-moi command: python3 -m uvicorn lidar_pipeline.mapserve:app --host 0.0.0.0 --port 8973 restart: unless-stopped # Traitement ponctuel des dalles input/ (une passe puis arrêt) process: build: . image: lidar-lidar container_name: lidar-process init: true user: "1000:1000" gpus: all # retirer cette ligne sur une machine sans 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