CodeRosetta: Pushing the Boundaries of Unsupervised Code Translation for Parallel Programming
作者: Ali TehraniJamsaz, Arijit Bhattacharjee, Le Chen, Nesreen K. Ahmed, Amir Yazdanbakhsh, Ali Jannesari
分类: cs.DC, cs.AI, cs.LG, cs.PF, cs.PL, cs.SE
发布日期: 2024-10-27
💡 一句话要点
CodeRosetta:面向并行编程,突破无监督代码翻译边界
🎯 匹配领域: 支柱九:具身大模型 (Embodied Foundation Models)
关键词: 代码翻译 并行编程 高性能计算 Transformer模型 CUDA Fortran C++ 无监督学习
📋 核心要点
- 现有方法在编程语言及其高性能计算扩展之间的翻译方面存在不足,尤其是在处理复杂的并行语义时。
- CodeRosetta采用编码器-解码器Transformer模型,通过定制的预训练和训练目标,有效捕获代码语义和并行结构。
- 实验结果表明,CodeRosetta在C++到CUDA和Fortran到C++的翻译任务上,显著优于现有基线和通用LLM。
📝 摘要(中文)
大型语言模型(LLMs)的最新进展重新激发了人们对自动编程语言翻译的兴趣。特别是,编码器-解码器Transformer模型在不同编程语言之间的翻译方面显示出前景。然而,由于复杂的并行语义等挑战,在一种语言及其高性能计算(HPC)扩展之间的翻译仍未得到充分探索。在本文中,我们介绍了CodeRosetta,一种专门为编程语言及其HPC扩展之间翻译而设计的编码器-解码器Transformer模型。CodeRosetta在C++到CUDA和Fortran到C++的翻译任务上进行了评估。它使用定制的学习框架,通过量身定制的预训练和训练目标,有效地捕获代码语义和并行结构细微差别,从而实现双向翻译。我们的结果表明,CodeRosetta在C++到CUDA翻译中,比最先进的基线提高了2.9 BLEU和1.72 CodeBLEU,同时编译准确率提高了6.05%。与通用的闭源LLM相比,我们的方法将C++到CUDA翻译提高了22.08 BLEU和14.39 CodeBLEU,编译准确率提高了2.75%。最后,CodeRosetta展示了Fortran到并行C++翻译的熟练程度,据我们所知,这是第一个用于此复杂任务的编码器-解码器模型,与闭源和开源代码LLM相比,CodeBLEU至少提高了4.63分。
🔬 方法详解
问题定义:论文旨在解决编程语言与其高性能计算(HPC)扩展之间的自动翻译问题,例如C++到CUDA,Fortran到C++。现有方法,特别是通用的大型语言模型,在处理并行编程的复杂语义和结构时表现不佳,导致翻译质量和编译准确率较低。
核心思路:论文的核心思路是设计一个专门针对代码翻译的编码器-解码器Transformer模型,并采用定制的学习框架,包括预训练和训练目标,以更好地捕获代码的语义和并行结构。通过这种方式,模型能够更准确地理解和生成并行代码,从而提高翻译质量和编译准确率。
技术框架:CodeRosetta采用标准的编码器-解码器Transformer架构。整体流程包括:1) 使用特定领域的代码数据进行预训练,以初始化模型参数;2) 使用C++到CUDA或Fortran到C++的平行语料库进行微调,优化翻译性能;3) 使用BLEU和CodeBLEU等指标评估翻译质量,并使用编译准确率评估生成代码的可用性。
关键创新:CodeRosetta的关键创新在于其定制的学习框架,该框架专门设计用于处理并行编程语言的翻译。这包括:1) 针对代码翻译的预训练策略,例如使用代码克隆检测等技术;2) 针对并行结构的训练目标,例如鼓励模型生成符合CUDA或并行C++规范的代码;3) 双向翻译能力,允许模型在两种语言之间进行相互翻译。
关键设计:论文中没有详细说明具体的参数设置或网络结构,但强调了定制的学习框架的重要性。预训练可能使用了Masked Language Modeling (MLM) 或其他代码相关的预训练任务。损失函数可能包括标准的交叉熵损失,以及针对代码翻译的特定损失函数,例如CodeBLEU损失。具体的网络结构可能基于标准的Transformer架构,但可能针对代码翻译进行了微调。
🖼️ 关键图片
📊 实验亮点
CodeRosetta在C++到CUDA翻译任务中,比最先进的基线提高了2.9 BLEU和1.72 CodeBLEU,编译准确率提高了6.05%。与通用的闭源LLM相比,C++到CUDA翻译提高了22.08 BLEU和14.39 CodeBLEU,编译准确率提高了2.75%。在Fortran到并行C++翻译任务中,CodeBLEU至少提高了4.63分,是该任务上的首个编码器-解码器模型。
🎯 应用场景
CodeRosetta在高性能计算领域具有广泛的应用前景。它可以帮助程序员将现有的串行代码自动转换为并行代码,从而提高程序的运行效率。此外,它还可以用于不同并行编程语言之间的转换,例如将Fortran代码转换为C++代码,从而方便代码的维护和移植。该研究的成果有助于降低并行编程的门槛,促进高性能计算的普及。
📄 摘要(原文)
Recent advancements in Large Language Models (LLMs) have renewed interest in automatic programming language translation. Encoder-decoder transformer models, in particular, have shown promise in translating between different programming languages. However, translating between a language and its high-performance computing (HPC) extensions remains underexplored due to challenges such as complex parallel semantics. In this paper, we introduce CodeRosetta, an encoder-decoder transformer model designed specifically for translating between programming languages and their HPC extensions. CodeRosetta is evaluated on C++ to CUDA and Fortran to C++ translation tasks. It uses a customized learning framework with tailored pretraining and training objectives to effectively capture both code semantics and parallel structural nuances, enabling bidirectional translation. Our results show that CodeRosetta outperforms state-of-the-art baselines in C++ to CUDA translation by 2.9 BLEU and 1.72 CodeBLEU points while improving compilation accuracy by 6.05%. Compared to general closed-source LLMs, our method improves C++ to CUDA translation by 22.08 BLEU and 14.39 CodeBLEU, with 2.75% higher compilation accuracy. Finally, CodeRosetta exhibits proficiency in Fortran to parallel C++ translation, marking it, to our knowledge, as the first encoder-decoder model for this complex task, improving CodeBLEU by at least 4.63 points compared to closed-source and open-code LLMs.