Performance optimizations and rendering improvements
GPU multi-processing fix: - gpu.py: revert to CUDA_VISIBLE_DEVICES approach with lazy CuPy init (Device.use() caused CUDA_ERROR_NO_BINARY_FOR_GPU on GPU 1) - CuPy is imported lazily on first to_gpu() call, allowing CUDA_VISIBLE_DEVICES to be set before CUDA context creation - nvidia-smi used for GPU count detection (no CUDA import needed) - pipeline.py: add tip message suggesting -w N when multiple GPUs detected Rendering improvements: - Title: split into bold title (14pt) + italic description (10pt) - North arrow: moved inside data area (top-right) with transparent background — no longer overlaps title - Colorbar: full height (compass gap removed), ScalarFormatter with useOffset=False to prevent scientific notation on small values Performance: - rendering.py: save matplotlib figure to BytesIO instead of temp PNG file — eliminates disk I/O between matplotlib and PIL - visualizations.py: cap max_dist at 300 for ray-tracing (SVF, openness, aniso_open) — avoids 500+ iterations at 0.2m resolution - pipeline.py: deduplicate n_gpus calculation in parallel path
This commit is contained in:
@ -447,17 +447,18 @@ class LidarArchaeoPipeline:
|
||||
t_pipeline_start = time.time()
|
||||
|
||||
if self.workers > 1 and len(files) > 1:
|
||||
n_gpus = num_gpus()
|
||||
n_gpus = num_gpus() or 1
|
||||
if n_gpus > 1:
|
||||
logger.info(f"Traitement parallèle avec {self.workers} workers sur {n_gpus} GPUs...")
|
||||
else:
|
||||
logger.info(f"Traitement parallèle avec {self.workers} workers...")
|
||||
if n_gpus > 1 and self.workers == 1:
|
||||
logger.info(f"Conseil: utilisez -w {n_gpus} pour exploiter tous les GPUs")
|
||||
logger.info(f"Fichiers: {len(files)}")
|
||||
|
||||
with ProcessPoolExecutor(max_workers=self.workers) as executor:
|
||||
# Pass resolutions as comma-separated string for multiprocessing serialization
|
||||
resolutions_str = ','.join(str(r) for r in self.resolutions)
|
||||
n_gpus = num_gpus() or 1
|
||||
future_to_file = {
|
||||
executor.submit(_process_file_standalone, str(laz_file), str(self.input_dir), str(self.output_dir), resolutions_str, self.force, self.ground_method, self.force_classify, self.keep_tif, self.quality, self.only_viz, self.skip_viz, self.output_format, gpu_id % n_gpus): laz_file
|
||||
for gpu_id, laz_file in enumerate(files)
|
||||
|
||||
Reference in New Issue
Block a user