论文名称:Improving Parallel Program Performance with LLM Optimizers via Agent-System Interfaces
论文地址:https://arxiv.org/pdf/2410.15625

在当今的科学探索领域,高性能计算已成为推动发现的核心引擎。从模拟复杂的物理系统到破解生物分子结构,超级计算机正以前所未有的算力支撑着人类知识的边界拓展。然而,这些强大算力的充分释放,长期以来受限于一个关键瓶颈——如何高效地将计算任务映射到处理器,将数据分配到内存。这个被称为“映射器(mapper)”的底层系统代码,其开发与优化往往需要专家数天的手动调优,成为阻碍领域科学家充分利用超级计算能力的巨大障碍。

今天,我们将深入探讨一项突破性研究——通过大语言模型(LLM)优化器与Agent-System接口的创新结合,如何将映射器开发从耗时数天的专家工作转变为只需几分钟的自动化流程,同时实现比人工优化更卓越的性能提升。

高性能计算的隐形瓶颈:映射器开发的困境

现代科学发现越来越依赖高性能计算进行复杂建模与仿真。物理学家、化学家、生物学家等计算科学家依靠超级计算机解决前沿问题,这些科学计算占据了世界上最强大超级计算机的主要工作负载。然而,许多领域科学家缺乏计算机科学专业知识,难以应对底层机器的复杂性和规模带来的程序优化挑战。即使对于专家而言,因程序修改或移植到新机器而产生的性能问题排查与修复也常常耗时费力。

任务型编程已成为高性能计算的一种很有前景的方法。该范式将计算分解为独立任务,这些任务仅通过参数进行通信。任务型系统的一个关键优势是将性能调优问题分解为单独的映射过程——即任务到处理器的分配和数据到特定内存的放置。通过精心设计的映射器(以代码形式实现)实现的高质量映射,通常能将性能提升一个数量级。

但现状是,编写映射器仍是一项劳动密集型工作,需要对应用程序、硬件和底层系统API有深入了解。此外,这个过程具有高度的应用特异性、输入特异性和机器特异性,专家往往需要数天的精心调优才能实现高性能。这一挑战对领域科学家尤为突出,他们通常缺乏计算机系统和代码优化的必要专业知识。实现映射器开发自动化,将使科学家能够专注于自己的专业领域,同时充分利用高性能计算系统的能力。

传统的映射器优化方法存在明显局限。以强化学习为代表的传统方法(如OpenTuner)仅依赖标量反馈(如执行时间),在庞大且离散的搜索空间中效率低下。而人工开发不仅耗时,还难以应对不同应用、输入和硬件环境的快速变化。正是在这样的背景下,斯坦福大学等机构的研究团队提出了一种基于LLM的全新优化框架,通过Agent-System接口实现映射器的自动化生成与优化。

突破传统:Agent-System接口的创新设计

为应对映射器自动化生成与优化的双重挑战,研究团队提出了Agent-System接口(ASI)——一个位于智能体(agent)与系统之间的抽象层,旨在简化代码生成并为智能体提供更有意义的反馈。该接口的核心由两部分组成:领域特定语言(DSL)和AutoGuide机制。
在这里插入图片描述

领域特定语言(DSL):简化复杂性的关键

DSL作为ASI的核心,是一个高级接口,封装了生成映射器所需的所有性能关键决策。它通过编译器抽象出底层系统代码的复杂性,同时定义了一个结构化的搜索空间,使映射策略的系统性探索成为可能。与要求以命令式方式指定映射策略的C++不同,该DSL采用声明式设计,允许用户指定要实现的目标,而非具体的实现方式。

DSL的关键优势在于分离关注点,使映射决策的多个方面能够独立表达,而不是纠缠在底层系统API中。这种设计降低了代码复杂性,并自然地为智能体提供了可探索的搜索空间。通过开发将DSL转换为底层C++ API的编译器,研究团队成功地将映射器代码的复杂度大幅降低。

