An LLM Compiler for Parallel Function Calling

TL;DR

提出LLMCompiler,实现多工具并行调用,提升速度至3.7倍,成本降低6.7倍。

cs.CL 🔴 高级 2023-12-08 43 次浏览
Sehoon Kim Suhong Moon Ryan Tabrizi Nicholas Lee Michael W. Mahoney Kurt Keutzer Amir Gholami
大规模语言模型 函数调用优化 并行计算 编译技术 效率提升

核心发现

方法论

LLMCompiler借鉴传统编译原理,设计了三大核心组件:函数调用规划器(Function Calling Planner)用于生成任务依赖图;任务调度单元(Task Fetching Unit)负责任务的并行调度;执行器(Executor)实现任务的异步执行。通过自动生成优化的调用序列,有效减少延迟和成本。该框架支持多模型、多任务场景,结合LLMs的推理能力,自动识别任务依赖关系,构建有向无环图(DAG),实现多工具的并行调用。实验中在HotpotQA、Movie Recommendation、ParallelQA和WebShop等数据集上,性能优于ReAct,平均速度提升最大达3.7倍,成本节省最高6.7倍,准确率提升约9%。

关键结果

  • 在HotpotQA和Movie Recommendation任务中,LLMCompiler实现了1.8×和3.7×的延迟加速,成本降低至原来的1/3至1/6,显著优于传统串行调用方案。
  • 在复杂依赖场景的ParallelQA和动态重规划任务中,速度提升达2.27倍,成本降低4.65倍,准确率提升9%,验证了其在多样化任务中的适应性。
  • 结合开源LLaMA-2模型,LLMCompiler实现了开放模型的并行调用能力,展现出良好的扩展性和实用价值。

研究意义

该研究突破了LLMs在多工具调用中的串行瓶颈,提出了基于编译原理的并行调度框架,极大提升了推理效率和成本效益。其在复杂推理、多任务调度和动态重规划方面的能力,为未来大规模AI系统的高效部署提供了技术基础,有望推动智能助手、自动问答和决策支持等应用的广泛发展。

技术贡献

创新点在于引入编译器优化思想,设计了任务依赖自动识别与调度机制,实现多工具的并行调用。提出的三组件架构(规划器、调度单元、执行器)支持动态重规划和多模型协作,显著优于现有串行或半并行方案。该框架兼容开源和闭源模型,为大规模多任务推理提供了可扩展的工程解决方案。

新颖性

首次提出基于编译原理的LLM函数调用优化框架,实现任务依赖自动分析与并行调度。区别于ReAct等串行方案,LLMCompiler支持复杂依赖场景和动态重规划,具有开源兼容性和高效性,填补了大模型多工具调用中的技术空白。

局限性

  • 当前依赖于预定义的工具和示例,可能在未覆盖所有任务类型时表现有限。
  • 在极端复杂的依赖图或频繁动态重规划场景中,调度开销可能增加,影响整体性能。
  • 对硬件资源要求较高,尤其在大规模并行任务时,需优化调度策略以避免资源瓶颈。

未来方向

未来将探索自适应调度策略,提升在极端复杂依赖场景下的性能表现。还计划结合强化学习优化调度决策,扩展多模型协作能力,并在实际工业场景中部署验证其可扩展性和鲁棒性。

AI 总览摘要

随着大规模语言模型(LLMs)在推理与内容生成中的突破,函数调用能力成为提升模型实用性的关键技术之一。传统方法如ReAct采用串行调用策略,导致高延迟和成本,限制了复杂任务的规模化应用。本文提出的LLMCompiler框架,借鉴经典编译器的优化思想,通过自动分析任务依赖关系,构建任务依赖图(DAG),实现多工具的并行调用。

LLMCompiler由三大核心组件组成:函数调用规划器(Function Calling Planner)负责生成任务依赖图;任务调度单元(Task Fetching Unit)根据依赖关系调度任务;执行器(Executor)异步执行任务,支持动态重规划。该架构能自动识别任务间的依赖关系,最大化并行度,显著降低延迟和成本。

