Simple Science

Hochmoderne Wissenschaft einfach erklärt

# Computerwissenschaften# Software-Entwicklung

Verbesserung der Testmethoden für Deep Learning Compiler

Eine neue Technik verbessert das Testen für das Laden von Modellen in Deep-Learning-Compilern.

― 7 min Lesedauer


Verbesserung des DeepVerbesserung des DeepLearning Compiler Testsbeim Testen des Model-Loadings.Neue Methode steigert die Effizienz
Inhaltsverzeichnis

Deep Learning-Compiler helfen dabei, die Leistung von komplexen Modellen in KI-Anwendungen zu verbessern. Diese Compiler nehmen Modelle aus verschiedenen Frameworks, optimieren sie und bereiten sie für verschiedene Hardware-Plattformen vor. Allerdings können diese Compiler Bugs haben, was zu ernsthaften Problemen in den ausgegebenen Modellen führen kann.

Bugs können in drei Hauptphasen des Kompilierungsprozesses auftreten: beim Laden des Modells, bei der Optimierung und beim Umwandeln in einen Code, den spezifische Hardware verstehen kann. Frühere Testmethoden konzentrierten sich hauptsächlich auf die Optimierungsphasen und vernachlässigten die entscheidende Phase des Modellladens. Das ist wichtig, denn wenn es Bugs beim Laden der Modelle gibt, beeinträchtigt das den gesamten Prozess.

Die bestehenden Methoden zum Testen dieser Compiler behandeln nicht, wie gut sie Modelle laden; sie springen oft direkt zu den Optimierungsschritten. Dieser Artikel stellt eine neue Technik vor, um das Testen für die Modellladephase zu verbessern, indem Wissen aus bereits durchgeführten Tests von Deep-Learning-Bibliotheken übernommen wird.

Problemüberblick

Deep Learning-Compiler nehmen Modelle, die in verschiedenen Bibliotheken wie PyTorch erstellt wurden, und verändern sie in ein gemeinsames Format, das als Intermediate Representation (IR) bezeichnet wird. Jedes Modell besteht aus verschiedenen Operationen wie Faltung und Aktivierungsfunktionen, die genau in das IR-Format umgewandelt werden müssen. Wenn die Umwandlung an irgendeinem Punkt fehlschlägt, kann das zu falschen Ergebnissen führen, wenn das Modell ausgeführt wird.

Die aktuell verwendeten Testtechniken für diese Compiler decken den Modellladeprozess nicht ausreichend ab. Die meisten konzentrieren sich auf die Optimierungsphasen, was zu unentdeckten Bugs in der früheren Phase des Modellladens führen könnte.

Die Lösung

Um die Modellladephase besser zu testen, wurde ein neuer Ansatz entwickelt. Dieser Ansatz entzieht nützliche Informationen aus bestehenden Tests von Deep-Learning-Bibliotheken. Die Idee ist, dass das Wissen, das in diesen Bibliothekstests eingebettet ist, helfen kann, bessere Tests für den Ladeprozess des Compilers zu erstellen.

Testmigrationstrategie

Die vorgeschlagene Lösung umfasst eine Technik namens Testmigration. Diese Technik nutzt bestehende Tests aus verschiedenen Deep-Learning-Bibliotheken als Quellen, um neue Tests für die Compiler zu erstellen. Der Prozess umfasst einige wichtige Schritte:

  1. Testeingaben sammeln: Tests aus verschiedenen Deep-Learning-Bibliotheken werden gesammelt. Dazu gehören sowohl von Menschen geschriebene Tests als auch Tests, die von Tools automatisch erzeugt wurden, die Tests basierend auf den bereitgestellten Informationen erstellen.

  2. Extrahieren von Operatorinstanzen: Aus diesen Tests werden spezifische Anwendungsfälle von Operationen (wie Faltung oder Pooling) extrahiert. Diese Anwendungsfälle zeigen, wie ein Operator mit verschiedenen Einstellungen angewendet werden kann.

  3. Modelle für Tests erstellen: Jeder extrahierte Anwendungsfall wird verpackt, um ein einfaches Modell zu bilden, das als Testeingabe für den Compiler dient. So sind Tests speziell darauf ausgelegt, sich darauf zu konzentrieren, wie gut der Compiler verschiedene Modelloperationen lädt.

  4. Tests priorisieren: Um sicherzustellen, dass die wirkungsvollsten Tests zuerst durchgeführt werden, wird eine Strategie namens Testpriorisierung implementiert. Diese Strategie identifiziert, welche Tests wahrscheinlich Bugs früher aufdecken und konzentriert sich auf diese.

