Auto-tuning de précision et validation numérique
Auto-ajustement de précision et validation numérique
Résumé
This thesis focuses on the auto-tuning of floating-point precision, particularly via the PROMISE tool. Auto-tuning involves automatically reducing the precision of floating-point variables in a code while respecting an accuracy constraint on the final result. Lowering the precision of variables offers numerous advantages in terms of time, memory, and energy performance, making it applicable to HPC codes. To this end, many tools exist. The particularity of PROMISE lies in its use of Discrete Stochastic Arithmetic (DSA) through the CADNA numerical validation library, allowing it to optimally estimate the accuracy of results. While neural network reduction generally uses specific methods, they could also benefit from precision auto-tuning. Therefore, PROMISE was applied to four different neural networks, demonstrating the possible reduction of floating-point precisions during the inference phase without compromising result accuracy. Two approaches were tested. The first approach involves using the same precision for the parameters of a single neuron, allowing for the maximum reduction of precisions. The second approach assigns a precision per layer. Despite having more variables in high precision, it allows for faster results. Since PROMISE's outcome depends on the input chosen for inference, it can also be less specific to a single input. Auto-tuning with PROMISE was also studied during the training phase of neural networks. Despite being limited by the randomness of this phase, it showed that reducing the precision of floating-point variables had very little impact on the training phase. The application of PROMISE also highlights significant performance improvements. In terms of memory, the results are equivalent to the theoretical data on memory usage for each floating-point format. In terms of time, the acceleration results obtained for vectorized and non-vectorized codes are close to the theoretical results but are somewhat hindered by certain operations (casts and library function calls). All these results confirm the interest in reducing precision, particularly within vectorized codes.In addition to examining the performance of the studied codes, the performance of PROMISE was also evaluated. The main algorithm used by PROMISE was parallelized. The implementation of an instrumentation tool based on Clang/LLVM was also carried out. This tool allows for the instrumentation of codes for CADNA, replacing a Perl script that was neither robust nor ad hoc. It also allows for the automatic instrumentation of codes for PROMISE, which had to be done manually. A third version of this tool, in the form of a Python API, replaces the analysis and code generation performed within PROMISE, making these steps more robust.
Cette thèse se concentre sur l'auto-ajustement de la précision des nombres flottants, en particulier via l'outil PROMISE. L'auto-ajustement consiste à réduire la précision des variables flottantes d'un code, de manière automatique, tout en respectant une contrainte de précision sur le résultat final. Abaisser la précision des variables présente de nombreux avantages en termes de performances en temps, en mémoire, et en énergie consommée, d'où son application à des codes HPC. À cette fin, de nombreux outils existent. La particularité de PROMISE est l'utilisation de l'Arithmétique Stochastique Discrète (ASD) via la bibliothèque de validation numérique CADNA, qui lui permet d'estimer au mieux la précision des résultats. Alors que la réduction de réseaux de neurones utilise en général des méthodes spécifiques, ces derniers pourraient aussi tirer bénéfice de l'auto-ajustement de la précision. En ce sens, PROMISE a été appliqué à quatre différents réseaux de neurones, démontrant la possible diminution des précisions flottantes dans la phase d'inférence, sans compromettre la précision des résultats. Deux approches sont testées. La première consiste à prendre la même précision pour les paramètres d'un même neurone. Elle permet d'abaisser le plus de précisions possibles. La seconde consiste à prendre une précision par couche. Malgré un plus grand nombre de variables en précision élevée, elle permet d'obtenir un résultat plus rapidement. Le résultat de PROMISE dépendant de l'entrée choisie pour l'inférence, elle peut aussi se révéler moins spécifique à une entrée unique. L'auto-ajustement avec PROMISE a aussi été étudié dans la phase d'apprentissage des réseaux de neurones. Malgré une application limitée par le caractère aléatoire de cette phase, cela a permis de montrer que l'abaissement de la précision des variables flottantes avait très peu d'impact sur la phase d'apprentissage. L'application de PROMISE met aussi en avant des améliorations significatives en termes de performances. En mémoire, les résultats sont équivalents aux données théoriques d'utilisation mémoire de chaque format flottant. En temps, les résultats d'accélération obtenus pour des codes vectorisés et non-vectorisés se rapprochent des résultats théoriques mais sont ternis par certaines opérations (casts et appels aux fonctions de bibliothèques). Tous ces résultats viennent confirmer l'intérêt de l'abaissement de la précision, notamment au sein de codes vectorisés. Outre les performances des codes étudiés, celles de PROMISE ont également été examinées. La parallélisation de l'algorithme principal utilisé par PROMISE a été réalisée. L'implémentation d'un outil d'instrumentation basé sur Clang/LLVM a aussi été réalisée. Cet outil permet d'instrumenter des codes pour CADNA, remplaçant un script Perl, non-robuste et ad hoc. Il permet aussi d'instrumenter automatiquement des codes pour PROMISE, instrumentation effectuée jusqu'ici à la main. Une troisième version de cet outil, sous forme d'API Python, vient remplacer l'analyse et la création de code effectuées au sein de PROMISE, rendant ces étapes plus robustes.
Origine | Version validée par le jury (STAR) |
---|