开发者狂喜!Meta最新发布的LLM Compiler,实现77%自动调优效率

Meta搞了个很牛的LLM Compiler,帮助次序员更高效地写代码。昨天,三大 AI 巨头 OpenAI、Google、Meta 组团发布自家大模型最新研讨成果 ——OpenAI 推出基于 GPT-4 训练的专门找 bug 的新模型 CriticGPT,谷歌开源 9B、27B 版 Gemma2,而 Meta 则拿出了一项最新的人工智能突破 ——LLM Compiler。这是一套强大的开源模型,旨在优化代码并彻底改变编译器设计。这项创新有可能改变开发者处理代码优化的方式,使其更快、更高效、更经济。据悉,该 LLM

Meta搞了个很牛的LLM Compiler,帮助次序员更高效地写代码。

昨天,三大 AI 巨头 OpenAI、Google、Meta 组团发布自家大模型最新研讨成果 ——

OpenAI 推出基于 GPT-4 训练的专门找 bug 的新模型 CriticGPT,谷歌开源 9B、27B 版 Gemma2,而 Meta 则拿出了一项最新的人工智能突破 ——LLM Compiler。

这是一套强大的开源模型,旨在优化代码并彻底改变编译器设计。这项创新有可能改变开发者处理代码优化的方式,使其更快、更高效、更经济。

开发者狂喜!Meta最新发布的LLM Compiler,实现77%自动调优效率

据悉,该 LLM Compiler 的优化潜力达到了自动调优搜索的 77%,这一结果可以显著减少编译时间,并提高各种应用的代码效率,并且在反汇编方面,其来路反汇编的成功率为 45%。

有网友表示,这像是代码优化和反汇编的游戏规则改变者。

开发者狂喜!Meta最新发布的LLM Compiler,实现77%自动调优效率

这对于开发者来说是个让人难以置信的好消息。

开发者狂喜!Meta最新发布的LLM Compiler,实现77%自动调优效率

概述

大语言模型在众多软件工程和编程使命中表现出了卓越的能力,然而它们在代码优化及编译器领域的应用尚未得到充分挖掘。训练这些 LLMs 需要消耗大量的计算资源,包括昂贵的 GPU 时间和庞大的数据集,这往往使得许多研讨和项目难以为继。

为了弥补这一空白,Meta 研讨团队引入了一种 LLM Compiler,以专门优化代码并彻底改变编译器设计。通过在包含 5460 亿个标记的 LLVM-IR 和汇编代码的庞大语料库上训练模型,他们使模型能够理解编译器中间表示、汇编语言和优化技术。

开发者狂喜!Meta最新发布的LLM Compiler,实现77%自动调优效率

论文链接:https://ai.meta.com/research/publications/meta-large-language-model-compiler-foundation-models-of-compiler-optimization/

研讨人员在他们的论文中解释说:「LLM Compiler 增强了对编译器中间表示(IR)、汇编语言和优化技术的理解。」这种增强的理解使模型能够执行以前仅限于人类专家或专业工具的使命。

LLM Compiler 的训练流程如图 1 所示。

开发者狂喜!Meta最新发布的LLM Compiler,实现77%自动调优效率

LLM Compiler 在代码巨细优化方面取得了显著成果。在测试中,模型的优化潜力达到了自动调优搜索的 77%,这一结果可以显著减少编译时间,并提高各种应用的代码效率。

模型在反汇编方面的能力更为出色。LLM Compiler 在将 x86_64 和 ARM 汇编代码转换回 LLVM-IR 时,来路反汇编的成功率为 45%(其中 14% 完全匹配)。这种能力对于逆向工程使命和旧代码维护可能具有无法估量的价值。

项目的核心贡献者之一 Chris Cummins 强调了这项技术的潜在影响:「通过提供两种巨细的预训练模型(7 亿和 13 亿参数)并通过微调版本展示其有效性,」他说,「LLM Compiler 为探索 LLM 在代码和编译器优化领域未被开发的潜力铺平了道路。」

