4

De la liste de candidats au graphe de calcul tensorisé

AI999第4课:现代计算底座与张量化并行演化
00:00

En calcul évolutionnaire, ladiversitéest la condition d'efficacité de l'algorithme : ce n'est qu'en maintenant un nombre suffisant de solutions candidates que la pression de sélection n'enfermera pas prématurément la population dans un optimum local. Mais la diversité implique en même temps une charge de calcul considérable — une seule exécution nécessite souvent d'évaluer des dizaines de milliers, voire des millions de solutions candidates. Lorsque les candidats sont écrits sous forme de tableaux d'objets ordinaires et évalués un par un à l'aide de boucles élément par élément, la majeure partie du temps de calcul est absorbée par l'ordonnancement élément par élément et le flux de contrôle du langage hôte, plutôt que par les opérations numériques proprement dites. C'est précisément làla raison pour laquelle les boucles CPU sérielles classiques sont inefficaces pour traiter des dizaines de milliers d'évaluations de candidatsla cause profonde.

De la liste de candidats au graphe de calcul tensoriséUn saut dans la représentationListe de candidats (traitement élément par élément)Chaque candidat est un objet indépendant1Candidat x₁2Candidat x₂3Candidat x₃4Candidat x₄Candidat par candidat · boucle CPU sérielleInefficace pour des dizaines de milliers d'évaluationsLe coût réside dans l'ordonnancement élément par élément et le flux de contrôleTenseur de candidatsToute la génération écrite d'un seul bloc[taille de population, dimension de solution]Une ligne = une solution candidateGraphe de calcul : opérations tensoriséesLa sélection et la mise à jour d'état entrent dans le graphe et bénéficient des optimisations de compilationMutationAgit sur toute la populationÉvaluationUne génération entière en un appelSélectionIndexation tensorielleMise à jour d'étatNœud de réductionTout le graphe bénéficie des optimisations de compilation : fusion d'opérateurs · ordonnancement parallèleForme de sortie de l'évaluation : [taille de population] ou [taille de population, nombre d'objectifs]Calcul global : mutation, évaluation, sélection et mise à jour d'état entrent en une seule fois dans le graphe de calcul

Un saut dans la représentation : de la liste de candidats au graphe de calcul tensorisé

Le changement apporté par EvoX n'est pas l'accélération locale d'un opérateur, maisun changement dans la façon de représenter le processus évolutionnaire: on passe d'un traitement sous forme de liste, candidat par candidat, à un calcul par lots où le tenseur est un citoyen de première classe. L'ensemble des candidats n'est plus dispersé dans des tableaux d'objets ; il est organisé de manière unifiée sous forme de tenseurs avec les résultats d'évaluation et l'état de l'algorithme, ce qui leur permet de participer aux opérations en tant qu'ensemble.

  • Tenseur de candidats: toute une génération de candidats est écrite sous forme d'un tenseur de forme [taille de population, dimension de solution]. Un « candidat » n'est alors qu'une ligne du tenseur, et non plus un objet indépendant du langage hôte.
  • Opérateurs par lots: des opérations comme la mutation s'appliquent directement à toute la population ; un seul appel met à jour l'ensemble des candidats, au lieu de N appels en boucle.
  • Évaluation par lots: sous la forme evaluate(tenseur de candidats), on obtient en une seule fois les résultats d'évaluation de toute la génération ; l'unité de mesure des évaluations passe de « l'unité » au « lot ».
  • Graphe de calcul: la sélection et la mise à jour d'état ne sont plus de simples logiques de contrôle sérielles, mais des nœuds du graphe, ce qui leur ouvre la voie aux optimisations de compilation telles que la fusion d'opérateurs et l'ordonnancement parallèle.

Comparaison des deux écritures

L'écriture sous forme de liste revient à : extraire les candidats un par un, les évaluer un par un, les comparer un par un et mettre à jour l'état — chaque étape dépend des boucles du langage hôte, ce qui rend difficile toute optimisation globale. L'écriture tensorisée, elle, procède ainsi : tenseur de candidats → mutation → évaluation → sélection → mise à jour d'état ; toute la chaîne est composée d'opérations tensorielles et exprimée sous forme d'un graphe de calcul, que le compilateur peut fusionner et ordonnancer sur les appareils. À noter : la logique de l'algorithme (distribution de mutation, pression de sélection) n'est pas réécrite ; ce qui est réécrit, c'estla façon de le représenter.

Terme clé
Calcul tensorisé — le tenseur est l'unité de traitement minimale ; mutation, évaluation, sélection et mise à jour d'état s'appliquent toutes en mode par lots à la population entière, et ces opérations par lots peuvent entrer dans le graphe de calcul pour bénéficier des optimisations de compilation. Le saut clé de cette page peut se résumer en une phrase : de la « liste de candidats » au « graphe de calcul tensorisé ».