Améliorer les méthodes de test des compilateurs en deep learning
Une nouvelle technique améliore les tests de chargement de modèles dans les compilateurs de deep learning.
― 9 min lire
Table des matières
- Aperçu du problème
- La solution
- Stratégie de migration de tests
- Avantages de la migration
- Évaluation de la nouvelle méthode
- Bugs détectés
- Le rôle de la priorisation des tests
- Comparaison avec les techniques existantes
- Contributions uniques
- Travaux futurs et applications
- Conclusion
- Source originale
- Liens de référence
Les compilateurs de Deep Learning aident à améliorer la performance des modèles complexes utilisés dans les applications d'IA. Ces compilateurs prennent des modèles créés dans différents frameworks, les optimisent et les préparent pour diverses plateformes matérielles. Cependant, ces compilateurs peuvent avoir des Bugs, ce qui peut entraîner de sérieux problèmes dans les modèles qu'ils génèrent.
Les bugs peuvent survenir à trois étapes principales du processus de compilation : chargement du modèle, Optimisation et transformation en code compréhensible par du matériel spécifique. Les méthodes de test précédentes se concentraient principalement sur les étapes d’optimisation, négligeant l’étape cruciale du chargement du modèle. C'est important parce que s'il y a des bugs dans la manière dont les modèles sont chargés, ça compromet tout le processus.
Les méthodes existantes pour tester ces compilateurs ne prennent pas en compte le chargement des modèles ; elles passent souvent directement aux étapes d’optimisation. Cet article propose une nouvelle technique pour améliorer le test de l'étape de chargement du modèle en s'inspirant des Tests déjà réalisés sur des bibliothèques de deep learning.
Aperçu du problème
Les compilateurs de Deep Learning prennent des modèles construits dans diverses bibliothèques, comme PyTorch, et les transforment en un format commun appelé représentation intermédiaire (IR). Chaque modèle se compose de différentes opérations, comme la convolution et les fonctions d'activation, qui doivent être correctement converties au format IR. Si la conversion échoue à un moment donné, cela peut mener à des résultats incorrects lorsque le modèle est exécuté.
Les techniques de test actuellement utilisées pour ces compilateurs ne couvrent pas adéquatement le processus de chargement du modèle. La plupart se concentrent sur les étapes d’optimisation, ce qui pourrait entraîner des bugs non découverts dans l’étape précédente de chargement du modèle.
La solution
Pour mieux tester l'étape de chargement du modèle, une nouvelle approche a été développée. Cette approche extrait des informations utiles des tests existants des bibliothèques de deep learning. L'idée est que les connaissances contenues dans ces tests de bibliothèque peuvent aider à créer de meilleurs tests pour le processus de chargement du compilateur.
Stratégie de migration de tests
La solution proposée inclut une technique appelée migration de tests. Cette technique utilise des tests existants de diverses bibliothèques de deep learning comme sources pour créer de nouveaux tests pour les compilateurs. Le processus implique quelques étapes clés :
Collecter des entrées de test : Des tests provenant de différentes bibliothèques de deep learning sont rassemblés. Ceux-ci incluent à la fois des tests écrits par des humains et des tests générés par des outils qui créent automatiquement des tests en fonction des informations fournies.
Extraire des instances d'Opérateurs : À partir de ces tests, des cas d'utilisation spécifiques d'opérations (comme la convolution ou le pooling) sont extraits. Ces cas d'utilisation indiquent comment un opérateur peut être appliqué avec différents réglages.
Créer des modèles pour les tests : Chaque cas d'utilisation extrait est emballé pour former un modèle simple qui sert d'entrée de test pour le compilateur. Ainsi, les tests sont spécialement conçus pour se concentrer sur la manière dont le compilateur charge différents opérateurs de modèle.
Prioriser les tests : Pour s'assurer que les tests les plus impactants sont exécutés en premier, une stratégie appelée priorisation des tests est mise en œuvre. Cette stratégie identifie quels tests sont susceptibles de découvrir des bugs plus tôt et se concentre sur eux.
Avantages de la migration
L'approche de migration présente plusieurs avantages. En utilisant les tests existants des bibliothèques de deep learning, nous pouvons rapidement rassembler une variété de cas de test sans avoir besoin d'un effort de conception de nouveaux tests étendu. C'est particulièrement utile étant donné le grand nombre d'opérations dans les modèles de deep learning, qui peuvent avoir divers réglages de paramètres.
Évaluation de la nouvelle méthode
Pour valider l'efficacité de cette méthode, elle a été appliquée à huit frontaux de trois compilateurs de deep learning bien connus : TVM, TensorRT et OpenVINO. Chaque frontal prend des modèles de bibliothèques spécifiques et les charge dans le compilateur.
La technique a pu détecter de nombreux bugs auparavant inconnus lors du processus de test. Chaque bug détecté a été confirmé ou corrigé par les développeurs, montrant l'efficacité et la praticité de l'approche.
Bugs détectés
Au total, un nombre significatif de bugs a été trouvé, qui étaient auparavant passés inaperçus. Cela incluait des bugs liés à un traitement incorrect des paramètres, une logique erronée dans le processus de chargement du modèle, et même des problèmes liés à la forme des tenseurs.
Les résultats ont confirmé que de nombreux bugs dans l'étape de chargement du modèle sont liés à des problèmes simples pouvant survenir à cause de la manière dont des opérations spécifiques sont traitées. En se concentrant sur les tests de ces opérateurs, la nouvelle approche a pu révéler des bugs que les méthodes antérieures avaient manqués.
Le rôle de la priorisation des tests
Un aspect crucial de la nouvelle méthode est son accent sur la priorisation des tests. En classant les tests selon leur probabilité de découvrir des bugs, le test peut être beaucoup plus efficace. C'est particulièrement important parce que tester peut être chronophage.
Le processus de priorisation examine deux facteurs principaux :
Diversité des signatures d'opérateurs : La fréquence des occurrences d'opérateurs dans les tests de bibliothèque et les tests de compilateur est prise en compte. Si une fonction est souvent présente dans les tests de bibliothèque mais rarement dans les tests de compilateur, cela pourrait indiquer un domaine nécessitant plus d'attention.
Diversité des réglages de paramètres : Différentes configurations du même opérateur peuvent se comporter différemment. Tester chaque configuration aide à s'assurer que tous les problèmes potentiels sont détectés.
En se concentrant d'abord sur les tests les plus prometteurs, la nouvelle méthode améliore les chances de détecter des bugs tôt dans le processus de test.
Comparaison avec les techniques existantes
Comparée aux méthodes de test traditionnelles telles que NNSmith et COMET, la nouvelle technique basée sur la migration a montré des améliorations significatives. Les tests créés à partir de connaissances migrées ont détecté plus de bugs uniques, en particulier dans l'étape de chargement du modèle des compilateurs.
NNSmith et COMET généraient principalement des tests sans tirer parti des connaissances existantes des bibliothèques. La nouvelle méthode, en revanche, bénéficie de l'ensemble riche de tests déjà disponibles, ce qui la rend beaucoup plus efficace.
Contributions uniques
La capacité de la technique de migration à tirer parti des tests existants a permis une plus grande gamme de scénarios de test. C'est crucial car de nombreuses opérations de deep learning peuvent avoir des interactions complexes qui doivent être testées avec soin.
La nouvelle méthode a également complété les stratégies de test existantes, montrant que les deux peuvent travailler ensemble efficacement. En abordant divers aspects du test, elle a fourni une approche plus globale pour garantir la fiabilité des compilateurs de deep learning.
Travaux futurs et applications
Le succès de cette technique de migration ouvre plusieurs avenues pour la recherche future. Celles-ci incluent :
Élargir les sources de migration : Plus de types de tests provenant de différentes bibliothèques peuvent être inclus, permettant une gamme de tests encore plus large.
Améliorer les oracles de test : De meilleures méthodes pour déterminer si un test passe ou échoue peuvent encore améliorer la fiabilité des tests.
Application dans d'autres domaines : Les techniques développées ici peuvent potentiellement être utilisées en dehors des compilateurs de deep learning pour tester d'autres types de logiciels qui reposent sur des principes similaires.
Améliorer les tests de régression : À mesure que de nouveaux bugs sont découverts et corrigés, inclure ces tests dans les tests de régression aidera à maintenir la qualité du logiciel dans le temps.
Gérer les comportements indéfinis : Étudier des moyens de détecter et de traiter les comportements indéfinis dans les opérations aidera à réduire les faux positifs lors des tests.
Conclusion
La technique basée sur la migration présente une manière efficace et efficiente d’améliorer le test pour l'étape de chargement des modèles dans les compilateurs de deep learning. En extrayant et en tirant parti des connaissances existantes des bibliothèques de deep learning, cette approche assure une évaluation complète de la performance du compilateur.
Grâce à une extraction soigneuse des instances d'opérateurs et à une priorisation intelligente des tests, la méthode a réussi à détecter de nombreux bugs que les techniques précédentes avaient ignorés. Cela démontre non seulement son efficacité, mais souligne également la valeur d'une approche collaborative pour le test de logiciels.
À mesure que le deep learning continue de croître et d'évoluer, garantir la fiabilité des compilateurs sera essentiel. L'approche de test basée sur la migration pourrait apporter d'importantes contributions à ce domaine, ouvrant la voie à des applications d'IA plus robustes à l'avenir.
Titre: A Tale of Two DL Cities: When Library Tests Meet Compiler
Résumé: Deep Learning (DL) compilers typically load a DL model and optimize it with intermediate representation.Existing DL compiler testing techniques mainly focus on model optimization stages, but rarely explore bug detection at the model loading stage. Effectively testing the model loading stage requires covering diverse usages of each DL operator from various DL libraries, which shares a common objective with DL library testing, indicating that the embedded knowledge in DL library tests is beneficial for testing the model loading stage of DL compilers. In this work, we propose OPERA to extract such domain knowledge from the test inputs for DL libraries. OPERA constructs diverse tests from the various test inputs for DL libraries (including the test inputs documented in DL libraries and those generated by recent fuzzers). In addition, it incorporates a diversity-based test prioritization strategy to migrate and execute those test inputs that are more likely to detect diverse bugs earlier. We considered three sources of tests in DL libraries for migration and used eight frontends from three DL compilers (e.g., TVM, TensorRT, and OpenVINO) for evaluation. OPERA detected 170 previously unknown bugs in total, 90 of which have been confirmed/fixed by developers, demonstrating the effectiveness of such the migration-based idea. The test prioritization strategy in OPERA improves testing efficiency with migrated tests by 11.9%~47.4% on average compared to general test prioritization strategies.
Auteurs: Qingchao Shen, Yongqiang Tian, Haoyang Ma, Junjie Chen, Lili Huang, Ruifeng Fu, Shing-Chi Cheung, Zan Wang
Dernière mise à jour: 2024-08-14 00:00:00
Langue: English
Source URL: https://arxiv.org/abs/2407.16626
Source PDF: https://arxiv.org/pdf/2407.16626
Licence: https://creativecommons.org/licenses/by/4.0/
Changements: Ce résumé a été créé avec l'aide de l'IA et peut contenir des inexactitudes. Pour obtenir des informations précises, veuillez vous référer aux documents sources originaux dont les liens figurent ici.
Merci à arxiv pour l'utilisation de son interopérabilité en libre accès.
Liens de référence
- https://github.com/apache/tvm/pull/15060
- https://github.com/AnonymousWorks/OPERA
- https://github.com/apache/tvm/issues/14805
- https://github.com/apache/tvm/pull/14820
- https://github.com/apache/tvm/pull/15053
- https://github.com/apache/tvm/issues/14794
- https://github.com/apache/tvm/pull/15016
- https://github.com/ShenQingchao/OPERA
- https://dl.acm.org/ccs.cfm