Fortran2CPP: Automating Fortran-to-C++ Translation using LLMs via Multi-Turn Dialogue and Dual-Agent Integration
作者: Le Chen, Bin Lei, Dunzhi Zhou, Pei-Hung Lin, Chunhua Liao, Caiwen Ding, Ali Jannesari
分类: cs.LG
发布日期: 2024-12-27 (更新: 2025-01-31)
🔗 代码/项目: GITHUB
💡 一句话要点
Fortran2CPP:利用多轮对话和双Agent集成,实现基于LLM的Fortran到C++的自动翻译
🎯 匹配领域: 支柱九:具身大模型 (Embodied Foundation Models)
关键词: 代码翻译 大型语言模型 多轮对话 双Agent Fortran C++ 高性能计算 自动化
📋 核心要点
- 将遗留Fortran代码翻译为C++是HPC应用现代化的关键,但缺乏高质量数据集和LLM领域知识构成挑战。
- Fortran2CPP通过双LLM Agent进行多轮对话,模拟代码翻译、编译、测试和修复的迭代过程,提升翻译质量。
- 实验表明,使用Fortran2CPP微调的LLM在CodeBLEU评分和编译成功率上均有显著提升,验证了方法的有效性。
📝 摘要(中文)
本文介绍了一种名为Fortran2CPP的方法,用于将遗留的Fortran代码自动翻译成C++,这对于高性能计算(HPC)应用的现代化至关重要。由于高质量的并行Fortran到C++数据集稀缺,且大型语言模型(LLM)在特定领域专业知识有限,自动翻译面临巨大挑战。Fortran2CPP采用了一种新颖的基于LLM Agent的方法,集成了双LLM Questioner-Solver模块,通过多轮对话来提高翻译准确性。我们构建了一个包含1.17万个对话的数据集,捕捉了包括代码翻译、编译、执行、单元测试和错误修复的迭代反馈决策工作流程。使用该数据集,我们对多个开源LLM进行了微调,在CodeBLEU评分上实现了高达3.31倍的提升,编译成功率提高了92%,证明了语法准确性和功能可靠性的增强。我们的研究结果突出了基于对话的LLM训练在复杂代码翻译任务中的价值。数据集和模型已开源。
🔬 方法详解
问题定义:论文旨在解决将遗留的Fortran代码自动翻译成C++代码的问题。现有的方法面临两个主要的痛点:一是缺乏高质量的、并行的Fortran到C++的翻译数据集;二是大型语言模型(LLM)在特定领域(如HPC)的专业知识有限,导致翻译质量不高。
核心思路:论文的核心思路是利用多轮对话的方式,通过模拟人类专家在代码翻译过程中的迭代反馈和决策过程,来提高LLM的翻译准确性。具体来说,论文设计了一个双Agent系统,其中一个Agent负责提出问题(Questioner),另一个Agent负责解决问题(Solver),通过多轮对话,不断优化翻译结果。
技术框架:Fortran2CPP的技术框架主要包含以下几个模块:1) 数据生成模块:利用双LLM Agent生成多轮对话数据集,包括代码翻译、编译、执行、单元测试和错误修复等环节。2) 模型微调模块:使用生成的数据集对开源LLM进行微调,提高其在Fortran到C++翻译任务上的性能。3) 翻译引擎:使用微调后的LLM作为翻译引擎,将Fortran代码翻译成C++代码。整个流程是一个迭代的过程,通过不断地反馈和优化,最终得到高质量的翻译结果。
关键创新:论文最重要的技术创新点在于提出了基于双LLM Agent的多轮对话框架,用于生成高质量的Fortran到C++翻译数据集。与传统的单轮翻译方法相比,该方法能够更好地模拟人类专家在代码翻译过程中的思考和决策过程,从而提高翻译的准确性和可靠性。
关键设计:在数据生成过程中,Questioner Agent负责提出各种问题,例如代码的含义、变量的类型、函数的调用方式等。Solver Agent负责回答这些问题,并根据问题的答案进行代码翻译。在模型微调过程中,论文使用了CodeBLEU作为评估指标,并采用了各种优化技巧,例如学习率调整、梯度裁剪等,以提高模型的训练效果。
🖼️ 关键图片
📊 实验亮点
实验结果表明,使用Fortran2CPP生成的数据集微调的LLM在CodeBLEU评分上实现了高达3.31倍的提升,编译成功率提高了92%。这些结果表明,基于对话的LLM训练方法能够显著提高代码翻译的准确性和可靠性,为自动代码翻译领域的研究提供了新的思路。
🎯 应用场景
该研究成果可应用于高性能计算(HPC)应用的现代化改造,帮助科研人员和工程师将遗留的Fortran代码迁移到更现代的C++平台,从而提高代码的可维护性、可扩展性和性能。此外,该方法还可以推广到其他编程语言之间的翻译任务,具有广泛的应用前景。
📄 摘要(原文)
Translating legacy Fortran code into C++ is a crucial step in modernizing high-performance computing (HPC) applications. However, the scarcity of high-quality, parallel Fortran-to-C++ datasets and the limited domain-specific expertise in large language models (LLMs) present significant challenges for automated translation. In this paper, we introduce Fortran2CPP, a multi-turn dialogue dataset generated by a novel LLM agent-based approach that integrates a dual-LLM Questioner-Solver module to enhance translation accuracy. Our dataset comprises 11.7k dialogues capturing iterative feedback-decision workflows including code translation, compilation, execution, unit testing, and error-fixing. Using this dataset, we fine-tune several open-weight LLMs and achieve up to a 3.31x improvement in CodeBLEU scores and a 92\% increase in compilation success rate, demonstrating enhanced syntactic accuracy and functional reliability. Our findings highlight the value of dialogue-based LLM training for complex code translation tasks. The dataset and model have been open-sourced and are available on our public GitHub repository\footnote{\url{https://github.com/HPC-Fortran2CPP/Fortran2Cpp}}.