在多个基准测试中,LLMCompiler表现优异。在HotpotQA和Movie Recommendation任务中,延迟分别提升1.8倍和3.7倍,成本降低至原来的1/3至1/6。在更复杂的ParallelQA和WebShop场景中,速度提升达2.27倍,成本节省4.65倍,准确率提升9%。此外,结合开源LLaMA-2模型,验证了其在开源模型中的适用性和扩展性。

该研究为大模型多工具调用提供了新的技术路径,突破了串行瓶颈,为未来智能系统的高效部署奠定基础。未来将优化调度策略,支持更复杂的动态场景,推动多模型协作与工业应用的广泛落地。

深度分析

研究背景

近年来,LLMs在自然语言理解和推理方面取得巨大进展,代表性工作包括GPT系列、LLaMA、PaLM等。早期工作多集中在单一任务的内容生成,但随着推理能力增强,函数调用成为扩展模型能力的重要手段。ReAct等框架引入了工具调用机制,提升了模型在多步骤推理中的表现。然而,现有方案多采用串行调用,导致延迟高、成本大,难以满足复杂场景的需求。近年来,学界开始关注多工具并行调用,但缺乏系统化的优化框架,限制了其实际应用。

核心问题

当前LLM多工具调用多采用串行方式,严重制约了推理速度和成本效率。复杂任务中的依赖关系难以自动识别,导致手动调度繁琐且低效。此外,动态任务依赖和重规划能力不足,限制了模型在复杂环境中的适应性。解决这些瓶颈,成为推动大模型实用化的关键。如何自动分析任务依赖、实现多工具的高效并行调度,成为亟待突破的技术难题。

核心创新

本研究提出基于编译器优化思想的LLMCompiler框架,创新点在于:

1)自动任务依赖分析:利用LLMs的推理能力,自动生成任务依赖图(DAG),无需人工干预;

2)多工具并行调度:设计调度单元,根据依赖关系实现任务的并行调度,最大化利用硬件资源;

3)动态重规划:支持中途根据中间结果调整任务依赖,增强模型的适应性;

4)跨模型兼容:支持开源和闭源模型,提升实用性。这些创新极大改善了传统串行方案的性能瓶颈。

方法详解

  • �� 任务依赖分析:利用LLMs,输入自然语言任务,自动生成任务依赖图(DAG),识别任务间的依赖关系。
  • �� 任务调度:调度单元根据DAG,优先调度无依赖的任务,利用贪心策略实现任务的并行执行。
  • �� 任务执行:执行器异步调用工具(API、函数、LLMs),存储中间结果,更新依赖任务的输入。
  • �� 动态重规划:在执行过程中,根据中间结果,重新生成任务依赖图,调整调度策略。
  • �� 支持多模型:框架兼容不同模型和工具,支持多任务、多场景部署。

实验设计

在HotpotQA、Movie Recommendation、ParallelQA和WebShop等数据集上,验证了LLMCompiler的性能。采用GPT-3.5-turbo和LLaMA-2 70B模型,比较串行ReAct和并行方案的延迟、成本和准确率。通过AB测试,验证调度算法的有效性,分析不同依赖复杂度对性能的影响。设置了多任务依赖场景,测试动态重规划能力。指标包括任务完成时间、资源消耗、准确率等。

结果分析

在HotpotQA和Movie Recommendation中,延迟分别降低到原来的55%和27%,成本降低至原来的30%和15%,准确率提升9%。在复杂依赖场景的ParallelQA中,速度提升达2.27倍,成本节省4.65倍,验证了框架在多样化任务中的适应性。结合开源模型,性能表现同样优异,显示出良好的扩展性。

应用场景

该框架适用于多任务推理、自动问答、知识图谱构建等场景。企业可以利用其提升多工具调用效率,降低成本,加快响应速度。未来还可结合强化学习优化调度策略,支持更复杂的动态环境,推动智能助手、自动化决策等行业应用。

局限与展望

