[论文解读] Comparing Llama-2 and GPT-3 LLMs for HPC kernels generation
该论文评估了Meta的Llama-2大语言模型与OpenAI的Codex(通过GitHub Copilot)在C++、Fortran、Python和Julia中生成高性能计算(HPC)内核的表现,涵盖多种并行编程模型。Llama-2生成的代码优化程度更高,但可靠性低于Copilot,在测试用例中正确输出的比例为33–66%,而Copilot为66–83%;尽管在矩阵运算中优化效果显著,但存在GPU语法错误。
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.
研究动机与目标
- 评估Llama-2在多种编程语言和并行模型下作为HPC内核代码生成器的有效性。
- 将Llama-2的代码生成准确率与基于GPT-3的GitHub Copilot(Codex)基线进行比较。
- 评估模型选择对生成CPU和GPU优化HPC内核的可靠性与性能的影响。
- 识别大语言模型在不同HPC技术栈(包括OpenMP、CUDA、HIP、OpenACC,以及Numba和cuPy等语言特定库)中的行为模式。
- 理解在HPC开发中使用开源与专有大语言模型时,代码可靠性与优化之间的权衡。
提出的方法
- 通过基于Hugging Face的Hugging Chat界面,使用Llama-2生成HPC内核(AXPY、GEMV、GEMM),并采用简单的自然语言提示。
- 在C++、Fortran、Python和Julia四种语言中评估生成的代码,共涵盖144种内核、语言与编程模型的组合。
- 使用各目标模型的标准编译器和运行时环境(如OpenMP、CUDA、OpenACC、Numba、cuPy、CUDA.jl)测试正确性与性能。
- 在Llama-2与Copilot之间采用一致的提示,确保公平比较,必要时对Fortran和Python增加关键词以提升效果。
- 将成功定义为每个测试用例中至少存在一个可编译且功能正确的内核。
- 分析错误模式,特别是GPU特定语法错误(如cuPy中错误使用__shared__而非__device__)。

实验结果
研究问题
- RQ1Llama-2在生成正确HPC内核方面,与基于GPT-3的GitHub Copilot(Codex)相比,在多种编程语言和模型下的准确率如何?
- RQ2Llama-2与Copilot在代码优化策略上存在哪些差异,特别是在矩阵乘法内核方面?
- RQ3为何某些GPU编程模型(如HIP、AMDGPU.jl)在两个模型中均表现出持续较低的成功率?
- RQ4语言特定功能(如Julia的Base.Threads.jl、Python的Numba)在多大程度上影响大语言模型代码生成的可靠性与正确性?
- RQ5大语言模型生成的HPC代码中最常见的错误模式是什么?这些错误在Llama-2与Copilot之间有何不同?
主要发现
- Llama-2在C++案例中至少生成一个正确内核的比例为40%,Fortran为66%,Julia为22%,Python为33%。
- GitHub Copilot在C++案例中至少生成一个正确代码的比例为80%,Fortran为100%,Julia为66%,Python为83%,表现出更高的可靠性。
- 当生成的代码正确时,Llama-2生成的代码比Copilot更优化,特别是在使用Numba和numpy的矩阵内核中,采用如分块(tiling)和步长访问(strided access)等技术。
- Llama-2在cuPy生成代码中反复出现的错误是将__shared__装饰器误用为__device__,尽管逻辑正确,但会导致GPU编译失败。
- 对于AXPY内核,Llama-2在C++、Fortran和Python的所有案例中均未能生成正确代码,而Copilot在大多数情况下成功。
- Llama-2在C++和Fortran中生成正确OpenMP代码方面优于Copilot,所有内核均成功,表明其在CPU并行计算方面支持更强。

更好的研究,从现在开始
从阅读论文到最终审阅,大幅缩短您的研究时间。
无需绑定信用卡
本解读由 AI 生成,并经人工编辑审核。