从代码示例对比可以清晰看出DSL的优势。实现相同功能,DSL代码只需几行,而对应的C++代码则需要上百行复杂的系统级代码。在所有基准测试中,使用DSL平均减少了14倍的代码量。这种显著减少使DSL成为LLM代码生成的更合适目标,尽管DSL在LLM训练语料中没有示例,而C++则广泛存在。

DSL能够表达广泛的高性能映射策略,包括所有最重要的决策:

  • 任务语句(Task statement):定义每个任务的处理器选择,在CPU、GPU或OpenMP之间选择。
  • 区域语句(Region statement):控制数据参数的内存放置,可选择GPU的FrameBuffer内存、ZeroCopy内存或CPU系统内存。
  • 布局语句(Layout statement):定义内存布局,包括C顺序 vs Fortran顺序、结构数组(SOA)vs 数组结构(AOS)以及对齐约束。
  • 索引任务映射语句(IndexTaskMap statement):通过自定义函数控制索引映射,建立任务索引空间与分布式机器的处理器空间之间的对应关系。
    在这里插入图片描述

实验证明,尽管DSL比通用C++更受约束,但它非常有效——所有由智能体发现的、性能超过专家编写的C++实现的映射器,都能在当前DSL中表达。

AutoGuide机制:将原始输出转化为可行动反馈

AutoGuide机制旨在解决原始执行输出对智能体而言往往缺乏信息量的问题,将原始执行输出解释为信息丰富且可行动的指导。其设计基于三个关键动机:生成式优化受益于自然语言反馈而非仅依赖标量值; runtime系统的原始执行输出通常不足以有效指导智能体决策;系统研究人员已知的领域启发式知识可以自然地用语言表达(例如,大多数任务在GPU上运行比在CPU上更快)。

AutoGuide通过关键字匹配实现,能解释模糊的错误消息并建议映射器修改。例如,当执行输出显示“断言失败:步幅与预期值不匹配”时,AutoGuide会将其解释为“内存布局不符合预期”,并建议“调整布局约束或将任务移至不同的处理器类型”。对于性能指标反馈,如“执行时间为0.03秒”,AutoGuide会建议“将更多任务移至GPU以减少执行时间”。

这种反馈机制使智能体能够利用丰富的反馈迭代更新其策略,更有效地优化映射器。消融研究证明,AutoGuide在实现性能提升中至关重要,带有完整反馈机制的优化策略显著优于仅使用原始执行输出或缺乏反馈的变体。

生成式优化:LLM驱动的系统性能突破

针对映射器性能优化的挑战,研究团队采用了生成式优化方法——这是优化技术的最新进展。与强化学习等传统方法仅依赖标量奖励不同,生成式优化可以利用更丰富的反馈形式,如错误解释和自然语言表达的可行动建议。这种智能体优化工作流此前已在多个领域被证明有效,而该研究首次将其应用于系统优化领域。
在这里插入图片描述

优化过程:智能体如何迭代改进映射器

映射器生成被表述为一个在线优化问题。给定一组可能的映射器、优化目标和一个将映射器作为输入并返回执行反馈和生成过程图的函数,研究团队利用DSL构建参数空间以提高优化效率。在这个框架中,映射器性能是确定性的,因为环境中的所有随机性来源都被仔细控制。

优化过程如图所示,智能体接收两个输入:服务器规格和应用程序元数据。服务器规格详细描述硬件配置,包括每个节点的CPU和GPU数量以及总节点数;应用程序元数据提供任务名称和每个任务访问的数据参数信息。这些输入定义了智能体在优化过程中探索的结构化搜索空间。

智能体使用给定的输入生成映射器代码,该代码与应用程序代码一起在服务器上执行。来自runtime的原始执行反馈通过AutoGuide机制增强后反馈给LLM,迭代改进智能体的映射器代码生成能力。映射器智能体通过迭代生成DSL代码来改进映射决策,采用模块化策略,将生成整体映射器的任务分解为独立的代码段,使智能体能够分别决定每个段的生成代码。这种方法与“由少到多”提示技术(least-to-most prompting)一致,提高了生成质量。