用于编译器优化的 Code Llama

在汇编代码和编译器 IR 上进行预训练

用于训练编程 LLMs 的数据通常主要由像 Python 这样的高级源语言组成,汇编代码在这些数据集中的比例微乎其微,编译器 IR 的比例更小。

为了构建一个对这些语言有良好理解的 LLM,研讨团队用 Code Llama 的权重初始化 LLM Compiler 模型,然后在一个以编译器为中心的数据集上训练 4010 亿个 token,这个数据集主要由汇编代码和编译器 IR 组成,如表 1 所示。

开发者狂喜!Meta最新发布的LLM Compiler,实现77%自动调优效率

数据集 LLM Compiler 主要在由 LLVM(版本 17.0.6)生成的编译器中间表示和汇编代码上进行训练,这些数据来源于用于训练 Code Llama 的同一数据集,已在表 2 中概述了该数据集。与 Code Llama 一样,我们也从自然语言数据集中获取少量训练批次。开发者狂喜!Meta最新发布的LLM Compiler,实现77%自动调优效率

编译器模拟的指令微调

 

为了理解代码优化的机制,研讨团队对 LLM Compiler 模型进行指令微调,以模拟编译器优化,如图 2 所示。

开发者狂喜!Meta最新发布的LLM Compiler,实现77%自动调优效率

其思路是从有限的未优化种子次序集合中,通过对这些次序应用随机生成的编译器优化序列,生成大量示例。然后他们训练模型预测优化生成的代码,还训练模型预测应用优化后的代码巨细。

使命规范。给定未经优化的 LLVM-IR(由 clang 前端输入),一个优化过程列表,以及一个起始代码巨细,生成应用这些优化后的结果代码以及代码巨细。

这个使命有两种类型:在第一种中,模型预期输入编译器 IR;在第二种中,模型预期输入汇编代码。两种类型的输入 IR、优化过程和代码巨细是相同的,提醒决定了所需的输入格式。

代码巨细。他们运用两个指标来衡量代码巨细:IR 指令数和二进制巨细。二进制巨细通过将 IR 或汇编降级为目标文件后,.TEXT 和 .DATA 段巨细的总和计算得出。我们排除 .BSS 段,因为它不影响磁盘上的巨细。

优化 pass。在这项工作中,研讨团队针对 LLVM 17.0.6,并运用新的过程管理器 (PM, 2021),它将 pass 分类为不同的级别,如模块、函数、循环等,以及转换和分析 pass 。转换 pass 改变给定的输入 IR,而分析 pass 生成影响后续转换的信息。

 

在 opt 的 346 个可能的 pass 参数中,他们选择了 167 个运用。这包括每一个默认优化流水线 (例如 module (default<Oz>)),单独的优化转换 pass (例如 module (constmerge)),但排除了非优化实用次序 pass (例如 module (dot-callgraph)) 和不保留语义的转换 pass (例如 module (internalize))。

他们排除了分析 pass,因为它们没有副作用,我们依赖 pass 管理器根据需要注入依赖的分析 pass。对于接受参数的 pass,我们运用默认值 (例如 module (licm<allowspeculation>))。表 9 包含了所有运用的 pass 列表。我们运用 LLVM 的 opt 工具应用 pass 列表,并运用 clang 将结果 IR 降级为目标文件。清单 1 显示了运用的命令。

开发者狂喜!Meta最新发布的LLM Compiler,实现77%自动调优效率

数据集。研讨团队通过对表 2 中总结的未优化次序应用 1 到 50 个随机优化 pass 列表生成编译器模拟数据集。每一个 pass 列表的长度是均匀随机选择的。pass 列表是通过从上述 167 个 pass 集合中均匀采样生成的。导致编译器崩溃或在 120 秒后超时的 pass 列表被排除。

LLM Compiler FTD :扩展下游编译使命 

优化标记调优的指令微调

