Learning Performance-Improving Code Edits

TL;DR

提出基于PIE数据集的代码性能优化框架,平均提升6.86倍。

cs.SE 🔴 高级 2023-02-16 25 次浏览
Alexander Shypula Aman Madaan Yimeng Zeng Uri Alon Jacob Gardner Milad Hashemi Graham Neubig Parthasarathy Ranganathan Osbert Bastani Amir Yazdanbakhsh
程序优化 大规模语言模型 性能评估 代码生成 模拟仿真

核心发现

方法论

研究通过收集77,000余对竞争性C++程序的性能改进编辑,结合gem5全系统模拟器实现可靠性能测量。采用检索式少样本提示、链式推理、性能条件生成及自对弈合成数据等多策略,微调预训练模型如CODELLAMA和GPT-3.5,显著提升优化效果。模型在多轮生成中实现平均6.86倍加速,超越人类最高9.56倍,验证了数据驱动和模型微调的有效性。

关键结果

  • 结合PIE数据集,微调的GPT-3.5模型在8次生成中达成平均6.86倍加速,最高9.64倍,超越最优人类提交的9.56倍。检索式提示提升模型性能,最高达2.43倍加速。性能条件生成和自对弈合成数据进一步增强模型优化能力。
  • 不同提示策略中,链式推理在大模型(如34B CODELLAMA)中表现优异,平均提升1.3倍以上。微调模型在性能条件训练下,提升幅度达5.65倍,验证了高质量数据对模型泛化的重要性。
  • 实验显示,开源模型(如CODELLAMA 34B)在结合检索和微调后,性能接近私有模型(GPT-3.5),实现了性能优化的平衡。模型在保证正确性的同时,显著提高了程序运行速度,验证了方法的实用性。

研究意义

该研究突破了高层次程序优化的瓶颈,利用大规模预训练模型结合模拟环境实现可重复、可靠的性能评估,为自动化性能优化提供新思路。其结果不仅推动了程序优化自动化技术的发展,也为硬件无关的性能提升提供了技术基础,有望在编译器、性能调优工具及云计算资源管理中得到广泛应用。

技术贡献

提出基于PIE数据集的性能优化框架,结合检索式提示、性能条件生成及自对弈合成数据的多策略微调方法,显著提升模型优化能力。采用gem5模拟器实现性能测量的可靠性,为大规模模型微调提供了标准化评估平台。创新性地将深度学习与硬件模拟结合,推动了程序性能自动化优化的技术边界。

新颖性

首次构建大规模性能改进编辑数据集PIE,结合硬件模拟实现可重复性能测量。提出多策略融合的模型微调方法,超越传统基于规则或单一提示的优化技术,显著提升预训练模型在高层次程序优化中的表现。这在学术和工业界均属创新突破。

局限性

  • 当前环境依赖gem5模拟器,虽然保证了测量的可靠性,但在实际硬件上可能存在偏差,限制了模型的直接迁移能力。
  • 优化过程受限于训练数据的多样性,某些复杂算法或特定硬件架构下的性能提升仍有待探索。
  • 模型训练成本较高,尤其是在大规模微调和合成数据生成方面,限制了广泛应用的可行性。

未来方向

未来将探索多平台硬件环境的性能模拟,提升模型的泛化能力。同时,结合动态硬件配置和自适应优化策略,推动自动化性能调优的实际落地。还需优化数据采集与合成流程,降低成本,扩大模型适用范围。

AI 总览摘要

随着摩尔定律的逐渐衰退,软件性能优化成为计算机科学研究的核心方向之一。传统的编译器优化和手工调优在高层次算法和API选择方面仍存在瓶颈,难以实现大规模自动化。近年来,预训练大规模语言模型(LLMs)展现出在代码生成和理解中的强大能力,为高层次程序优化提供了新机遇。

