Simple Science

Scienza all'avanguardia spiegata semplicemente

# Informatica# Informatica distribuita, parallela e in cluster# Ingegneria del software

Soluzioni di Machine Learning per errori nei programmi MPI

Un nuovo metodo usa l'apprendimento automatico per rilevare errori nei programmi MPI in modo efficace.

― 7 leggere min


L'IA affronta gli erroriL'IA affronta gli erroridi programmazione MPIcon alta precisione.I nuovi modelli rilevano gli errori MPI
Indice

Trovare errori nei programmi che girano in parallelo usando MPI può essere complicato. Anche se ci sono molti strumenti disponibili per controllare questi programmi, fare debugging rimane un lavoro tosto. In questo lavoro, presentiamo un nuovo metodo che usa machine learning e grafi per aiutare a individuare problemi nei programmi MPI. Abbiamo creato due modelli che analizzano un formato di codice speciale chiamato LLVM Intermediate Representation (IR) per vedere se il codice è corretto o ha errori noti.

Abbiamo testato i nostri modelli usando due set di test specifici: MBI e MPI-CorrBench. Allenando e controllando i nostri modelli sugli stessi test, abbiamo scoperto che potevano identificare gli errori correttamente il 92% delle volte. Li abbiamo anche testati su set di test diversi e abbiamo trovato comunque oltre l'80% di precisione. Inoltre, abbiamo esaminato come diversi tipi di errori MPI sono correlati e come i nostri modelli potrebbero predire errori su cui non avevano mai fatto training prima.

Importanza del Calcolo Ad Alte Prestazioni

Il Calcolo Ad Alte Prestazioni (HPC) è fondamentale in molte aree come la sanità, la ricerca sui materiali, la sicurezza e gli studi ambientali. I supercomputer moderni sono capaci di gestire compiti complessi, ma questi compiti portano con sé sfide a causa dell'hardware vario e dei nuovi algoritmi. Questa complessità rende necessario avere modi migliori per trovare e risolvere i problemi nelle applicazioni HPC. Anche con vari strumenti disponibili per il debug e la verifica, garantire che un programma parallelo si comporti correttamente in tutte le situazioni rimane una sfida difficile.

Il Modello di Programmazione MPI

MPI è un metodo popolare per scrivere programmi paralleli ad alte prestazioni. In un programma MPI, ogni processo esegue la propria parte di codice e comunica con gli altri inviando messaggi. Ci sono molti modi per questi processi di scambiare dati, e questa varietà può portare a vari tipi di errori nei programmi MPI.

Questo lavoro propone un nuovo approccio basato sull'IA per trovare questi errori. Il nostro metodo utilizza il machine learning per imparare come sono strutturati i programmi e identificare gli errori in modo efficace.

Contributi di Questo Lavoro

Questo lavoro contribuisce in diversi modi:

  1. Abbiamo sviluppato metodi di machine learning per rilevare errori nei programmi MPI. Questi metodi possono competere con gli strumenti di verifica esistenti e hanno bisogno solo di un dataset etichettato con errori per funzionare in nuovi casi.
  2. Abbiamo valutato quanto bene i nostri metodi potrebbero trovare errori usando due set di benchmark: MBI e MPI-CorrBench.
  3. Abbiamo anche verificato quanto bene i nostri modelli potessero generalizzare prevedendo errori attraverso test diversi e allenandoli senza determinati errori.

Lavori Correlati

Metodi di Verifica MPI

Ci sono stati vari approcci per verificare i programmi MPI, inclusi analisi statica, esecuzione simbolica e verifica dinamica. Ognuno di questi metodi ha le sue limitazioni. Alcuni strumenti controllano solo tipi specifici di errori o sono focalizzati su implementazioni specifiche di MPI. Ad esempio, alcuni strumenti di analisi statica cercano errori senza eseguire il programma ma possono produrre falsi allarmi. Le tecniche di verifica dinamica controllano errori durante l'esecuzione ma possono mancare alcuni problemi.

Il nostro metodo si distingue perché impara i modelli di errore dal codice sorgente, indipendentemente dal linguaggio di programmazione o dalla versione di MPI.

Machine Learning per la Rilevazione di Bugs

I recenti progressi nel machine learning (ML) hanno portato a nuove tecniche per rilevare bug e rifattorizzare il codice. Questi modelli ML possono trovare problemi efficacemente senza che gli umani debbano scrivere regole complesse. Il nostro approccio sfrutta modelli identificati nel codice sorgente usando modelli di deep learning. Abbiamo utilizzato rappresentazioni intermedie dai compilatori, come LLVM IR, che aiutano a esporre più informazioni per i nostri modelli.

Attualmente, le applicazioni di machine learning non si sono concentrate sulla rilevazione di errori MPI, e il nostro lavoro cerca di colmare questa lacuna.

Creazione di Datasets

Abbiamo creato dataset usando due suite di benchmark per il testing: MBI e MPI-CorrBench. MBI include quasi 2.000 programmi MPI scritti in C e mette in evidenza nove tipi di errore. Ogni errore codificato in MBI ha un'intestazione che spiega l'errore, come eseguirlo e le funzionalità MPI utilizzate. D'altra parte, MPI-CorrBench ha circa 400 piccoli programmi C classificati in modo diverso. Questi benchmark sono cruciali per testare e valutare i nostri modelli.

Metodi di Machine Learning

Per identificare se un'applicazione MPI è corretta, i nostri modelli hanno bisogno di dataset con campioni etichettati. Abbiamo deciso di usare LLVM IR per i nostri modelli perché fornisce una buona rappresentazione per i compiti di deep learning. Abbiamo usato due strategie principali nei nostri modelli:

IR2vec Embedding

La nostra prima strategia è trasformare il codice LLVM IR in embedding vettoriali usando un metodo chiamato IR2vec. Questa trasformazione aiuta il modello posizionando programmi simili come vettori vicini in uno spazio continuo, il che ci consente di identificare relazioni tra di essi. Poi abbiamo usato questi vettori come caratteristiche di input per un classificatore di machine learning per identificare se il codice è corretto o ha errori.

Graph Neural Network (GNN) Embedding

La nostra seconda strategia consiste nel rappresentare i programmi come grafi e usare Graph Neural Networks (GNN) per rilevare errori. Abbiamo adattato una rappresentazione che costruisce grafi di flusso dati e di controllo dal LLVM IR. Le GNN possono gestire relazioni complesse nei grafi, permettendoci di modellare efficacemente le connessioni tra le diverse parti del programma.

Risultati Sperimentali

Ci siamo concentrati su diverse valutazioni dei nostri modelli per misurare le loro prestazioni sui dataset. Abbiamo condotto test di addestramento e validazione in tre scenari: Intra, Mix e Cross.

Modello Intra

Nello scenario Intra, abbiamo addestrato e validato modelli usando MBI o MPI-CorrBench. Abbiamo trovato buoni risultati, indicando che i nostri modelli possono rilevare efficacemente se il codice è corretto. Modificando i parametri e esplorando diversi aspetti dei modelli, abbiamo migliorato l'accuratezza complessiva.

Modello Mix

Abbiamo testato i nostri modelli su un dataset combinato di MBI e MPI-CorrBench. Questo test ha dimostrato che i modelli possono mantenere le loro prestazioni su vari parametri, ottenendo risultati promettenti simili a quelli dello scenario Intra.

Modello Cross

Nello scenario Cross, abbiamo addestrato i nostri modelli su un benchmark e validato su un altro diverso. Questo test mirava a vedere se i nostri modelli potevano gestire dati sconosciuti e generalizzare bene. Anche se i modelli GNN hanno faticato a mostrare lo stesso livello di generalizzazione, IR2vec ha performato bene, mantenendo una forte accuratezza su entrambi i dataset.

Confronto con Lavori Correlati

Rispetto agli strumenti esistenti che verificano i programmi MPI, i nostri modelli hanno mostrato prestazioni competitive. I nostri metodi hanno superato o eguagliato i migliori strumenti in termini di accuratezza e affidabilità. Questo lavoro dimostra che il nostro approccio di machine learning può competere efficacemente con strumenti esperti tradizionali, richiedendo anche meno sforzo manuale.

Direzioni Future

Ci sono diversi percorsi che intendiamo seguire con questa ricerca in futuro. Aspiriamo ad applicare i nostri modelli a dataset più grandi, e stiamo cercando modi per raccogliere più dati da scenari reali, come repository di GitHub. Il nostro obiettivo è addestrare modelli che possano prevedere non solo se c'è un errore, ma anche dove si trova nel codice.

Inoltre, pianifichiamo di integrare i nostri modelli in toolchain automatizzati per fornire agli sviluppatori un feedback rapido durante il processo di codifica. Crediamo ci sia un'opportunità significativa per il machine learning di aiutare a trovare e risolvere bug nelle applicazioni MPI in modo efficace.

Conclusione

In sintesi, questo lavoro presenta un approccio innovativo per rilevare errori nei programmi MPI utilizzando tecniche di machine learning. Abbiamo sviluppato modelli che usano embedding e metodi di deep learning per analizzare il codice e controllare la correttezza. I nostri modelli hanno mostrato risultati impressionanti rispetto agli strumenti esistenti, evidenziando il potenziale del machine learning nella verifica degli errori di programmazione parallela. Man mano che ci muoviamo avanti, siamo entusiasti di esplorare nuovi modi per migliorare questi modelli e sfruttarli in applicazioni pratiche.

Fonte originale

Titolo: MPI Errors Detection using GNN Embedding and Vector Embedding over LLVM IR

Estratto: Identifying errors in parallel MPI programs is a challenging task. Despite the growing number of verification tools, debugging parallel programs remains a significant challenge. This paper is the first to utilize embedding and deep learning graph neural networks (GNNs) to tackle the issue of identifying bugs in MPI programs. Specifically, we have designed and developed two models that can determine, from a code's LLVM Intermediate Representation (IR), whether the code is correct or contains a known MPI error. We tested our models using two dedicated MPI benchmark suites for verification: MBI and MPI-CorrBench. By training and validating our models on the same benchmark suite, we achieved a prediction accuracy of 92% in detecting error types. Additionally, we trained and evaluated our models on distinct benchmark suites (e.g., transitioning from MBI to MPI-CorrBench) and achieved a promising accuracy of over 80%. Finally, we investigated the interaction between different MPI errors and quantified our models' generalization capabilities over new unseen errors. This involved removing error types during training and assessing whether our models could still predict them. The detection accuracy of removed errors varies significantly between 20% to 80%, indicating connected error patterns.

Autori: Jad El Karchi, Hanze Chen, Ali TehraniJamsaz, Ali Jannesari, Mihail Popov, Emmanuelle Saillard

Ultimo aggiornamento: 2024-03-04 00:00:00

Lingua: English

URL di origine: https://arxiv.org/abs/2403.02518

Fonte PDF: https://arxiv.org/pdf/2403.02518

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.

Altro dagli autori

Articoli simili