与传统方法的对比:效率与性能的双重优势

为验证生成式优化的优势,研究团队将其与基于强化学习的自动调优框架OpenTuner进行了对比。实验结果令人印象深刻:在仅运行10次迭代的情况下,生成式优化器(Trace)找到的映射器性能比OpenTuner高出11倍;即使当OpenTuner运行1000次迭代时,Trace仍保持3.8倍的性能优势。

这种优势源于生成式优化利用丰富反馈的能力。传统强化学习方法仅依赖标量反馈(如执行时间),而生成式优化可以利用错误解释、具体建议等多维度反馈,使智能体能够更快地识别高性能映射策略。此外,Trace完成整个优化过程仅需每个应用程序10分钟,将映射器开发时间从数天缩短至几分钟,极大地提高了效率。

实验验证:超越专家水平的性能提升

研究团队在包含9个基准测试的套件上对其方法进行了全面评估,包括3个科学计算工作负载和6个著名的矩阵乘法算法。实验环境为配备两个Intel 10核E5-2640 v4 CPU、256G主内存和四个NVIDIA Tesla P100 GPU的节点,使用gpt-4o-2024-08-06模型。

基准测试与对比方法

评估中使用的基准测试提供了深度和多样性:

  • 科学计算工作负载:Circuit(模拟电路行为)、Stencil(模拟2D网格更新)、Pennant(模拟可压缩流的非结构化网格拉格朗日交错网格流体动力学)。
  • 矩阵乘法算法:Cannon’s、SUMMA、PUMMA、Johnson’s、Solomonik’s和COSMA,这些算法在高性能计算和科学仿真中发挥核心作用,并对下游机器学习工作负载有广泛影响。

对比方法包括:

  • 专家编写的映射器:由在计算科学领域拥有多年经验的领域科学家手动开发,调优特定应用可能需要数天时间。
  • 随机生成的映射器:使用10个不同的随机种子从每个应用的整个搜索空间中采样生成,报告平均性能。
  • 智能体优化的映射器:使用Trace和OPRO搜索算法,每个应用运行10次迭代,为考虑输出的随机性,重复过程5次并报告平均值,同时报告Trace在所有运行中找到的最佳映射器。
  • OpenTuner映射器:使用强化学习基于标量反馈优化性能,提供执行时间作为反馈,并对失败给予高惩罚。

令人瞩目的结果:速度与质量的双重突破

实验结果以归一化吞吐量为性能指标(值越高越好),吞吐量相对于专家编写的映射器进行归一化。所有由Trace找到的最佳映射器都能达到或超过专家编写的映射器,凸显了基于智能体的生成式优化器的有效性。
在这里插入图片描述

随机映射器在所有应用中始终表现出低性能,强调了映射决策的关键作用。在生成的90个随机映射器(9个应用各10个)中,74个(82.2%)因无效的映射决策导致运行时错误,吞吐量记录为0,这表明高质量映射器的生成需要智能引导,而非随机尝试。

在优化轨迹对比中,Trace与OPRO性能相近,显著优于OpenTuner。当将OpenTuner的优化迭代从10次扩展到1000次时,Trace即使在OpenTuner运行1000次迭代后仍实现3.8倍的加速。当两者都限制在10次迭代时,Trace比OpenTuner性能高出11倍,展示了其快速识别高性能映射的能力。

案例分析揭示了性能提升的具体来源:

  • 在Circuit基准测试中,Trace实现了1.34倍的最大性能提升,主要归功于内存放置策略:最佳映射器将两个数据集合分配到GPU FrameBuffer内存,而专家映射器将它们放置在GPU ZeroCopy内存中。尽管增加了少量GPU间通信成本,但更快的内存访问减少了任务执行时间,提高了整体性能。
  • 在矩阵乘法算法中,COSMA的性能提升最为显著,Trace比专家映射器实现1.31倍的加速,这归因于Trace更高效的索引映射函数,通过更好地在GPU间分布分区子矩阵减少了GPU间通信。

