Valutare modelli di intelligenza artificiale per la generazione di codice ad alte prestazioni
Questo articolo confronta Llama-2 e GPT-3 nella generazione di codice HPC.
― 5 leggere min
Recenti progressi nell'intelligenza artificiale (IA) hanno portato allo sviluppo di modelli linguistici di grandi dimensioni (LLM) che possono generare codice per il calcolo ad alte prestazioni (HPC). Questo articolo analizza due modelli popolari, Llama-2 e GPT-3, e valuta la loro capacità di produrre codice HPC efficace. L'HPC comporta l'esecuzione di calcoli complessi in modo efficiente su supercomputer, e creare il codice giusto per macchine diverse è fondamentale.
Che cosa sono Llama-2 e GPT-3?
Llama-2 e GPT-3 sono modelli di IA progettati per comprendere e generare testo simile a quello umano. Possono prendere input in vari linguaggi di programmazione e generare frammenti di codice basati su quegli input. GPT-3 è un modello più vecchio sviluppato da OpenAI, mentre Llama-2 è un modello più recente sviluppato da Meta AI.
La necessità dell'IA nell'HPC
Il campo dell'HPC è in continua evoluzione, e i ricercatori devono spesso scrivere e ottimizzare codice per diverse hardware e linguaggi di programmazione. Creare codice di alta qualità può richiedere tempo e sforzo significativi. Gli LLM hanno il potenziale per accelerare questo processo generando codice che soddisfa i requisiti di diversi sistemi HPC.
Focalizzazione della valutazione
Questa valutazione si concentra su due aspetti principali: quanto bene Llama-2 e GPT-3 possono produrre codice per operazioni numeriche di base e quanto sia accurato e ottimizzato questo codice. Lo studio esamina specificamente tre operazioni comuni utilizzate nel calcolo: AXPY, GEMV e GEMM. Queste operazioni servono come parametri di riferimento per valutare le prestazioni dei modelli.
Comprendere AXPY, GEMV e GEMM
AXPY è un'operazione semplice in cui uno scalare viene moltiplicato per un vettore e aggiunto a un altro vettore. GEMV sta per moltiplicazione matrice-vettore, che moltiplica una matrice per un vettore. GEMM, d'altro canto, si riferisce alla moltiplicazione matrice-matrice. Queste operazioni formano il backbone di molti calcoli in applicazioni scientifiche.
Metodologia di testing
Per valutare i due modelli, è stato generato codice in vari linguaggi di programmazione, tra cui C++, Fortran, Python e Julia. Ogni linguaggio ha i propri framework di programmazione, come OpenMP e CUDA, utilizzati per scrivere codice parallelo. L'obiettivo era vedere come Llama-2 e GPT-3 potessero generare codice attraverso questi linguaggi e modelli.
Il test ha coinvolto la creazione di 144 frammenti di codice basati su input dati a entrambi i modelli. I codici generati sono stati poi verificati per correttezza ed efficienza.
Risultati per C++
Le prestazioni di Llama-2 e GPT-3 nella generazione di codice C++ hanno mostrato alcune differenze interessanti. Llama-2 ha prodotto codici OpenMP di alta qualità. Tuttavia, ha avuto difficoltà con i codici offloading, spesso mescolando CUDA e OpenMP. GPT-3, invece, è riuscito a generare almeno un codice corretto per la maggior parte delle operazioni standard, rendendolo più affidabile nel complesso.
Risultati per Fortran
Fortran è un linguaggio di programmazione più vecchio ancora ampiamente usato nell'HPC. Quando gli è stato chiesto di generare codice Fortran, Llama-2 ha performato bene, soprattutto con l'operazione AXPY. Tutti i codici generati da Llama-2 erano corretti e ha utilizzato efficacemente i decoratori OpenMP. Tuttavia, non ha performato altrettanto bene nella generazione di codici per OpenACC.
Risultati per Julia
Julia sta guadagnando sempre più popolarità nella comunità di programmazione, in particolare per il calcolo scientifico. In questo studio, Llama-2 ha generato solo un codice corretto per le operazioni matriciali. La maggior parte dei suoi codici AXPY erano errati. GPT-3 è riuscito a generare codici corretti per tutti i casi di test tranne che per alcuni.
Risultati per Python
Python è uno dei linguaggi di programmazione più utilizzati oggi. Per le operazioni selezionate, le prestazioni di Llama-2 variavano. Mentre ha generato codici AXPY errati, ha performato molto meglio con le operazioni matriciali, producendo codici ottimizzati che dimostravano una forte gestione della memoria. Anche GPT-3 ha prodotto risultati affidabili, ma spesso erano meno ottimizzati.
Ottimizzazioni ed errori
Sia Llama-2 che GPT-3 avevano delle limitazioni. Anche se Llama-2 mostrava una preferenza per generare codici ottimizzati, a volte produceva codici errati. Ad esempio, c'erano errori nella gestione della memoria, nelle convenzioni di denominazione e nell'uso improprio dei decoratori. GPT-3 generalmente generava codici corretti ma mancava di alcune ottimizzazioni.
Riepilogo del confronto
In sintesi, Llama-2 e GPT-3 hanno i loro punti di forza e di debolezza. Llama-2 tende a generare codici più ottimizzati, ma a volte sacrifica l'affidabilità. GPT-3, pur essendo generalmente affidabile, non produce sempre il codice più efficiente. I risultati indicano che per alcune operazioni e linguaggi di programmazione, un modello può superare l'altro.
Conclusione
Man mano che le tecnologie IA si sviluppano, la capacità di generare automaticamente codice HPC di alta qualità probabilmente migliorerà. Questo studio evidenzia il potenziale degli LLM come Llama-2 e GPT-3 per assistere i programmatori, ma sottolinea anche la necessità di cautela. La decisione di adottare un modello rispetto all'altro dipenderà dalle esigenze specifiche, come se si dà priorità all'affidabilità o all'ottimizzazione.
Il futuro dell'IA nello sviluppo software rimane promettente, e la ricerca continua aiuterà a perfezionare questi modelli per meglio soddisfare le esigenze della comunità HPC.
Titolo: Comparing Llama-2 and GPT-3 LLMs for HPC kernels generation
Estratto: We evaluate the use of the open-source Llama-2 model for generating well-known, high-performance computing kernels (e.g., AXPY, GEMV, GEMM) on different parallel programming models and languages (e.g., C++: OpenMP, OpenMP Offload, OpenACC, CUDA, HIP; Fortran: OpenMP, OpenMP Offload, OpenACC; Python: numpy, Numba, pyCUDA, cuPy; and Julia: Threads, CUDA.jl, AMDGPU.jl). We built upon our previous work that is based on the OpenAI Codex, which is a descendant of GPT-3, to generate similar kernels with simple prompts via GitHub Copilot. Our goal is to compare the accuracy of Llama-2 and our original GPT-3 baseline by using a similar metric. Llama-2 has a simplified model that shows competitive or even superior accuracy. We also report on the differences between these foundational large language models as generative AI continues to redefine human-computer interactions. Overall, Copilot generates codes that are more reliable but less optimized, whereas codes generated by Llama-2 are less reliable but more optimized when correct.
Autori: Pedro Valero-Lara, Alexis Huante, Mustafa Al Lail, William F. Godoy, Keita Teranishi, Prasanna Balaprakash, Jeffrey S. Vetter
Ultimo aggiornamento: 2023-09-11 00:00:00
Lingua: English
URL di origine: https://arxiv.org/abs/2309.07103
Fonte PDF: https://arxiv.org/pdf/2309.07103
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://openai.com/
- https://openai.com/product/gpt-4
- https://ai.google/discover/palm2/
- https://energy.gov/downloads/doe-public-access-plan
- https://huggingface.co/chat/
- https://www.netlib.org/blas/
- https://github.com/mustafalail/Llama-2-70b-HPC-Kernels
- https://www.tiobe.com/tiobe-index/
- https://github.com/keitaTN/Copilot-hpc-kernels