4. Fonctionnalités Avancées
EvoX offre de nombreuses fonctionnalités avancées pour répondre à des besoins plus complexes. Après vous être familiarisé avec les bases, ce chapitre présente comment personnaliser la configuration du framework, gérer les modules de plugins optionnels et optimiser les performances — vous permettant d’étendre et d’ajuster EvoX lorsque cela est nécessaire.
Configuration Personnalisée
Les paramètres par défaut d’EvoX conviennent à la plupart des situations, mais vous pourriez parfois vouloir personnaliser le comportement ou les paramètres du framework. Par exemple :
-
Réglage des Paramètres de l’Algorithme : Au-delà de la taille de base de la population et du nombre d’itérations, de nombreux algorithmes exposent des paramètres avancés. Par exemple, CMA-ES permet la configuration de la matrice de covariance initiale, et NSGA-II expose les paramètres de distance de foule (crowding distance). Vous pouvez passer des paramètres au constructeur de l’algorithme, par ex.
GA(crossover_prob=0.9, mutation_prob=0.1)personnalise les probabilités de croisement et de mutation dans l’Algorithme Génétique. Le réglage de ces éléments peut affiner les performances. Référez-vous à la documentation d’EvoX pour l’API de chaque algorithme, où les paramètres disponibles et les valeurs par défaut sont listés. -
Remplacement des Composants Opérateurs : Vous pouvez remplacer les opérateurs évolutifs internes (par ex. stratégies de sélection ou de mutation). Certaines classes d’algorithmes supportent le passage d’objets opérateurs personnalisés. Par exemple, l’Évolution Différentielle (DE) peut supporter des opérateurs de mutation personnalisés, vous permettant de fournir une fonction personnalisée ou une classe
Operator. La conception modulaire d’EvoX supporte ce remplacement de type « plugin ». Cela nécessite généralement de comprendre le fonctionnement interne de l’algorithme et n’est habituellement pas nécessaire pour les cas d’utilisation standard. -
Paramètres Multi-Objectifs : Pour l’optimisation multi-objectifs, vous pourriez avoir besoin de configurer des préférences ou des poids — par exemple, définir des vecteurs de poids pour les méthodes de somme pondérée ou ajuster les points de référence pendant l’évolution. Ces configurations sont généralement exposées via des paramètres dans la classe du problème ou de l’algorithme. Par exemple,
problem = DTLZ2(d=12, m=3)définit un problème à 12 dimensions et 3 objectifs. Certains algorithmes permettent de passer des vecteurs de référence personnalisés. Lire la documentation de l’algorithme vous aide à tirer pleinement parti de tels paramètres. -
Journalisation et Sortie : Le
EvalMonitorpar défaut journalise déjà les métriques d’optimisation clés. Si vous avez besoin d’infos supplémentaires (par ex. diversité de la population ou fitness moyen par génération), vous pouvez personnaliser le moniteur ou journaliser manuellement dans votre boucle. Pour les tâches de longue durée, vous voudrez peut-être journaliser dans un fichier. Cela peut être fait en utilisant la bibliothèqueloggingde Python ou de simples E/S de fichiers pour ajouter les résultats pour une analyse ultérieure.
En résumé, la configuration personnalisée signifie modifier le comportement par défaut d’EvoX pour une tâche spécifique. Cela implique généralement une utilisation plus approfondie de l’API d’EvoX. Nous en couvrirons davantage dans la section développement et extension. Pour les débutants, rappelez-vous simplement : EvoX offre des interfaces flexibles qui permettent aux utilisateurs expérimentés d’ajuster presque chaque détail — mais vous pouvez aussi vous en tenir aux valeurs par défaut et obtenir des résultats rapidement.
Gestion des Plugins
Les « Plugins » font ici référence aux composants optionnels ou aux modules d’extension dans EvoX — tels que les outils de visualisation, les wrappers d’environnement d’apprentissage par renforcement (reinforcement learning), et les projets frères dans l’écosystème EvoX. La gestion des plugins dans EvoX implique principalement l’installation et l’utilisation de modules optionnels. Voici quelques extensions clés et comment les gérer :
-
Plugin de Visualisation : EvoX inclut le module
evox.vis_tools, qui contient un sous-moduleplotpour les graphiques et supporte le format de journal.exvpour les flux de données en temps réel. Pour utiliser la visualisation, installez EvoX avec l’extravis:pip install evox[vis]. (Si non installé initialement, vous pouvez l’installer plus tard ou simplement exécuterpip install plotlypour satisfaire les dépendances.) Lors de l’utilisation d’outils visuels, vous appelez généralement les fonctions de tracé après que le moniteur a journalisé les données — par exemple,EvalMonitor.plot()utilisevis_tools.plot. S’assurer que ce plugin est installé évite les erreurs dues aux bibliothèques manquantes commematplotlib. -
Plugin de Neuroévolution : EvoX supporte les environnements d’apprentissage par renforcement (comme le moteur physique Brax) et l’optimisation individuelle neuronale (neuroévolution). Ces fonctionnalités sont regroupées dans l’extension
neuroevolution, installée viapip install "evox[neuroevolution]". Cela inclut la bibliothèque Google Brax, Gym, et plus encore. Après l’installation, vous pouvez utiliser des wrappers commeBraxProblemdansevox.problems.neuroevolutionpour transformer les environnements RL en problèmes d’optimisation. Des outils commeParamsAndVectorsont également inclus pour aplatir les paramètres de modèles PyTorch en vecteurs pour l’évolution. Notez que Brax ne fonctionne que sur Linux ou Windows via WSL — le Python Windows natif peut ne fonctionner que sur CPU. En bref, l’activation ou la désactivation des plugins EvoX est contrôlée via l’installation d’extras spécifiques. -
Projets Frères : EvoX a des projets liés tels que EvoRL (focalisé sur l’apprentissage par renforcement évolutif) et EvoGP (programmation génétique accélérée par GPU). Ceux-ci partagent la philosophie de conception et l’interface d’EvoX. Si votre tâche est orientée RL, vous pourriez préférer ces frameworks dédiés. Gérer ces plugins signifie assurer la compatibilité des versions et satisfaire les dépendances. Par exemple, EvoRL utilise JAX et Brax, tandis qu’EvoGP peut nécessiter des bibliothèques d’arbres symboliques. Ces bibliothèques peuvent généralement coexister sans conflits. Considérez-les comme des outils complémentaires qui peuvent être appelés depuis le projet principal EvoX — ou laissés de côté pour une configuration légère.
-
Plugins Personnalisés : Grâce à la modularité d’EvoX, vous pouvez construire vos propres « plugins ». Par exemple, créez une classe
Monitorpersonnalisée pour suivre des métriques uniques, ou une sous-classeProblempersonnalisée qui enveloppe un simulateur tiers. Ceux-ci étendent efficacement les capacités d’EvoX. La bonne pratique est de suivre les contrats d’interface d’EvoX — par exemple, assurez-vous que votreProblempersonnalisé a une méthodeevaluate(), ou que votreMonitorpersonnalisé hérite d’une classe de base. Une fois testé, vous pourriez même le contribuer aux futures versions d’EvoX.
Dans l’ensemble, la gestion des plugins dans EvoX concerne l’extension flexible et le contrôle des dépendances. En tant que débutant, lors de l’installation, vous pouvez décider d’inclure ou non les extensions vis et neuroevolution. Si elles ne sont pas installées initialement, elles peuvent être ajoutées plus tard. Avec les plugins, vous pouvez surveiller les progrès de l’optimisation plus facilement et intégrer EvoX avec des outils externes pour plus de puissance.
Optimisation des Performances
La performance est une force majeure d’EvoX. Même en utilisant le même algorithme, le support GPU d’EvoX peut augmenter la vitesse de plusieurs ordres de grandeur. Cependant, pour en tirer pleinement parti, vous voudrez suivre quelques conseils :
-
Utiliser le Parallélisme GPU : D’abord, assurez-vous que votre code s’exécute réellement sur le GPU. Comme noté précédemment, installez PyTorch compatible CUDA et déplacez les données vers les périphériques GPU. Si les choses semblent lentes, vérifiez avec
torch.cuda.is_available()— cela devrait retournerTrue. Si le GPU existe mais n’est pas utilisé, c’est probablement parce que les tenseurs ont été créés sur le CPU par défaut. Corrigez cela en définissant explicitementdevice, ou en vous assurant que les tenseurs d’entrée (commelb/ub) sont sur CUDA. EvoX suivra le périphérique de ces entrées. Sur les systèmes multi-GPU, EvoX utilise généralement un GPU par processus. Pour exploiter plusieurs GPU, vous pouvez exécuter plusieurs processus avec différents GPU ou attendre un futur support pour l’exécution multi-GPU coordonnée. -
Évaluation Parallèle : Un goulot d’étranglement clé dans les algorithmes évolutifs est l’évaluation de la fitness. Puisque les évaluations sont souvent indépendantes, elles peuvent être parallélisées. EvoX traite les évaluations par lots (batch) lorsque c’est possible — par exemple, les évaluations de réseaux neuronaux ou les fonctions polynomiales peuvent être calculées en parallèle en utilisant le GPU. Pour les problèmes personnalisés, évitez les boucles Python — vectorisez votre code d’évaluation pour traiter un lot entier de candidats à la fois. Cela tire le meilleur parti des capacités parallèles de PyTorch. Simplement dit : faites en sorte que la fonction
evaluate()de votre problème opère sur des lots — et non sur des solutions individuelles — pour une accélération massive. -
Compiler pour l’Optimisation : PyTorch 2.0 a introduit
torch.compile, qui compile en JIT les modèles/fonctions pour des gains de performance. Si votre logique d’évaluation est complexe, envisagez de compiler avant l’exécution :jit_state_step = torch.compile(workflow.step())Cela pourrait améliorer significativement les performances.
Note :
La compilation ajoute une surcharge et n’est pas toujours supportée par toutes les fonctions ou problèmes. Mieux adapté pour les tâches à grande échelle et de longue durée. Sur Windows, assurez-vous que Triton est installé pour que
torch.compilefonctionne.
-
Régler la Taille de la Population : Une population plus grande augmente la diversité et la capacité de recherche globale — mais augmente aussi le calcul par génération. Équilibrez qualité et vitesse en réglant
pop_size. Sur GPU, vous pouvez souvent l’augmenter sans coût de temps linéaire (grâce au parallélisme). Mais une taille trop grande peut causer des problèmes de mémoire. Si vous manquez de mémoire GPU, réduisez la taille de la population ou la dimension du problème, ou utilisez FP16 pour économiser de l’espace (défini viatorch.set_float32_matmul_precision('medium')). -
Réduire la Surcharge Python : EvoX déplace la plupart des calculs principaux vers
torch.Tensor, mais les boucles écrites par l’utilisateur ou les opérateurs personnalisés doivent éviter les opérations excessives au niveau Python. Évitez les affichages fréquents (coût d’E/S élevé), les listes ou les conversions de types de données. Gardez votre code vectorisé/tensorisé pour exploiter les noyaux C++/CUDA rapides en arrière-plan et réduire la surcharge de l’interpréteur Python. -
Déploiement Distribué : Pour les problèmes ultra-larges, envisagez l’exécution sur plusieurs machines. EvoX supporte les configurations multi-nœuds (via la communication backend et le sharding). Bien que ce ne soit pas adapté aux débutants, il est bon de savoir que cela existe. Avec un cluster GPU, référez-vous à la documentation d’EvoX pour le déploiement distribué. Habituellement, vous devrez définir des variables d’environnement ou lancer avec des scripts spéciaux. L’architecture permet au même code de s’exécuter sur des configurations à nœud unique ou multi-nœuds. Pour votre premier essai, simulez-le avec plusieurs processus sur une seule machine.
-
Profilage des Performances : Pour aller plus loin, utilisez des outils comme le profileur de PyTorch ou
cProfilede Python pour analyser les goulots d’étranglement. Cela vous aide à identifier si le temps passe dans l’évaluation, la sélection ou autre chose — afin que vous puissiez optimiser en conséquence (par ex. en mettant en cache les calculs répétés). EvoX est conçu pour la performance, mais les tâches du monde réel peuvent toujours rencontrer des goulots d’étranglement uniques nécessitant une analyse.
En bref, bien qu’EvoX soit déjà optimisé au niveau de l’architecture, les utilisateurs peuvent encore booster les performances en utilisant correctement les GPU, en effectuant des calculs par lots et en réglant les paramètres. Tout en recherchant la vitesse, rappelez-vous aussi de maintenir la qualité des résultats — l’équilibre est la clé. À mesure que vous vous familiariserez avec EvoX, le réglage des performances deviendra une seconde nature.