本研究提出了一套基于PIE(性能改进编辑)数据集的性能优化框架。该数据集由77,000余对竞争性C++程序组成,涵盖了程序从慢到快的演变过程。通过结合硬件模拟器gem5实现的可靠性能测量,确保了优化效果的可重复性和真实性。研究采用多策略融合的方法,包括检索式少样本提示、链式推理、性能条件生成和自对弈合成数据,微调如CODELLAMA和GPT-3.5等模型。

实验结果显示,模型在多轮生成中平均实现6.86倍的速度提升,最高达9.64倍,超越人类最高的9.56倍。这表明,结合高质量数据和多策略微调的深度学习模型,能够有效实现高层次程序性能优化。该方法不仅推动了自动化软件性能调优的边界,也为硬件无关的性能提升提供了新途径。

未来,研究将关注多平台硬件环境的模拟与优化,结合动态硬件配置和自适应调优策略,推动自动化性能优化的实际应用。整体而言,此项工作为软件工程和硬件设计的结合提供了创新的解决方案,具有广泛的学术和工业价值。

深度分析

研究背景

软件性能优化经历了从手工调优到自动化工具的演变。传统方法依赖于编译器优化和手动调试,效果有限。近年来,深度学习在代码理解和生成中崭露头角,代表性工作如CodeBERT、GPT-3在代码任务中的应用逐步成熟。尽管如此,高层次的算法和API优化仍受数据缺乏和性能评估不可靠的制约。硬件模拟器如gem5的引入,为性能评估提供了标准化途径,但在实际应用中仍面临环境复杂、成本高昂的问题。此前研究多集中在低级优化,缺乏大规模、可靠的高层次性能改进数据集,限制了深度学习模型的应用范围。

核心问题

高层次程序优化面临两个主要难题:一是缺乏大规模真实性能改进的标注数据,二是硬件环境中性能测量的随机性导致结果不稳定。现有方法难以系统学习算法、API等抽象层面的优化策略,且在实际硬件上难以复现优化效果。这限制了自动化性能调优的推广,亟需建立可靠的数据集和评估体系,以实现模型的有效迁移和推广。

核心创新

本研究创新点包括:1)构建PIE数据集,涵盖77,000余对高性能改进的程序,利用gem5模拟实现精确、可重复的性能标注;2)提出多策略融合的模型微调方法,包括检索式提示、链式推理、性能条件生成和合成数据,显著提升模型优化能力;3)结合硬件模拟和深度学习,突破传统规则或单一提示的限制,推动高层次程序自动优化的技术发展。这些创新为自动化软件性能调优提供了新思路。

方法详解

  • �� 数据采集:收集竞争性C++程序,筛选性能提升显著的编辑对,利用gem5模拟器测量执行时间,确保数据的可靠性。• 模型微调:采用检索式少样本提示,结合链式推理引导模型思考优化路径,加入性能标签进行条件生成,并用自对弈合成数据增强训练集。• 训练流程:在不同模型(如CODELLAMA 13B、GPT-3.5)上进行微调,优化目标为最大化程序速度提升。• 评估指标:使用模拟器验证生成程序的正确性和性能,计算平均加速倍数和正确率。• 多策略融合:结合检索、提示、合成数据,形成多轮优化方案,提升模型泛化和优化能力。

实验设计

采用PIE数据集进行训练和测试,划分训练集77,967对,验证2,544对,测试978对。模型在多轮生成中通过BEST@k策略选择最优程序。对比不同提示策略(Instruction, Chain-of-Thought, Retrieval)及微调方法(性能条件、合成数据),评估模型在实际硬件模拟环境中的性能提升。实验还包括人类最高提交速度与模型生成的最大速度比对,验证模型超越人类极限的潜力。参数调优和 ablation 研究确保结果的稳健性。

结果分析