操作编译器标记对运行时机能和代码巨细都有显著影响。研讨团队训练 LLM Compiler FTD 模型执行下游使命,即为 LLVM 的 IR 优化工具 opt 选择标记,以生成最小的代码巨细。

标记调优的机器学习方法以前已经显示出良好的结果,但在不同次序之间的泛化方面存在困难。以前的工作通常需要编译新次序数十或数百次,以尝试不同的配置并找出机能最佳的选项。该研讨团队通过预测标记来最小化未见次序的代码巨细,在这个使命的零样本版本上训练和评价 LLM Compiler FTD 模型。

他们的方法不依赖于所选择的编译器和优化指标,他们打算在未来针对运行时机能。目前,优化代码巨细简化了训练数据的收集。

使命规范。研讨团队向 LLM Compiler FTD 模型呈现一个未优化的 LLVM-IR (由 clang 前端生成),并要求它生成应该应用的 opt 标记列表,这些优化应用前后的二进制巨细,以及输入代码,如果无法对输入代码进行改进,则生成一个只包含未优化二进制巨细的简短输入消息。

他们运用了与编译器模拟使命相同的受限优化 pass 集,并以相同的方式计算二进制巨细。

图 3 说明了用于生成训练数据的过程以及如何在推理时运用模型。

开发者狂喜!Meta最新发布的LLM Compiler,实现77%自动调优效率

在评价时只需要生成的 pass 列表。他们从模型输入中提取 pass 列表,并运用给定的参数运行 opt。然后,研讨人员可以评价模型预测的二进制巨细和优化输入代码的准确性,但这些是辅助学习使命,不是运用所必需的。

正确性。LLVM 优化器并非无懈可击,以意外或未经测试的顺序运行优化 pass 可能会暴露出微妙的正确性错误,从而降低模型的实用性。为了缓解这种风险,研讨团队开发了 PassListEval,这是一个工具,用于帮助自动识别破坏次序语义或导致编译器崩溃的 pass 列表。图 4 显示了该工具的概览。

开发者狂喜!Meta最新发布的LLM Compiler,实现77%自动调优效率

PassListEval 接受候选 pass 列表作为输入,并在一个包含 164 个自测试 C++ 次序的套件上对其进行评价,这些次序取自 HumanEval-X。每一个次序都包含一个编程挑战的参考解决方案,例如「检查给定数字向量中是否有两个数字之间的距离小于给定阈值」,以及验证正确性的单元测试套件。他们将候选 pass 列表应用于参考解决方案,然后将它们与测试套件链接以生成二进制文件。执行时,如果任何测试失败,二进制文件将崩溃。如果任何二进制崩溃,或者任何编译器调用失败,我们就拒绝该候选 pass 列表。

数据集。该团队在一个源自 450 万个未优化 IR 的标记调优示例数据集上训练了 LLM Compiler FTD 模型,这些 IR 用于预训练。为生成每一个次序的最佳 pass 列表示例,他们进行了广泛的迭代编译过程,如图 3 所示。

1. 研讨团队运用大规模随机搜索为次序生成初始候选最佳 pass 列表。对每一个次序,他们独立生成最多 50 个 pass 的随机列表,从之前描述的 167 个可搜索 pass 集合中均匀采样。每次他们评价一个次序的 pass 列表时,都记录生成的二进制巨细,然后选择产生最小二进制巨细的每一个次序 pass 列表。他们运行了 220 亿次独立编译,平均每一个次序 4,877 次。

2. 随机搜索生成的 pass 列表可能包含冗余 pass,这些 pass 对最终结果没有影响。此外,一些 pass 顺序是可交换的,重新排序不会影响最终结果。由于这些会在训练数据中引入噪声,他们开发了一个最小化过程,并将其应用于每一个 pass 列表。