Vorteile der Migration

Der Migrationsansatz hat mehrere Vorteile. Durch die Nutzung bestehender Tests von Deep-Learning-Bibliotheken können wir schnell eine Vielzahl von Testfällen sammeln, ohne umfangreiche neue Testdesign-Anstrengungen zu benötigen. Das ist besonders nützlich angesichts der grossen Anzahl von Operationen in Deep-Learning-Modellen, die verschiedene Parameter Einstellungen haben können.

Bewertung der neuen Methode

Um die Effektivität dieser Methode zu validieren, wurde sie auf acht Frontends von drei bekannten Deep-Learning-Compilern: TVM, TensorRT und OpenVINO angewendet. Jedes Frontend nimmt Modelle aus spezifischen Bibliotheken und lädt sie in den Compiler.

Die Technik konnte zahlreiche zuvor unbekannte Bugs während des Testprozesses aufdecken. Jeder entdeckte Bug wurde von den Entwicklern bestätigt oder behoben, was die Effizienz und Praktikabilität des Ansatzes zeigt.

Entdeckte Bugs

Insgesamt wurden eine beträchtliche Anzahl von Bugs gefunden, die zuvor unbemerkt geblieben waren. Dazu gehörten Bugs im Zusammenhang mit der falschen Handhabung von Parametern, fehlerhafter Logik im Modellladeprozess und sogar Probleme, die mit der Form von Tensoren verknüpft waren.

Die Ergebnisse bestätigten, dass viele Bugs in der Modellladephase mit einfachen Problemen zusammenhängen, die aus der Art und Weise resultieren, wie bestimmte Operationen behandelt werden. Durch die Fokussierung auf das Testen dieser Operatoren konnte der neue Ansatz Bugs aufdecken, die frühere Methoden übersehen haben.

Die Rolle der Testpriorisierung

Ein entscheidender Aspekt der neuen Methode ist der Fokus auf die Testpriorisierung. Indem Tests danach eingestuft werden, wie wahrscheinlich sie Bugs entdecken, kann das Testen viel effizienter gestaltet werden. Das ist besonders wichtig, da Tests zeitaufwendig sein können.

Der Priorisierungsprozess betrachtet zwei Hauptfaktoren:

  1. Vielfalt der Operator-Signaturen: Die Häufigkeit des Auftretens von Operatoren sowohl in Bibliothekstests als auch in Compiler-Tests wird berücksichtigt. Wenn eine Funktion oft in Bibliothekstests, aber selten in Compiler-Tests vorhanden ist, kann das ein Zeichen für einen Bereich sein, der mehr Aufmerksamkeit erfordert.

  2. Vielfalt der Parameter-Einstellungen: Verschiedene Konfigurationen des gleichen Operators können sich unterschiedlich verhalten. Das Testen jeder Konfiguration hilft sicherzustellen, dass alle potenziellen Probleme erfasst werden.

Durch die Fokussierung auf die vielversprechendsten Tests zuerst erhöht die neue Methode die Chancen, Bugs früh im Testprozess zu erkennen.

Vergleich mit bestehenden Techniken

Im Vergleich zu traditionellen Testmethoden wie NNSmith und COMET zeigte die neue migrationsbasierte Technik erhebliche Verbesserungen. Die aus migriertem Wissen erstellten Tests entdeckten mehr einzigartige Bugs, insbesondere in der Modellladephase der Compiler.

NNSmith und COMET generierten hauptsächlich Tests, ohne vorhandenes Wissen aus den Bibliotheken zu nutzen. Die neue Methode hingegen profitieren von den bereits verfügbaren reichhaltigen Tests und ist somit viel effektiver.

