MPIrigen: Generazione di Codice MPI tramite Modelli Linguistici Specifici per Dominio
MPIrigen: MPI Code Generation through Domain-Specific Language Models
February 14, 2024
Autori: Nadav Schneider, Niranjan Hasabnis, Vy A. Vo, Tal Kadosh, Neva Krien, Mihai Capotă, Abdul Wasay, Guy Tamir, Ted Willke, Nesreen Ahmed, Yuval Pinter, Timothy Mattson, Gal Oren
cs.AI
Abstract
La necessità imperativa di scalare il calcolo su numerosi nodi evidenzia l'importanza di un calcolo parallelo efficiente, in particolare nell'ambito dell'integrazione dell'Interfaccia di Passaggio Messaggi (MPI). La complessa attività di programmazione parallela relativa alla generazione di programmi paralleli basati su MPI è rimasta inesplorata. Questo studio analizza inizialmente le prestazioni dei modelli linguistici più avanzati nella generazione di programmi paralleli basati su MPI. I risultati rivelano che modelli ampiamente utilizzati come GPT-3.5 e PolyCoder (modelli di codice specializzati multilingue) mostrano un degrado significativo delle prestazioni quando generano programmi basati su MPI rispetto a programmi generici. Al contrario, modelli specifici per il dominio come MonoCoder, pre-addestrati su linguaggi di programmazione correlati a MPI come C e C++, superano i modelli più grandi. Successivamente, introduciamo un'attività dedicata di generazione di programmi basati su MPI, ottimizzando MonoCoder su HPCorpusMPI. Chiamiamo il modello risultante MPIrigen. Proponiamo un'innovativa pre-elaborazione per il completamento solo dopo aver osservato l'intero codice, consentendo così un completamento migliore con un contesto più ampio. L'analisi comparativa rispetto alle prestazioni zero-shot di GPT-3.5, utilizzando un nuovo metodo di valutazione orientato all'HPC, dimostra che MPIrigen eccelle nella generazione di funzioni MPI accurate, raggiungendo fino a 0,8 di accuratezza nelle previsioni di posizione e funzione, e oltre 0,9 di accuratezza nelle previsioni degli argomenti. Il successo di questa soluzione su misura sottolinea l'importanza dell'ottimizzazione specifica per il dominio nell'ottimizzazione dei modelli linguistici per la generazione di codice di calcolo parallelo, aprendo la strada a una nuova generazione di strumenti di parallelizzazione automatica. Le fonti di questo lavoro sono disponibili nel nostro repository GitHub MPIrigen: https://github.com/Scientific-Computing-Lab-NRCN/MPI-rigen.
English
The imperative need to scale computation across numerous nodes highlights the
significance of efficient parallel computing, particularly in the realm of
Message Passing Interface (MPI) integration. The challenging parallel
programming task of generating MPI-based parallel programs has remained
unexplored. This study first investigates the performance of state-of-the-art
language models in generating MPI-based parallel programs. Findings reveal that
widely used models such as GPT-3.5 and PolyCoder (specialized multi-lingual
code models) exhibit notable performance degradation, when generating MPI-based
programs compared to general-purpose programs. In contrast, domain-specific
models such as MonoCoder, which are pretrained on MPI-related programming
languages of C and C++, outperform larger models. Subsequently, we introduce a
dedicated downstream task of MPI-based program generation by fine-tuning
MonoCoder on HPCorpusMPI. We call the resulting model as MPIrigen. We propose
an innovative preprocessing for completion only after observing the whole code,
thus enabling better completion with a wider context. Comparative analysis
against GPT-3.5 zero-shot performance, using a novel HPC-oriented evaluation
method, demonstrates that MPIrigen excels in generating accurate MPI functions
up to 0.8 accuracy in location and function predictions, and with more than 0.9
accuracy for argument predictions. The success of this tailored solution
underscores the importance of domain-specific fine-tuning in optimizing
language models for parallel computing code generation, paving the way for a
new generation of automatic parallelization tools. The sources of this work are
available at our GitHub MPIrigen repository:
https://github.com/Scientific-Computing-Lab-NRCN/MPI-rigen