最小化包括三个步骤:冗余 pass 消除、冒泡排序和插入搜索。在冗余 pass 消除中,他们通过迭代删除单个 pass 来最小化最佳 pass 列表,看它们是否对二进制巨细有贡献,如果没有,就丢弃它们。重复此过程,直到不能再丢弃 pass。然后冒泡排序尝试为 pass 子序列提供统一排序,根据关键字对 pass 进行排序。最后,插入排序通过遍历 pass 列表中的每一个 pass 并尝试在其之前插入 167 个搜索 pass 中的每一个来执行局部搜索。如果这样做改善了二进制巨细,就保留这个新的 pass 列表。整个最小化管道循环直到达到固定点。最小化后的 pass 列表长度分布如图 9 所示。平均 pass 列表长度为 3.84。

3. 他们将之前描述过 PassListEval 应用于候选最佳 pass 列表。通过这种方式,他们确定了 1,704,443 个独立 pass 列表中的 167,971 个 (9.85%) 会导致编译时或运行时错

4. 他们将 100 个最常见的最优 pass 列表广播到所有次序,如果发现改进就更新每一个次序的最佳 pass 列表。之后,唯一最佳 pass 列表的总数从 1,536,472 减少到 581,076。

上述自动调优管道相比 -Oz 产生了 7.1% 的几何平均二进制巨细减少。图 10 显示了单个 pass 的频率。对他们来说,这种自动调优作为每一个次序优化的黄金标准。虽然发现的二进制巨细节省很显著,但这需要 280 亿次额外编译,计算成本超过 21,000 个 CPU 天。对 LLM Compiler FTD 进行指令微调以执行标记调优使命的目标是在不需要运行编译器数千次的情况下达到自动调优器机能的一部分。

 反汇编的指令微调

将代码从汇编语言提升到更高层次的结构,可以运行额外的优化,例如直接集成到应用次序代码中的库代码,或者将遗留代码移植到新架构。反编译领域在将机器学习技术应用于从二进制可执行文件生成可读和准确的代码方面取得了进展。在本研讨中,研讨团队展示了 LLM Compiler FTD 如何通过微调进行反汇编,学习汇编代码和编译器 IR 之间的关系。使命是学习 clang -xir – -o – -S 的逆向翻译,如图 5 所示。

开发者狂喜!Meta最新发布的LLM Compiler,实现77%自动调优效率

来路测试。运用 LLM 进行反汇编会导致正确性问题。提升的代码必须通过等价性检查器进行验证,这并不总是可行的,或者需要手动验证正确性,或经过充分的测试用例以获得信心。然而,可以通过来路测试找到正确性的下限。也就是说,通过将提升的 IR 重新编译成汇编代码,如果汇编代码是相同的,则 IR 是正确的。这为运用 LLM 的结果提供了一条简单途径,并且是衡量反汇编模型效用的一种简单方法。

使命规范。研讨团队向模型提供汇编代码,并训练它发出相应的反汇编 IR。这项使命的上下文长度设置为输入汇编代码 8k 个 token 和输入 IR8k 个 token。

数据集。他们从之前使命中运用的数据集中派生出汇编代码和 IR 对。他们的微调数据集包含 470 万个样本,输入 IR 在降低到 x86 汇编之前已经运用 – Oz 进行了优化。

训练参数 

数据通过字节对编码进行标记化,运用与 Code Llama、Llama 和 Llama 2 相同的标记器。他们对所有四个训练阶段运用相同的训练参数。他们运用的大部分训练参数与 Code Llama 基础模型相同,运用 AdamW 优化器,β1 和 β2 的值为 0.9 和 0.95。他们运用余弦调度,预热步骤为 1000 步,并将最终学习率设置为峰值学习率的 1/30。

与 Code Llama 基础模型相比,该团队将单个序列的上下文长度从 4096 增加到 16384,但保持批量巨细恒定为 400 万个 token。为了适应更长的上下文,他们将学习率设置为 2e-5,并修改了 RoPE 位置嵌入的参数,其中他们将频率重置为基本值 θ=10^6。这些设置与 Code Llama 基础模型进行的长上下文训练一致。

 评价

 