消融研究:验证核心组件的必要性

为验证Agent-System接口设计的必要性,研究团队进行了两项关键的消融研究,分别考察DSL和AutoGuide机制的作用。

DSL对代码生成的关键支持

该研究关注DSL如何帮助LLMs生成语法和语义正确的映射器,而不是直接优化性能。实验设计了10个用自然语言描述的映射策略,评估LLMs在DSL和原始底层C++中生成正确代码的能力。为确保公平比较,为DSL和C++提供了相同的提示材料(文档、示例和起始代码)。
在这里插入图片描述

成功率基于生成的代码是否通过预定义的测试用例来衡量,结果显示DSL在单次尝试和迭代优化设置中都实现了显著更高的生成成功率。在单次尝试中,DSL的成功率为80%,而C++为0%;在迭代优化中,DSL的成功率达到100%,而C++仍为0%。

LLMs在DSL上表现更好的原因有两点:首先,DSL中自然语言和代码之间的语义差距比C++小得多。例如,编写一个“将所有数据对齐到64字节内存并使用Fortran排序”的映射器,在DSL中只需一行声明式代码,而C++映射API需要一系列操作来强制对齐和排序,扩大了语义差距。其次,如前所述,DSL减少了代码量,平均减少14倍,简化了代码生成。这些结果凸显了高级Agent-System接口的重要性。

AutoGuide反馈的增效作用

该研究比较了不同反馈设计的效果,包括无反馈的0-shot和5-shot基线、仅提供原始执行反馈的变体、提供执行错误额外解释的变体,以及提供映射器修改建议的变体。

结果表明,带有完整反馈机制(执行+解释+建议)的优化策略始终优于所有反馈减少的变体。0-shot和5-shot结果表现最差,强调了基于反馈的迭代优化的重要性。这凸显了智能体工作流的价值,表明性能提升不仅由提示LLM驱动,更是工作流设计中迭代优化的直接结果。
在这里插入图片描述

结论与展望:高性能计算的民主化

这项研究通过引入由LLMs驱动的系统,实现了映射器代码的生成和优化自动化。Agent-System接口通过DSL简化了代码生成,抽象出底层系统代码的复杂性,并通过AutoGuide机制丰富了执行反馈,将原始执行输出解释为可行动的指导。

研究团队将生成式优化引入系统性能改进,利用错误消息和自然语言可行动建议等丰富反馈,与依赖数值奖励的RL-based方法(如OpenTuner)不同,该方法能在更少的迭代中识别更好的映射器。实验表明,智能体生成的映射器在9个基准测试中实现了高达1.34倍的加速,超过了专家编写的映射器,同时将映射器开发时间从数天缩短至几分钟。

这项工作的意义不仅在于性能的提升,更在于推动高性能计算的民主化。通过将复杂的系统优化任务自动化,领域科学家无需深入掌握计算机系统知识,就能充分利用超级计算机的强大算力,将更多精力投入到各自的科学研究中。未来,随着生成式AI技术的不断发展,我们有理由相信,这种基于LLM的优化方法将在更广泛的系统领域得到应用,推动计算效率的新一轮革命。

对于研究人员和工程师而言,这项工作展示了领域特定语言与生成式AI结合的巨大潜力,为系统优化提供了全新的思路。对于整个科学社区而言,这意味着更高效的计算资源利用和更快的科学发现速度。在超级计算日益成为科学突破关键驱动力的今天,这样的创新无疑将产生深远的影响。

Logo

为武汉地区的开发者提供学习、交流和合作的平台。社区聚集了众多技术爱好者和专业人士,涵盖了多个领域,包括人工智能、大数据、云计算、区块链等。社区定期举办技术分享、培训和活动,为开发者提供更多的学习和交流机会。

更多推荐