分享自:

EffiBench:评估自动生成代码效率的基准测试

期刊:38th conference on neural information processing systems (NeurIPS 2024) track on datasets and benchmarks

关于EffiBench:大语言模型生成代码效率基准测试的学术报告

一、 研究作者、机构与发表信息

本研究的主要作者包括:黄东(Dong Huang)、秦宇浩(Yuhao Qing)、商伟毅(Weiyi Shang)、崔鹤鸣(Heming Cui)和张杰(Jie M. Zhang)。他们分别来自香港大学、滑铁卢大学、上海人工智能实验室和伦敦国王学院。该研究以题为《EffiBench: Benchmarking the Efficiency of Automatically Generated Code》的论文形式,发表于第38届神经信息处理系统大会(NeurIPS 2024)的数据集与基准测试(Datasets and Benchmarks)轨道上。

二、 研究背景与目标

1. 科学领域与研究动机: 本研究属于软件工程与人工智能的交叉领域,具体聚焦于大语言模型(LLMs)在代码生成任务上的评估。近年来,以GPT-4、GitHub Copilot为代表的代码生成模型极大地辅助了软件开发。当前学术界和工业界已提出多个基准(如HumanEval、MBPP、DS-1000)来评估生成代码的正确性(Correctness)。然而,代码的效率(Efficiency)——即执行时间和内存使用——这一对绿色计算、可持续发展和资源受限环境至关重要的维度,却长期被忽视。生成代码的效率低下可能导致软件运行缓慢、能耗增加和资源浪费。因此,建立一个专门评估代码生成模型效率的基准,对于推动生成代码的实用性和可持续性具有重要意义。

2. 背景知识与研究缺口: 现有研究表明,即使功能正确,不同模型为同一任务生成的代码在效率上也可能存在巨大差异。论文中提供了一个典型案例(见图1):对于“合并两个已排序数组”的任务,Copilot生成的代码使用了连接数组后冒泡排序的方法,时间复杂度为O((n+m)²);而GPT-4生成的代码采用了双指针单次遍历的算法,时间复杂度为O(n+m)。两者功能相同,但效率天差地别。现有的正确性导向基准由于任务简单、测试用例不足,无法有效区分和评估这种效率差异。

3. 研究目标: 本研究旨在填补这一空白,提出并构建第一个专门用于评估自动生成代码效率的综合性基准——EffiBench。具体目标包括:(1) 构建一个包含大量效率关键型编程问题的数据集;(2) 为每个问题提供经过验证的、具备最优效率的人类编写的规范解决方案(Canonical Solution)作为评估基线;(3) 设计一套全面的效率度量指标;(4) 利用该基准对当前主流的开源和闭源大语言模型进行大规模实证评估,量化其在生成高效代码方面的能力与不足。

三、 详细研究流程与方法

本研究的工作流程主要包括三个核心步骤:基准构建、模型评估与结果分析。

1. 基准构建流程: EffiBench的构建是一个系统性的工程,包含问题收集、规范解决方案构建、测试用例生成和效率度量设计四个子流程。 * 效率关键型问题收集: 研究团队从LeetCode平台收集了初始的2,605个编程问题作为候选。为了确保问题具有评估效率的意义,他们进行了严格筛选:首先,移除了面试频率低于40%的问题;其次,根据常见的算法教科书和LeetCode的标签系统,将问题映射到11类典型的、效率敏感的算法类别(如动态规划、回溯、深度优先搜索、滑动窗口等)。最终,筛选出1,146个属于这些算法类别的问题。 * 规范解决方案构建: 对于筛选出的每个问题,EffiBench提供了一个可执行的、由人类编写的“规范解决方案”。这些方案并非任意解,而是取自LeetCode讨论区中获赞最高、并被公认为在时间和空间复杂度上达到最优(State-of-the-art)的解决方案。研究团队对这些方案进行了适配和修正,确保它们能在非LeetCode的通用Python环境中独立运行。最终,成功为1,000个问题匹配了可用的规范解决方案,构成了EffiBench的最终数据集。 * 测试用例生成: 为了全面评估代码在不同输入规模和边界条件下的效率,研究团队为每个问题开发了一个测试用例生成器。该生成器由GPT-3.5-turbo驱动,能够生成大量具有不同输入大小、数据分布和边缘情况的测试用例。用户可以根据需要生成任意数量的测试。在本次评估中,作者为每个问题提供了100个测试用例用于实验。 * 效率度量设计: EffiBench定义了一套多维度的效率评估指标,超越了简单的“通过/不通过”判断。 * 执行时间(Execution Time, ET)与归一化执行时间(Normalized ET, NET): ET衡量生成代码的平均执行时间。NET是生成代码执行时间与规范解决方案执行时间的比值。NET > 1表示生成代码更慢。 * 最大内存使用(Max Memory Usage, MU)与归一化最大内存使用(Normalized MU, NMU): MU衡量生成代码运行过程中的峰值内存消耗。NMU是生成代码峰值内存与规范解决方案峰值内存的比值。 * 总内存使用(Total Memory Usage, TMU)与归一化总内存使用(Normalized TMU, NTMU): TMU是一个更精细的指标,它通过计算内存使用曲线下的面积,同时考虑了内存使用的大小和持续时间,反映了动态内存使用的整体效率。NTMU是生成代码TMU与规范解决方案TMU的比值。