模型在8次生成中平均实现6.86倍加速,最高达9.64倍,超越人类最高的9.56倍。检索式提示和性能条件生成显著提升性能,尤其在大模型(如34B CODELLAMA)中表现优异。微调结合合成数据进一步增强模型能力,验证了数据质量对性能的关键影响。这些结果表明,深度学习模型在高层次程序优化中具有巨大潜力,能实现自动化、可靠的性能提升。

应用场景

该技术可应用于编译器优化、云计算资源调度、性能调优工具等领域,实现程序性能的自动提升。特别是在大规模软件系统和高性能计算中,自动化优化可显著降低人工成本,提高效率。未来还可结合硬件自适应策略,推动硬件无关的性能优化方案落地,惠及工业界和科研机构。

局限与展望

目前依赖gem5模拟器,虽然保证了测量的可重复性,但在实际硬件环境中可能存在偏差。模型训练成本较高,尤其是在大规模微调和合成数据生成方面,限制了推广应用。复杂算法和特定硬件架构下的性能提升仍需深入研究。此外,模型在极端或特殊场景中的表现尚未充分验证,未来需加强多平台适应性。

通俗解读 非专业人士也能看懂

想象你在厨房里做饭,想让菜变得更快熟或者更好吃。传统的方法是不断试错,调整火候和调料,但很费时。现在,有个聪明的助手,它可以学习很多菜谱,知道怎么调才能让菜更快熟、味道更佳。这个助手通过观察许多厨师的改良方案,学会了不同的技巧。它还用模拟厨房测试每个方案,确保不会失败。这样一来,只需告诉它你的目标,它就能帮你快速找到最优的做法。这个过程就像用一个超级智能的厨师助手,帮你节省时间,又保证菜的质量。研究中用的“模拟厨房”就是这个助手的试验场,确保每次改良都靠谱。最终,这个方法能让软件程序跑得更快,就像厨师用新技巧让菜更快熟一样。

简单解释 像给14岁少年讲一样

想象你在学校的科学实验室里做实验,你想让某个实验变得更快、更好。以前,你只能自己试很多次,花费很多时间。而现在,有个超级聪明的机器人助手,它学会了很多科学书上的技巧,能帮你设计出更快的实验方案。这个机器人助手通过看许多科学家的实验步骤,学习了哪些方法可以节省时间,还用模拟软件测试每个方案,确保不会出错。你只需要告诉它你的目标,比如让实验在最短时间内完成,它就能帮你找到最优的方案。这个过程就像你有了一个超级聪明的科学伙伴,帮你节省时间,还能保证实验的成功。研究中用的模拟软件就像这个实验室,确保每个方案都能真实测试。最终,这个方法可以让程序跑得更快,就像科学实验一样高效又可靠。

原文摘要

With the decline of Moore's law, optimizing program performance has become a major focus of software research. However, high-level optimizations such as API and algorithm changes remain elusive due to the difficulty of understanding the semantics of code. Simultaneously, pretrained large language models (LLMs) have demonstrated strong capabilities at solving a wide range of programming tasks. To that end, we introduce a framework for adapting LLMs to high-level program optimization. First, we curate a dataset of performance-improving edits made by human programmers of over 77,000 competitive C++ programming submission pairs, accompanied by extensive unit tests. A major challenge is the significant variability of measuring performance on commodity hardware, which can lead to spurious "improvements." To isolate and reliably evaluate the impact of program optimizations, we design an environment based on the gem5 full system simulator, the de facto simulator used in academia and industry. Next, we propose a broad range of adaptation strategies for code optimization; for prompting, these include retrieval-based few-shot prompting and chain-of-thought, and for finetuning, these include performance-conditioned generation and synthetic data augmentation based on self-play. A combination of these techniques achieves a mean speedup of 6.86 with eight generations, higher than average optimizations from individual programmers (3.66). Using our model's fastest generations, we set a new upper limit on the fastest speedup possible for our dataset at 9.64 compared to using the fastest human submissions available (9.56).

cs.SE cs.AI cs.LG cs.PF