Migliorare i metodi di test dei compiler per il deep learning
Una nuova tecnica migliora i test per il caricamento dei modelli nei compilatori di deep learning.
― 7 leggere min
Indice
I compilatori di Deep Learning aiutano a migliorare le prestazioni di modelli complessi usati nelle applicazioni di AI. Questi compilatori prendono modelli creati in diversi framework, li ottimizzano e li preparano per varie piattaforme hardware. Però, possono avere bug, che possono portare a seri problemi nei modelli che producono.
I bug possono verificarsi in tre fasi principali del processo di compilazione: caricamento del modello, Ottimizzazione e trasformazione in un codice comprensibile per l'hardware specifico. I metodi di test precedenti si sono principalmente concentrati sulle fasi di ottimizzazione, trascurando la cruciale fase di caricamento del modello. Questo è importante perché se ci sono bug nel modo in cui i modelli vengono caricati, compromette l'intero processo.
I metodi esistenti per testare questi compilatori non affrontano quanto bene caricano i modelli; spesso saltano direttamente ai passaggi di ottimizzazione. Questo articolo introduce una nuova tecnica per migliorare il test della fase di caricamento del modello, attingendo a conoscenze da test già condotti su librerie di deep learning.
Panoramica del Problema
I compilatori di Deep Learning prendono modelli costruiti in varie librerie, come PyTorch, e li trasformano in un formato comune chiamato rappresentazione intermedia (IR). Ogni modello consiste in diverse operazioni, come convoluzione e funzioni di attivazione, che devono essere convertite accuratamente nel formato IR. Se la conversione fallisce in qualsiasi punto, può portare a risultati sbagliati quando il modello viene eseguito.
Le tecniche di test attualmente in uso per questi compilatori non coprono adeguatamente il processo di caricamento del modello. La maggior parte si concentra sulle fasi di ottimizzazione, il che potrebbe portare a bug non scoperti nella fase precedente di caricamento del modello.
La Soluzione
Per testare meglio la fase di caricamento del modello, è stato sviluppato un nuovo approccio. Questo approccio estrae informazioni utili da test esistenti di librerie di deep learning. L'idea è che la conoscenza incorporata in questi test di libreria possa aiutare a creare test migliori per il processo di caricamento del compilatore.
Strategia di Migrazione dei Test
La soluzione proposta include una tecnica chiamata migrazione dei test. Questa tecnica utilizza test esistenti provenienti da varie librerie di deep learning come fonti per creare nuovi test per i compilatori. Il processo prevede alcuni passaggi chiave:
Raccolta degli Input di Test: Si raccolgono test da diverse librerie di deep learning. Questi includono sia test scritti da esseri umani che test generati da strumenti che creano automaticamente test in base alle informazioni fornite.
Estrazione delle Istanze degli Operatori: Da questi test, si estraggono casi d'uso specifici di operazioni (come convoluzione o pooling). Questi casi d'uso indicano come un Operatore può essere applicato con diverse impostazioni.
Creazione di Modelli per il Testing: Ogni caso d'uso estratto viene impacchettato per formare un modello semplice che serve come input di test per il compilatore. In questo modo, i test sono progettati appositamente per concentrarsi su quanto bene il compilatore carica diversi operatori del modello.
Prioritizzazione dei Test: Per garantire che i test più impattanti vengano eseguiti per primi, viene implementata una strategia chiamata prioritizzazione dei test. Questa strategia identifica quali test sono probabili a scoprire bug prima e si concentra su di essi.
Vantaggi della Migrazione
L'approccio di migrazione ha diversi vantaggi. Utilizzando test esistenti da librerie di deep learning, possiamo raccogliere rapidamente una varietà di casi di test senza dover sviluppare nuovi test in modo esteso. Questo è particolarmente utile data l'ampia varietà di operazioni nei modelli di deep learning, che possono avere diverse impostazioni di parametri.
Valutazione del Nuovo Metodo
Per convalidare l'efficacia di questo metodo, è stato applicato a otto frontend di tre noti compilatori di deep learning: TVM, TensorRT e OpenVINO. Ogni frontend prende modelli da librerie specifiche e li carica nel compilatore.
La tecnica è riuscita a rilevare numerosi bug precedentemente sconosciuti durante il processo di test. Ogni bug rilevato è stato confermato o corretto dagli sviluppatori, dimostrando l'efficienza e la praticità dell'approccio.
Bug Rilevati
In totale, è stato trovato un numero significativo di bug che erano stati precedentemente trascurati. Questo includeva bug relativi alla gestione scorretta dei parametri, logica errata nel processo di caricamento del modello e persino problemi legati alla forma dei tensori.
I risultati hanno confermato che molti bug nella fase di caricamento del modello sono legati a semplici problemi che possono sorgere dal modo in cui vengono gestite specifiche operazioni. Concentrandosi sul test di questi operatori, il nuovo approccio è riuscito a scoprire bug che i metodi precedenti avevano perso.
Il Ruolo della Prioritizzazione dei Test
Un aspetto critico del nuovo metodo è la sua attenzione sulla prioritizzazione dei test. Classificando i test in base a quanto è probabile che scoprano bug, il testing può essere molto più efficiente. Questo è particolarmente importante perché il testing può richiedere molto tempo.
Il processo di prioritizzazione considera due fattori principali:
Diversità delle Firme degli Operatori: Si considera la frequenza delle occorrenze degli operatori sia nei test di libreria che nei test del compilatore. Se una funzione è spesso presente nei test di libreria ma raramente nei test del compilatore, potrebbe essere un segno di un'area che necessita di maggiore attenzione.
Diversità delle Impostazioni dei Parametri: Diverse configurazioni dello stesso operatore possono comportarsi in modo diverso. Testare ogni configurazione aiuta a garantire che tutti i potenziali problemi vengano individuati.
Concentrandosi sui test più promettenti per primi, il nuovo metodo migliora le chance di rilevare bug precocemente nel processo di testing.
Confronto con Tecniche Esistenti
Rispetto ai metodi di testing tradizionali come NNSmith e COMET, la nuova tecnica basata sulla migrazione ha mostrato miglioramenti significativi. I test creati dalla conoscenza migrata hanno rilevato più bug unici, specialmente nella fase di caricamento del modello dei compilatori.
NNSmith e COMET generavano principalmente test senza sfruttare la conoscenza esistente delle librerie. Il nuovo metodo, invece, beneficia del ricco insieme di test già disponibili, rendendolo molto più efficace.
Contributi Unici
La capacità della tecnica di migrazione di sfruttare test esistenti ha permesso una maggiore gamma di scenari di test. Questo è cruciale perché molte operazioni di deep learning possono avere interazioni complesse che devono essere testate con attenzione.
Il nuovo metodo ha anche completato le strategie di test esistenti, dimostrando che entrambi possono lavorare insieme in modo efficace. Affrontando vari aspetti del testing, ha fornito un approccio più completo per garantire l'affidabilità dei compilatori di deep learning.
Lavori Futuri e Applicazioni
Il successo di questa tecnica di migrazione apre diverse strade per future ricerche. Queste includono:
Espansione delle Fonti di Migrazione: Possono essere inclusi più tipi di test da diverse librerie, consentendo una gamma di test ancora più ampia.
Miglioramento degli Oracoli di Test: Metodi migliori per determinare se un test passa o fallisce possono ulteriormente migliorare l'affidabilità dei test.
Applicazione in Altri Domini: Le tecniche sviluppate qui possono potenzialmente essere utilizzate al di fuori dei compilatori di deep learning per testare altri tipi di software che si basano su principi simili.
Miglioramento dei Test di Regressione: Man mano che nuovi bug vengono scoperti e corretti, includere questi test nei test di regressione aiuterà a mantenere la qualità del software nel tempo.
Gestione dei Comportamenti Non Definiti: Ricercare modi per rilevare e affrontare comportamenti non definiti nelle operazioni aiuterà a ridurre i falsi positivi durante il testing.
Conclusione
La tecnica basata sulla migrazione rappresenta un modo efficace ed efficiente per migliorare il test della fase di caricamento del modello nei compilatori di deep learning. Estraendo e sfruttando la conoscenza esistente dalle librerie di deep learning, questo approccio assicura una valutazione completa delle prestazioni del compilatore.
Attraverso un'attenta estrazione delle istanze degli operatori e una prioritizzazione intelligente dei test, il metodo ha rilevato con successo numerosi bug che le tecniche precedenti avevano trascurato. Questo dimostra non solo la sua efficacia, ma evidenzia anche il valore di un approccio collaborativo al testing del software.
Man mano che il deep learning continua a crescere ed evolversi, garantire l'affidabilità dei compilatori sarà essenziale. L'approccio di testing basato sulla migrazione promette di dare contributi significativi a questo campo, aprendo la strada a applicazioni di AI più robuste in futuro.
Titolo: A Tale of Two DL Cities: When Library Tests Meet Compiler
Estratto: 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.
Autori: Qingchao Shen, Yongqiang Tian, Haoyang Ma, Junjie Chen, Lili Huang, Ruifeng Fu, Shing-Chi Cheung, Zan Wang
Ultimo aggiornamento: 2024-08-14 00:00:00
Lingua: English
URL di origine: https://arxiv.org/abs/2407.16626
Fonte PDF: https://arxiv.org/pdf/2407.16626
Licenza: https://creativecommons.org/licenses/by/4.0/
Modifiche: Questa sintesi è stata creata con l'assistenza di AI e potrebbe presentare delle imprecisioni. Per informazioni accurate, consultare i documenti originali collegati qui.
Si ringrazia arxiv per l'utilizzo della sua interoperabilità ad accesso aperto.
Link di riferimento
- 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