该研讨团队评价 LLM Compiler 模型在标记调优和反汇编使命、编译器模拟、下一个 token 预测以及软件工程使命上的表现。

 

标记调优使命

 

方法。他们评价 LLM Compiler FTD 在未见次序的优化标记调优使命上的表现,并与 GPT-4 Turbo 和 Code Llama – Instruct 进行比较。他们对每一个模型运行推理,从模型输入中提取优化 pass 列表,然后他们运用这个 pass 列表来优化特定次序并记录二进制巨细,基线是运用 -Oz 优化时次序的二进制巨细。

 

对于 GPT-4 Turbo 和 Code Llama – Instruct,他们在提醒后附加一个后缀,提供额外上下文以进一步描述问题和预期输入格式。

 

所有模型生成的 pass 列表都运用 PassListEval 进行验证,如果验证失败则运用 -Oz 作为替代。为进一步验证模型生成的 pass 列表的正确性,他们链接最终的次序二进制文件,并将其输入与运用保守的 -O2 优化管道优化的基准输入进行差分测试。

 

数据集。研讨团队运用从 MiBench 基准套件提取的 2,398 个测试提醒进行评价。为生成这些提醒,他们取构成 24 个 MiBench 基准的所有 713 个翻译单元,并从每一个单元生成未优化的 IR,然后将它们格式化为提醒。如果生成的提醒超过 15k tokens,他们运用 llvm-extract 将代表该翻译单元的 LLVM 模块分割成更小的模块,每一个函数一个,这导致 1,985 个提醒适合 15k token 上下文窗口,剩下 443 个翻译单元不适合。在计算机能分数时,他们对 443 个被排除的翻译单元运用 -Oz。表 10 总结了基准。

开发者狂喜!Meta最新发布的LLM Compiler,实现77%自动调优效率

结果。表 3 显示了所有模型在标记调优使命上的零样本机能。只有 LLM Compiler FTD 模型比 -Oz 有所改进,13B 参数模型略优于较小的模型,在 61% 的情况下生成比 -Oz 更小的目标文件。

开发者狂喜!Meta最新发布的LLM Compiler,实现77%自动调优效率

在某些情况下,模型生成的 pass 列表导致比 -Oz 更大的目标文件巨细。例如,LLM Compiler FTD 13B 在 12% 的情况下有退化。这些退化可以通过简单地编译次序两次来避免:一次运用模型生成的 pass 列表,一次运用 -Oz,然后选择产生最佳结果的 pass 列表。通过消除相对于 -Oz 的退化,这些 -Oz 备份分数将 LLM Compiler FTD 13B 相对于 -Oz 的总体改进提高到 5.26%,并使 Code Llama – Instruct 和 GPT-4 Turbo 相对于 -Oz 有适度的改进。图 6 显示了每一个模型在各个基准上的机能细分。

开发者狂喜!Meta最新发布的LLM Compiler,实现77%自动调优效率

 二进制巨细准确性。虽然模型生成的二进制巨细预测对实际编译没有影响,但研讨团队可以评价模型在预测优化前后的二进制巨细方面的机能,以了解每一个模型对优化的理解程度。图 7 显示了结果。

开发者狂喜!Meta最新发布的LLM Compiler,实现77%自动调优效率

LLM Compiler FTD 的二进制巨细预测与实际情况相关性良好,7B 参数模型对未优化和优化的二进制巨细分别达到了 0.083 和 0.225 的 MAPE 值。13B 参数模型的 MAPE 值相似,分别为 0.082 和 0.225。Code Llama – Instruct 和 GPT-4 Turbo 的二进制巨细预测与实际情况几乎没有相关性。研讨人员注意到,LLM Compiler FTD 对优化代码的错误略高于未优化代码。特别是 LLM Compiler FTD 偶尔有高估优化效果的趋势,导致预测的二进制巨细低于实际情况。

