Kernekoncepter
本研究提出了一個名為MonoCoder的小型領域特定語言模型,它專門針對高性能計算(HPC)程式碼和任務進行設計和訓練。與現有的大型多語言語言模型相比,MonoCoder雖然規模更小,但在HPC相關的程式碼理解和生成任務上表現更出色。
Resumé
本文提出了一個名為MonoCoder的領域特定語言模型,專門針對高性能計算(HPC)程式碼和任務進行設計和訓練。
-
背景與動機:
- 現有的大型語言模型(LLM)在HPC相關任務上表現有限,部分原因是它們是在自然語言和通用程式語言上訓練的。
- 我們認為,專門針對HPC程式碼訓練的小型領域特定語言模型可能會表現更好。
-
資料集:
- 我們構建了一個名為HPCORPUS的HPC程式碼資料集,包含從GitHub上收集的C和C++程式碼。
- 該資料集包含大量使用OpenMP、MPI等HPC並行API的程式碼。
-
MonoCoder模型:
- 我們基於現有的PolyCoder模型架構,通過減少層數來構建了一個規模較小(約0.9B參數)的MonoCoder模型。
- 我們僅在C和C++程式碼上對MonoCoder進行預訓練,以專注於HPC領域。
-
局部語義消除(LSE):
- 我們提出了一種基於抽象語法樹(AST)的預處理方法,稱為局部語義消除(LSE),以消除可能導致模型學習到誤導性語義的語法構造。
-
評估結果:
- 在一般程式碼完成任務中,MonoCoder的歸一化困惑度優於更大的語言模型。
- 在HPC相關的程式碼完成任務中,MonoCoder顯著優於其他語言模型,尤其是在應用LSE預處理後。
- 在並行程式碼生成任務中,MonoCoder的CodeBLEU得分也優於其他模型。
總之,本研究表明,通過專門針對HPC領域設計和訓練的小型語言模型,可以在HPC相關任務上實現更好的性能,同時大幅降低計算和訓練成本。
Statistik
在C語言程式碼上,MonoCoder的困惑度為3.51,而歸一化困惑度為2.33,優於其他更大的語言模型。
在C++語言程式碼上,MonoCoder的困惑度為3.69,而歸一化困惑度為2.01,同樣優於其他模型。
在一般程式碼完成任務中,MonoCoder的CodeBLEU得分隨著上下文長度的增加而提高,在600個token的上下文中達到0.85。
在包含OpenMP並行程式碼的任務中,MonoCoder的CodeBLEU得分在600個token的上下文中達到0.86,優於其他模型。
Citater
"LLMs are significantly worse at generating parallel code than they are at generating serial code."
"The poor performance of LLMs on ParEval benchmark indicates that further efforts are necessary to improve the ability of LLMs to model parallel code and/or create new LLMs that are specialized for parallel code generation."