Einzigartige Beiträge

Die Fähigkeit der Migrationstechnik, bestehende Tests zu nutzen, erlaubte eine grössere Vielfalt an Test-Szenarien. Das ist entscheidend, da viele Deep-Learning-Operationen komplexe Interaktionen haben, die sorgfältig getestet werden müssen.

Die neue Methode ergänzte auch bestehende Teststrategien und zeigte, dass beide effektiv zusammenarbeiten können. Durch die Berücksichtigung verschiedener Aspekte des Testens bot sie einen umfassenderen Ansatz zur Sicherstellung der Zuverlässigkeit von Deep Learning-Compilern.

Zukünftige Arbeiten und Anwendungen

Der Erfolg dieser Migrationstechnik eröffnet mehrere Möglichkeiten für zukünftige Forschungen. Dazu gehören:

  1. Erweitern der Migrationsquellen: Mehr Arten von Tests aus verschiedenen Bibliotheken können einbezogen werden, um eine noch breitere Palette von Tests zu ermöglichen.

  2. Verbessern der Testorakel: Bessere Methoden zur Bestimmung, ob ein Test bestanden oder nicht bestanden wurde, können die Zuverlässigkeit des Testens weiter verbessern.

  3. Anwendung in anderen Bereichen: Die hier entwickelten Techniken könnten potenziell auch ausserhalb von Deep Learning-Compilern verwendet werden, um andere Arten von Software zu testen, die auf ähnlichen Prinzipien basieren.

  4. Verbesserung des Regressionstests: Wenn neue Bugs entdeckt und behoben werden, wird das Einbeziehen dieser Tests in Regressionstests helfen, die Softwarequalität über die Zeit zu erhalten.

  5. Umgang mit undefinierten Verhaltensweisen: Die Erforschung von Möglichkeiten zur Erkennung und Behebung undefinierter Verhaltensweisen bei Operationen wird helfen, falsch-positive Ergebnisse während des Testens zu reduzieren.

Fazit

Die migrationsbasierte Technik bietet eine effektive und effiziente Möglichkeit, das Testen für die Modellladephase in Deep Learning-Compilern zu verbessern. Durch die Extraktion und Nutzung bestehenden Wissens aus Deep Learning-Bibliotheken stellt dieser Ansatz eine umfassende Bewertung der Leistung des Compilers sicher.

Durch sorgfältige Extraktion von Operatorinstanzen und intelligente Priorisierung von Tests konnte die Methode zahlreiche Bugs aufdecken, die frühere Techniken übersehen haben. Dies demonstriert nicht nur ihre Effektivität, sondern hebt auch den Wert eines kooperativen Ansatzes beim Software-Testen hervor.

Da Deep Learning weiterhin wächst und sich entwickelt, wird die Sicherstellung der Zuverlässigkeit von Compilern essenziell sein. Der migrationsbasierte Testansatz wird voraussichtlich bedeutende Beiträge auf diesem Gebiet leisten und den Weg für robustere KI-Anwendungen in der Zukunft ebnen.

Originalquelle

Titel: A Tale of Two DL Cities: When Library Tests Meet Compiler

Zusammenfassung: 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.

Autoren: Qingchao Shen, Yongqiang Tian, Haoyang Ma, Junjie Chen, Lili Huang, Ruifeng Fu, Shing-Chi Cheung, Zan Wang

Letzte Aktualisierung: 2024-08-14 00:00:00

Sprache: English

Quell-URL: https://arxiv.org/abs/2407.16626

Quell-PDF: https://arxiv.org/pdf/2407.16626

Lizenz: https://creativecommons.org/licenses/by/4.0/

Änderungen: Diese Zusammenfassung wurde mit Unterstützung von AI erstellt und kann Ungenauigkeiten enthalten. Genaue Informationen entnehmen Sie bitte den hier verlinkten Originaldokumenten.

Vielen Dank an arxiv für die Nutzung seiner Open-Access-Interoperabilität.

Mehr von den Autoren

Ähnliche Artikel