2. 模型评估流程: * 评估对象: 研究对42个大语言模型进行了评估,包括35个开源模型(如CodeLlama系列、StarCoder2系列、DeepSeek-Coder系列、WizardCoder等)和7个闭源模型(GPT-3.5系列、GPT-4系列、Claude-3系列)。这些模型代表了当前代码生成领域的主流和前沿水平。 * 评估环境: 实验在配置了Intel Xeon Platinum CPU和NVIDIA A100 GPU的服务器上进行,为每个代码执行设置了10秒的超时限制。为确保评估的公平性和可复现性,作者还提供了一个Hugging Face空间服务器,供其他研究者使用相同的环境进行评估。 * 评估方法: a. 代码生成: 使用基于MBPP(Mostly Basic Python Programming)数据集的提示模板,引导模型为EffiBench中的每个问题生成代码。 b. 正确性筛选: 首先运行生成的代码,筛选出能通过所有测试用例的“正确”代码。只有这些正确的代码才会进入效率评估阶段。这一步的通过率记录为Pass@1分数。 c. 效率计算: 对每个问题下每个模型生成的所有正确代码,运行其对应的100个测试用例,收集原始的ET、MU、TMU数据。然后,将这些数据与对应问题的规范解决方案的运行数据进行比较,计算出NET、NMU、NTMU等归一化指标。 d. 对比分析: 从多个维度进行分析:开源 vs. 闭源模型总体表现;不同模型在同一批问题上的表现(表3);所有模型都能正确解决的子问题集上的表现(表4,控制变量);不同算法类别下模型的效率差异(表5);以及效率最差案例的深入分析(表6及图2案例)。

四、 主要研究结果

1. 总体评估结果: * LLMs生成的代码效率普遍低于人类最优解: 这是最核心的发现。即使是表现最好的模型,其生成的代码在效率和内存使用上也显著落后于人类编写的规范解决方案。 * 闭源模型 vs. 开源模型: 在闭源模型中,GPT-4生成的代码平均效率最高,但其NET(3.12倍)和NTMU(6.36倍)仍远高于基准线(理想值为1)。在开源模型中,StarCoder2-15b表现最佳,但其NET(2.59倍)和NTMU(4.83倍)同样显示较大差距。 * 极端低效情况: 在最坏的情况下,GPT-4生成的代码执行时间可达规范方案的13.89倍,总内存使用可达43.92倍。这突显了LLMs在某些问题上可能产生严重低效的代码。 * 正确性与效率的非正相关: 高正确率(高Pass@1)并不保证高代码效率。例如,GPT-4-turbo-preview的Pass@1(65.4%)高于GPT-4(50.8%),但其代码效率(NET 3.19)却略低于GPT-4(NET 3.12)。这表明,优化模型以生成更正确的代码,并不自动意味着生成了更优(更高效)的代码。 * 各效率指标的一致性: 不同效率指标(NET, NMU, NTMU)对模型的排名大体一致,增强了这些指标评估能力的可信度。