消融研讨。表 4 对模型在 500 个提醒的小型保留验证集上的机能进行了消融研讨,这些提醒来自与他们训练数据相同的分布 (但未在训练中运用)。他们在图 1 所示训练管道的每一个阶段进行标记调优训练,以比较机能。如图所示,反汇编训练导致机能从平均 5.15% 略微下降到 5.12%(相对于 -Oz 的改进)。他们还展示了用于生成第 2 节所述训练数据的自动调优器的机能。LLM Compiler FTD 达到了自动调优器 77% 的机能。

开发者狂喜!Meta最新发布的LLM Compiler,实现77%自动调优效率

 反汇编使命

 

方法。研讨团队评价 LLM 生成的代码在将汇编代码反汇编到 LLVM-IR 时的功能正确性。他们评价 LLM Compiler FTD 并与 Code Llama – Instruct 和 GPT-4 Turbo 进行比较,发现需要额外的提醒后缀才能从这些模型中提取最佳机能。

 

后缀提供了关于使命和预期输入格式的额外上下文。为评价模型的机能,他们将模型生成的反汇编 IR 来路降级回汇编。这使我们能够通过比较原始汇编与来路结果的 BLEU 分数来评价反汇编的准确性。从汇编到 IR 的无损完美反汇编将有 1.0 的来路 BLEU 分数 (精确匹配)。

 

数据集。他们运用从 MiBench 基准套件提取的 2,015 个测试提醒进行评价,取用于上述标记调优评价的 2,398 个翻译单元,生成反汇编提醒。然后他们根据最大 8k token 长度过滤提醒,允许 8k tokens 用于模型输入,剩下 2,015 个。表 11 总结了基准。

开发者狂喜!Meta最新发布的LLM Compiler,实现77%自动调优效率

结果。表 5 显示了模型在反汇编使命上的机能。

开发者狂喜!Meta最新发布的LLM Compiler,实现77%自动调优效率

LLM Compiler FTD 7B 的来路成功率略高于 LLM Compiler FTD 13B,但 LLM Compiler FTD 13B 具有最高的来路汇编准确性 (来路 BLEU) 和最频繁产生完美反汇编 (来路精确匹配)。Code Llama – Instruct 和 GPT-4 Turbo 在生成语法正确的 LLVM-IR 方面存在困难。图 8 显示了所有模型的来路 BLEU 分数分布。

开发者狂喜!Meta最新发布的LLM Compiler,实现77%自动调优效率

消融研讨。表 6 对模型在 500 个提醒的小型保留验证集上的机能进行了消融研讨,这些提醒取自之前运用的 MiBench 数据集。

开发者狂喜!Meta最新发布的LLM Compiler,实现77%自动调优效率

他们在图 1 所示训练管道的每一个阶段进行反汇编训练,以比较机能。来路率在通过整个训练数据堆栈时最高,并随每一个训练阶段持续下降,尽管来路 BLEU 在每一个阶段变化不大。

 

 基础模型使命

 

方法。该研讨团队在下一个 token 预测和编译器模拟两个基础模型使命上对 LLM Compiler 模型进行消融研讨。他们在训练管道的每一个阶段进行这种评价,以了解为每一个连续使命训练如何影响机能。对于下一个 token 预测,他们在所有优化级别的 LLVM-IR 和汇编代码的小样本上计算困惑度。他们运用两个指标评价编译器模拟:生成的 IR 或汇编代码是否编译,以及生成的 IR 或汇编代码是否与编译器产生的完全匹配。

 

数据集。对于下一个 token 预测,他们运用从与我们训练数据相同分布但未用于训练的小型保留验证数据集。他们运用混合的优化级别,包括未优化代码、用 -Oz 优化的代码和随机生成的 pass 列表。对于编译器模拟,他们运用从 MiBench 生成的 500 个提醒进行评价,这些提醒运用第 2.2 节描述的方式随机生成的 pass 列表。

 