目前依赖预定义工具和示例,可能在未覆盖所有任务类型时表现不足。复杂依赖图或频繁动态重规划时,调度开销增加。硬件资源需求较高,需优化调度算法以避免瓶颈。未来需增强自适应能力和鲁棒性,扩展多模型协作能力。

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

想象你在厨房做饭,手边有各种工具:锅、刀、搅拌器。每个工具都可以用来完成特定任务,比如切菜、煮汤、搅拌。传统做饭时,你可能会一个一个工具用,等一个任务完成再开始下一个,这样时间很长。现在,假如你能提前安排好所有任务的依赖关系,比如先切菜和煮汤可以同时进行,等都准备好后再搅拌。这个新方法就像是给厨房设计一套智能调度系统,能自动分析哪些步骤可以同时做,哪些必须依次完成,从而大大缩短做饭时间。LLMCompiler就像这个厨房调度系统,帮模型同时调用多个工具,节省时间和成本,让复杂任务变得更快更便宜。

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

想象你在学校里准备一个大项目,你需要查资料、写报告、做演示。以前,你可能会一个步骤一个步骤来:先查资料,等查完再写报告,然后做演示。这会花很长时间。而现在,如果你能提前安排好:查资料的任务可以同时进行,写报告和做演示也可以同时准备,只要资料查完了,其他任务就可以马上开始。这样一来,整个项目就能快很多。LLMCompiler就像这个聪明的项目管理者,它能帮模型同时调用不同的“工具”——比如搜索、计算、生成内容——让任务同时进行,节省时间和金钱。它还能根据中间结果调整计划,确保每一步都顺利完成,最终让复杂的任务变得简单又高效。

术语表

Directed Acyclic Graph (DAG)(有向无环图)

一种图结构,用于表示任务间的依赖关系,确保没有循环依赖。

用来描述任务调度中的依赖关系,确保任务按依赖顺序执行。

Function Calling Planner(函数调用规划器)

自动分析任务,生成任务依赖图,规划调用顺序。

核心组件,用于识别任务间的依赖关系。

Task Fetching Unit(任务调度单元)

根据依赖关系调度任务,支持并行执行。

实现任务的调度和依赖管理。

Executor(执行器)

异步调用工具,执行任务并存储中间结果。

完成具体任务的执行,支持动态重规划。

Parallel Function Calling(并行函数调用)

同时调用多个工具或模型,减少等待时间。

提升多任务处理效率的关键技术。

开放问题 这项研究留下的未解疑问

  • 1 如何在极端复杂依赖场景中保持调度效率?未来是否能实现完全自动化的任务依赖识别?这些问题仍待深入研究。

应用场景

近期应用

多任务推理平台

企业可利用该框架提升多工具调用效率,降低成本,加快响应速度,适用于自动问答、知识图谱等场景。

远期愿景

智能自动化系统

未来可发展为全自动化、多模型协作的智能系统,支持复杂动态环境中的任务调度,推动行业智能化升级。

原文摘要

The reasoning capabilities of the recent LLMs enable them to execute external function calls to overcome their inherent limitations, such as knowledge cutoffs, poor arithmetic skills, or lack of access to private data. This development has allowed LLMs to select and coordinate multiple functions based on the context to tackle more complex problems. However, current methods for function calling often require sequential reasoning and acting for each function which can result in high latency, cost, and sometimes inaccurate behavior. To address this, we introduce LLMCompiler, which executes functions in parallel to efficiently orchestrate multiple function calls. Drawing inspiration from the principles of classical compilers, LLMCompiler enables parallel function calling with three components: (i) a Function Calling Planner, formulating execution plans for function calling; (ii) a Task Fetching Unit, dispatching function calling tasks; and (iii) an Executor, executing these tasks in parallel. LLMCompiler automatically generates an optimized orchestration for the function calls and can be used with both open-source and closed-source models. We have benchmarked LLMCompiler on a range of tasks with different patterns of function calling. We observe consistent latency speedup of up to 3.7x, cost savings of up to 6.7x, and accuracy improvement of up to ~9% compared to ReAct. Our code is available at https://github.com/SqueezeAILab/LLMCompiler.

cs.CL