Guide de Configuration GPU
Instructions complètes pour configurer l'accélération GPU afin d'améliorer considérablement les performances de traitement LiDAR.
Configuration Système Requise
Configuration Matérielle
Configuration Minimale :
- GPU NVIDIA avec CUDA Compute Capability 3.5+
- 4GB VRAM minimum (8GB+ recommandé)
- Slot PCIe 3.0 x16
Configuration Recommandée :
- NVIDIA RTX 3060/4060 ou supérieur
- 12GB+ VRAM pour les grands jeux de données
- PCIe 4.0 x16 pour une bande passante maximale
GPU Supportés :
# Vérifier la compatibilité du GPU
nvidia-smi
Configuration Logicielle
- CUDA Toolkit : 11.8+ ou 12.x
- Pilote NVIDIA : 520.61.05+ (Linux) / 527.41+ (Windows)
- Python : 3.8-3.12
- PyTorch : 2.0+ avec support CUDA
Étapes d'Installation
Étape 1 : Installer les Pilotes NVIDIA
Linux (Ubuntu/Debian)
# Ajouter le dépôt NVIDIA
sudo apt update
sudo apt install software-properties-common
sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt update
# Installer le dernier pilote
sudo apt install nvidia-driver-535
sudo reboot
# Vérifier l'installation
nvidia-smi
Windows
- Télécharger les derniers pilotes depuis le site NVIDIA
- Exécuter l'installateur avec les paramètres par défaut
- Redémarrer le système
- Vérifier avec
nvidia-smi
dans l'Invite de commandes
Étape 2 : Installer CUDA Toolkit
Option A : Installation Conda (Recommandée)
# Créer un nouvel environnement avec CUDA
conda create -n ign-gpu python=3.11
conda activate ign-gpu
# Installer CUDA toolkit
conda install pytorch pytorch-cuda=12.1 -c pytorch -c nvidia
# Vérifier l'installation CUDA
python -c "import torch; print(f'CUDA Disponible: {torch.cuda.is_available()}')"
Option B : Installation CUDA Native
# Télécharger CUDA 12.1 depuis NVIDIA
wget https://developer.download.nvidia.com/compute/cuda/12.1.0/local_installers/cuda_12.1.0_530.30.02_linux.run
sudo sh cuda_12.1.0_530.30.02_linux.run
# Ajouter au PATH
echo 'export PATH=/usr/local/cuda-12.1/bin${PATH:+:${PATH}}' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH=/usr/local/cuda-12.1/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}' >> ~/.bashrc
source ~/.bashrc
# Vérifier l'installation
nvcc --version
Étape 3 : Installer IGN LiDAR HD avec Support GPU
# Installer avec les dépendances GPU
pip install ign-lidar-hd[gpu]
# Ou installer la version de développement
pip install -e .[gpu]
# Vérifier le support GPU
ign-lidar-hd system-info --gpu
Configuration
Variables d'Environnement
# Définir l'allocation de mémoire GPU
export CUDA_VISIBLE_DEVICES=0 # Utiliser le premier GPU
export PYTORCH_CUDA_ALLOC_CONF=max_split_size_mb:512
# Optionnel : Limiter l'utilisation de la mémoire GPU
export IGN_GPU_MEMORY_FRACTION=0.8 # Utiliser 80% de la mémoire GPU
Fichier de Configuration GPU
Créer ~/.ign-lidar/gpu-config.yaml
:
gpu:
enabled: true
device: "cuda:0" # Périphérique GPU à utiliser
memory_fraction: 0.8 # Fraction de mémoire GPU à utiliser
batch_size: 10000 # Points par lot GPU
# Réglage des performances
pin_memory: true
non_blocking: true
compile_models: true # Compilation PyTorch 2.0+
# Options de repli
fallback_to_cpu: true
auto_mixed_precision: true
Configuration Multi-GPU
gpu:
enabled: true
multi_gpu: true
devices: ["cuda:0", "cuda:1"] # Plusieurs GPU
data_parallel: true
# Équilibrage de charge
gpu_weights: [1.0, 0.8] # Poids de performance relatifs
Vérification et Tests
Test GPU de Base
from ign_lidar import Processor
import torch
# Vérifier la disponibilité du GPU
print(f"CUDA Disponible: {torch.cuda.is_available()}")
print(f"Nombre de GPU: {torch.cuda.device_count()}")
# Tester le traitement GPU
processor = Processor(use_gpu=True)
print(f"GPU Activé: {processor.gpu_enabled}")
print(f"Périphérique GPU: {processor.device}")
Test de Performance
# Exécuter un benchmark GPU
ign-lidar-hd benchmark --gpu --dataset-size large
# Comparer les performances CPU vs GPU
ign-lidar-hd benchmark --compare-devices
Test de Mémoire
from ign_lidar.gpu import GPUMemoryManager
# Vérifier la mémoire GPU
memory_manager = GPUMemoryManager()
memory_info = memory_manager.get_memory_info()
print(f"Mémoire GPU Totale: {memory_info['total']:.2f} GB")
print(f"Mémoire Disponible: {memory_info['available']:.2f} GB")
print(f"Taille de Lot Recommandée: {memory_info['recommended_batch_size']}")
Optimisation des Performances
Gestion de la Mémoire
from ign_lidar import Config
# Optimiser pour la mémoire GPU disponible
config = Config(
gpu_enabled=True,
gpu_memory_fraction=0.8,
# Configuration du traitement par lots
gpu_batch_size="auto", # Détection automatique de la taille optimale
pin_memory=True,
# Nettoyage de la mémoire
clear_cache_every=100, # Vider le cache GPU tous les N lots
)
Optimisation du Traitement
# Activer la précision mixte pour de meilleures performances
config = Config(
gpu_enabled=True,
mixed_precision=True, # Utiliser FP16 quand possible
compile_models=True, # Compilation PyTorch 2.0
# Optimiser le chargement des données
num_workers=4,
prefetch_factor=2,
)
Dépannage
Problèmes Courants
CUDA Non Disponible
# Vérifier l'installation CUDA
python -c "import torch; print(torch.cuda.is_available())"
# Si False, réinstaller PyTorch avec CUDA
pip uninstall torch torchvision torchaudio
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121
Erreurs de Mémoire Insuffisante
# Réduire la taille du lot
processor = Processor(
use_gpu=True,
gpu_batch_size=5000, # Lot plus petit
gpu_memory_fraction=0.6 # Utiliser moins de mémoire GPU
)
# Ou utiliser le gradient checkpointing
processor = Processor(
use_gpu=True,
gradient_checkpointing=True
)
Problèmes de Compatibilité des Pilotes
# Vérifier la version du pilote
nvidia-smi
# Vérifier la compatibilité CUDA
nvidia-smi --query-gpu=compute_cap --format=csv
# Mettre à jour les pilotes si nécessaire
sudo apt update && sudo apt upgrade nvidia-driver-535
Problèmes de Performance
Traitement GPU Lent
# Activer les optimisations
import torch
torch.backends.cudnn.benchmark = True # Optimiser pour des tailles d'entrée cohérentes
torch.backends.cuda.matmul.allow_tf32 = True # Utiliser TF32 sur les GPU Ampere
# Utiliser des modèles compilés (PyTorch 2.0+)
processor = Processor(
use_gpu=True,
compile_models=True
)
Goulots d'Étranglement des Transferts CPU-GPU
# Optimiser le transfert de données
config = Config(
gpu_enabled=True,
pin_memory=True, # Transferts CPU-GPU plus rapides
non_blocking=True, # Transferts asynchrones
prefetch_to_gpu=True # Pré-charger les données sur le GPU
)
Surveillance et Profilage
Surveillance de l'Utilisation GPU
# Surveiller l'utilisation GPU en temps réel
watch -n 1 nvidia-smi
# Enregistrer l'utilisation GPU dans un fichier
nvidia-smi --query-gpu=timestamp,utilization.gpu,memory.used,memory.total --format=csv -l 1 > gpu_usage.log
Profilage des Performances
from ign_lidar.profiling import GPUProfiler
# Profiler les performances GPU
with GPUProfiler() as profiler:
result = processor.process_tile("input.las")
# Afficher les résultats du profilage
profiler.print_summary()
profiler.save_report("gpu_profile.html")
Analyse des Goulots d'Étranglement
# Identifier les goulots d'étranglement
from ign_lidar.diagnostics import analyze_gpu_performance
analysis = analyze_gpu_performance(
las_file="sample.las",
config=config
)
print(f"Utilisation GPU: {analysis['gpu_utilization']:.1f}%")
print(f"Efficacité Mémoire: {analysis['memory_efficiency']:.1f}%")
print(f"Goulot d'étranglement: {analysis['primary_bottleneck']}")
Configuration Multi-GPU
Traitement Parallèle des Données
from ign_lidar import MultiGPUProcessor
# Configurer plusieurs GPU
processor = MultiGPUProcessor(
devices=["cuda:0", "cuda:1"],
strategy="data_parallel"
)
# Traiter avec plusieurs GPU
results = processor.process_batch(tile_list)
Équilibrage de Charge
# Configuration multi-GPU
multi_gpu:
enabled: true
devices: ["cuda:0", "cuda:1", "cuda:2"]
# Équilibrage de charge basé sur les performances GPU
device_weights:
"cuda:0": 1.0 # RTX 4090
"cuda:1": 0.8 # RTX 3080
"cuda:2": 0.6 # RTX 2080
# Paramètres de synchronisation
sync_batch_norm: true
find_unused_parameters: false
Configuration GPU Cloud
Google Colab
# Vérifier la disponibilité du GPU dans Colab
import torch
print(f"GPU Disponible: {torch.cuda.is_available()}")
print(f"Nom du GPU: {torch.cuda.get_device_name(0)}")
# Installer IGN LiDAR HD
!pip install ign-lidar-hd[gpu]
# Monter Google Drive pour l'accès aux données
from google.colab import drive
drive.mount('/content/drive')
Instances GPU AWS EC2
# Lancer une instance GPU (p3.2xlarge recommandé)
aws ec2 run-instances \
--image-id ami-0c02fb55956c7d316 \
--instance-type p3.2xlarge \
--key-name your-key \
--security-group-ids sg-your-security-group
# Installer CUDA et IGN LiDAR HD
sudo apt update
sudo apt install nvidia-driver-535
pip install ign-lidar-hd[gpu]
Bonnes Pratiques
Directives de Développement
-
Toujours Vérifier la Disponibilité du GPU
if not torch.cuda.is_available():
print("GPU non disponible, repli sur CPU")
use_gpu = False -
Surveiller l'Utilisation de la Mémoire
# Vider le cache périodiquement
if batch_count % 100 == 0:
torch.cuda.empty_cache() -
Utiliser la Précision Mixte
# Activer la précision mixte automatique
from torch.cuda.amp import autocast
with autocast():
result = model(input_data)
Déploiement en Production
-
Allocation des Ressources
- Réserver de la mémoire GPU pour d'autres processus
- Définir des tailles de lot appropriées
- Surveiller la température et la consommation d'énergie
-
Gestion des Erreurs
try:
result = gpu_processor.process(data)
except torch.cuda.OutOfMemoryError:
torch.cuda.empty_cache()
result = cpu_processor.process(data) -
Surveillance
- Enregistrer l'utilisation du GPU
- Suivre le débit de traitement
- Surveiller la limitation thermique