结果。表 7 显示了 LLM Compiler FTD 在所有训练阶段在两个基础模型训练使命 (下一个 token 预测和编译器模拟) 上的机能。下一个 token 预测机能在 Code Llama 之后急剧上升,后者几乎没有见过 IR 和汇编,并在随后的每一个微调阶段略有下降。

开发者狂喜!Meta最新发布的LLM Compiler,实现77%自动调优效率

对于编译器模拟,Code Llama 基础模型和预训练模型表现不佳,因为它们没有在这个使命上训练过。在编译器模拟训练之后直接达到最高机能,其中 LLM Compiler FTD 13B 生成的 95.6% 的 IR 和汇编可以编译,20% 与编译器完全匹配。在进行标记调优和反汇编微调后,机能下降。

 

软件工程使命

 

方法。虽然 LLM Compiler FTD 的目的是为代码优化提供基础模型,但它建立在为软件工程使命训练的基础 Code Llama 模型之上。为评价 LLM Compiler FTD 的额外训练如何影响代码生成的机能,他们运用与 Code Llama 相同的基准套件,评价 LLM 从自然语言提醒生成 Python 代码的能力,如「编写一个函数,找出可以从给定的对集合形成的最长链。」

 

数据集。他们运用 HumanEval 和 MBPP 基准,与 Code Llama 相同。

 

结果。表 8 显示了从 Code Llama 基础模型开始的所有模型训练阶段和模型巨细的贪婪解码机能 (pass@1)。它还显示了模型在 pass@10 和 pass@100 上的分数,这些分数是用 p=0.95 和 temperature=0.6 生成的。每一个以编译器为中心的训练阶段都导致 Python 编程能力略有退化。在 HumanEval 和 MBPP 上,LLM Compiler 的 pass@1 机能最多下降 18% 和 5%,LLM Compiler FTD 在额外的标记调优和反汇编微调后最多下降 29% 和 22%。所有模型在这两个使命上仍然优于 Llama 2。

开发者狂喜!Meta最新发布的LLM Compiler,实现77%自动调优效率

局限性

 

Meta 研讨团队已经展示了 LLM Compiler 在编译器优化使命上表现良好,并且相比先前的工作,对编译器表示和汇编代码的理解有所改进,但仍存在一些局限性。主要限制是输入的有限序列长度 (上下文窗口)。

LLM Compiler 支持 16k tokens 的上下文窗口,但次序代码可能远远超过这个长度。例如,当格式化为标记调优提醒时,67% 的 MiBench 翻译单元超过了这个上下文窗口,如表 10 所示。

开发者狂喜!Meta最新发布的LLM Compiler,实现77%自动调优效率

为了缓解这一问题,他们将较大的翻译单元拆分为单独的函数,尽管这限制了可以执行的优化范围,而且仍有 18% 的拆分翻译单元对模型来说太大,无法作为输入接受。研讨人员正在采用不断增加的上下文窗口,但有限的上下文窗口仍然是 LLM 的一个普遍问题。

 

第二个限制,也是所有 LLM 的共同问题,是模型输入的准确性。建议 LLM Compiler 的用户运用特定于编译器的评价基准来评价他们的模型。鉴于编译器并非无 bug,任何建议的编译器优化都必须经过严格测试。当模型反编译汇编代码时,其准确性应通过来路、人工检查或单元测试来确认。对于某些应用,LLM 生成可以被限制在正则表达式内,或与自动验证相结合以确保正确性。

参考链接:

https://x.com/AIatMeta/status/1806361623831171318https://ai.meta.com/research/publications/meta-large-language-model-compiler-foundation-models-of-compiler-optimization/?utm_source=twitter&utm_medium=organic_social&utm_content=link&utm_campaign=fair

给TA打赏
共{{data.count}}人
人已打赏
应用

效率翻倍!6 款不容错过的免费 AI 神器(七)

2024-7-1 8:02:32

应用

打开文心大模型,一看全是生产力

2024-7-1 11:00:00

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
今日签到
搜索