2. 控制变量分析结果(基于共同正确的问题集): 当仅分析所有闭源模型都能正确解决的210个问题时(表4),结论依然稳健:GPT-4在大多数效率指标上仍然领先于其他闭源模型,但其NET(3.06倍)和NTMU(6.17倍)依然显著高于1,证实了效率差距的普遍性。

3. 不同算法类别的结果: 模型在不同算法类别上的效率表现存在差异(表5)。例如,对于动态规划(DP)和回溯算法,模型生成的代码往往表现出更高的内存消耗(NTMU值更大)。论文通过一个具体案例(图2)深入分析了原因:在解决一个DP问题时,GPT-3.5-turbo生成了一个完整的二维矩阵(空间复杂度O(n×k)),而规范解决方案使用了滚动数组优化,仅需两个列表(空间复杂度O(k)),导致了高达70.62倍的TMU差距。这表明LLMs在学习和应用高级的空间优化技巧方面存在不足。

4. 低效代码案例分析: 对GPT-3.5-turbo生成的最差效率代码进行分析(表6)发现,低效问题主要集中在动态规划和回溯算法上。这揭示了当前LLMs在生成涉及复杂状态管理和递归的算法代码时,尤其容易产生低效的实现。

五、 研究结论与价值

结论: 本研究系统地证明,尽管当前的大语言模型在代码生成的功能正确性上取得了显著进展,但它们在生成高效代码方面仍存在明显短板。EffiBench基准的评估结果表明,LLMs生成的代码在时间和空间效率上普遍且显著地劣于经过优化的人类编写方案。这种效率差距在复杂的算法问题中尤为突出。

价值: 1. 学术价值: 首次提出了一个专注于代码生成效率评估的标准化、大规模基准(EffiBench),填补了该研究领域的空白。它为社区提供了一个强大的工具,用于系统性地衡量、比较和推动代码生成模型在效率方面的进步。 2. 实践价值: * 对模型开发者: 指出了当前模型的局限性,即过度关注正确性而忽视了代码质量(效率)的优化。这激励未来研究需要将效率作为与正确性同等重要的训练或优化目标。 * 对软件开发者和企业: 提醒在将LLMs生成的代码用于生产环境,尤其是性能敏感或资源受限的系统时,必须进行严格的效率审查和优化,不能仅依赖功能测试。 * 对绿色计算与可持续发展: 低效代码意味着更高的计算资源消耗和能源浪费。本研究强调了提升AI生成代码效率对于减少数字碳足迹、推动可持续软件开发的重要意义。

六、 研究亮点

  1. 首创性基准: EffiBench是第一个专门为评估自动生成代码效率而设计的大规模、多样化基准,包含1000个效率关键型问题、人类最优解基线、可扩展的测试用例生成器和多维效率指标。
  2. 全面且深入的评估: 对42个主流开源和闭源模型进行了迄今为止最全面的代码效率实证研究,揭示了效率差距这一普遍且严重的问题。
  3. 深刻的发现: 明确指出了“高正确率不等于高效率”这一反直觉现象,挑战了仅以Pass@1作为模型能力核心指标的做法。
  4. 细致的分析: 不仅提供了宏观比较,还深入到算法类别和具体案例层面,分析了效率低下的根源(如不擅长空间优化),为后续改进指明了方向。
  5. 开源与可复现性: 公开了EffiBench的源代码、数据集,并提供了在线评估服务器,极大促进了该领域研究的可重复性和进一步发展。

七、 其他有价值内容

论文还提及了一项并行工作Mercury,同样关注LLM生成代码的效率测量,这反映了该研究方向正在受到越来越多的关注。此外,作者指出未来计划将EffiBench扩展到C++、Java等其他编程语言,这将进一步增加其通用性和影响力。研究团队对评估环境差异的影响也进行了初步检验,发现在不同硬件环境下,虽然绝对效率值会变,但模型间的相对排名保持稳定,这增强了基准评估结果的鲁棒性。

上述解读依据用户上传的学术文献,如有不准确或可能侵权之处请联系本站站长:admin@fmread.com