大语言模型推理系统综述

摘要
近年来,随着 ChatGPT 等服务推动大语言模型(LLM)的快速普及,一批专门面向 LLM 推理的系统相继涌现,如 vLLM、SGLang、Mooncake 和 DeepFlow。这些系统设计工作的核心动因是 LLM 请求处理过程中所特有的自回归特性,该特性促使研究者提出多种新技术,以在应对高吞吐量与高并发负载的同时,兼顾推理性能与结果质量。尽管相关技术在文献中已有广泛讨论,但尚未在完整推理系统的框架下进行系统性分析,现有系统之间也缺乏深入的对比与评估。

本综述系统梳理了上述技术,内容涵盖从请求处理所涉及的算子与算法出发,逐步延伸至模型优化与执行相关技术(包括算子内核设计、批处理机制与调度策略),最后探讨内存管理方面的方法,例如分页内存、淘汰与卸载策略、量化和缓存持久化。通过上述分析,我们指出这些技术在本质上依赖于负载预测、自适应机制与成本优化,以克服自回归生成所带来的挑战,并实现系统设计目标。随后,我们进一步探讨了如何将这些技术组合构建单副本与多副本推理系统,其中包括资源解耦型推理系统(disaggregated inference systems),它们可实现更灵活的资源分配,以及可部署于共享硬件基础设施上的无服务器系统(serverless systems)。最后,我们讨论了该领域仍然面临的若干关键挑战。

1 引言
自从序列生成任务从循环神经网络(RNN)转向 Transformer 架构以来 [97],大语言模型(LLM)的质量已显著提升,使其能够胜任各类任务,包括通用交互式问答 [9]、文档摘要与分类 [96]、语言翻译 [27]、代码生成 [16]、数据整理 [72] 以及非结构化数据分析 [100]。这一技术突破推动了 LLM 在工业界和消费市场的指数级增长,ChatGPT、Gemini、Claude、Grok、Kimi 和 DeepSeek 等服务的迅速普及也对高性能模型服务系统提出了更高要求。

为了满足这一需求,研究者开发了专门的 LLM 推理系统,用于管理模型执行的各个方面。这不仅包括基本的 LLM 推理流程,还涵盖系统层面的负载均衡、任务批处理、调度策略以及内存管理等,借鉴了早期高吞吐量、高速数据处理系统的设计经验。然而,由于基于 Transformer 的 LLM 推理具有自回归生成这一独特特性,导致上述各方面均需采用新技术进行改造。

与传统数据处理系统通过单次执行一系列算子完成请求处理不同,LLM 推理通常需要多轮执行,次数与输出长度成正比。每个请求的输入形式都是文本字符串,输出长度则以非确定性的方式依赖于文本内容。由于用户可以输入任意内容,几乎无法定义“典型”的输出长度,因此请求处理成本(尤其是内存成本)在不同请求之间可能出现极大差异,即使它们的输入表面上相似1。

这种输出的根本非确定性为 LLM 推理系统带来了三大关键挑战:(1)尽管近期取得了显著进展,但模型输出的质量(即输出是否满足请求表达的任务目标)仍无法保证,因为其生成过程基于随机采样而非确定性数据构建;(2)执行轮数的不确定性使得每个请求的最终内存使用量难以预估,给多请求并发处理带来分配难题;(3)同样地,请求处理所需时间也不可预知,因此在设计批处理与调度策略时,必须考虑如何避免“拖后腿请求”(straggler)与“队头阻塞”(head-of-line blocking)等问题。

为应对上述挑战,LLM 推理系统采用了一系列贯穿前端与运行时的技术策略,如图 1 所示。为了提升推理质量,系统支持包括 beam search、思维树(Tree-of-Thoughts)、思维图(Graph-of-Thoughts)与自一致性(self-consistency)等多种序列生成方法(图 1(c)),还结合多种提示工程技巧。同时,前端设计也趋于多样化,以简化用户交互流程(图 1(a)),支持如自动提示优化与受控输出生成(图 1(b))等功能,从而减轻提示设计与流程协调的负担。

为了适应动态内存需求,推理系统使用基于页的块式内存分配策略,辅以缓存持久化与量化技术,以降低整体内存消耗(图 1(g))。而面对动态请求生命周期,系统依赖基于负载预测机制的动态任务调度、动态批处理与灵活负载均衡策略(图 1(d, e)),并通过专用算子与高效内核实现来降低总体推理成本(图 1(f, h))。

本综述将在一个完整推理系统的框架下系统性地讨论这些技术。在第 2 节中,我们介绍实现高质量 LLM 推理所需的基本算子与序列生成算法;第 3 节聚焦批处理与调度技术,以及面向专用硬件的高效内核设计;第 4 节则讨论内存管理策略,包括页式内存、支持请求抢占与长上下文的淘汰与卸载机制、量化方法,以及缓存持久化与重建技术。随后在第 5 节,我们探讨如何将上述技术整合,构建当前主流的 LLM 推理系统,包括部署单个模型副本的系统与支持多副本请求调度的系统,后者特别适用于构建具备资源解耦能力的系统架构,可更灵活地进行硬件资源分配。

相关综述工作
虽然已有一些综述涵盖文中提及的部分技术,但多数研究是在缺乏完整系统框架的前提下对这些技术进行孤立讨论。例如,[47, 54, 116, 139] 涉及稀疏注意力、专家混合(MoE)、解码策略、KV 缓存管理和量化技术等,但均未将其置于系统整体架构中加以讨论。[55] 从 KV 缓存管理的角度对若干技术进行了分类总结。[15] 等则主要关注模型架构方面,如模型剪枝、知识蒸馏与量化等优化技术。[48] 更专注于提升推理质量的方法。因此,本文的独特贡献在于将这些技术系统化地整合进完整推理系统设计中,并探讨它们在实际部署中的协同作用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/87144.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/87144.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

用Firecrawl轻松获取网站数据,提升AI应用的效率!

🔥 Firecrawl:助力AI应用的强大工具! 在数字化信息爆炸的时代,如何高效地从海量网页中提取有用数据变得尤其重要。Firecrawl的问世,为我们揭开了一种便捷的方法来应对这一挑战。它不仅能够将整个网站的数据转化为适用…

【王阳明代数讲义】谷歌编程智能体Gemini CLI 使用指南、架构详解与核心框架分析

Gemini CLI 使用指南、架构详解与核心框架分析 Gemini CLI 使用指南、架构详解与核心框架分析Gemini CLI 使用指南Gemini CLI 架构详解Gemini CLI 核心框架总结 Gemini CLI 使用指南、架构详解与核心框架分析 Gemini CLI 使用指南 1. 安装与配置 环境要求: Node.…

camera调试:安卓添加xml注册

对接安卓的平台时,需要注册对应的camera设备,供安卓标准api进行操作,rk的平台需要在HAL层配置camera3_profiles.xml文件,适配驱动的信息,进行注册camera设备。该xml对应的内容很多,很多CTS测试问题都是该文…

使用 Ansys Discovery 为初学者准备几何结构

介绍 设计几何体通常会包含一些特征,使其无法直接导入我们的仿真工具,例如 Ansys Mechanical、LS-DYNA、Fluent 等。有些干扰或错位虽然适合制造,但在我们的仿真工具中却会造成问题。有时,一些小特征(例如孔或圆角&am…

推客系统全栈开发指南:从架构设计到商业化落地

一、推客系统概述 推客系统(TuiKe System)是一种结合社交网络与内容分发的创新型平台,旨在通过用户间的相互推荐机制实现内容的高效传播。这类系统通常包含用户关系管理、内容发布、智能推荐、数据分析等核心模块,广泛应用于电商…

大数据开发实战:如何做企业级的数据服务产品

1.背景 数据服务通常以解决方案的形式进行组织,面向一个应用场景的所有数据需求或数据内容可以通过一个解决方案进行封装,统一对外服务。一个数据需求或数据接口以一个数据服务实例的形式存在于解决方案之下。 下游消费方可以通过统一API进行数据消费&…

基于IndexTTS的零样本语音合成

IndexTTS 项目采用模块化设计,将 BPE 文本编码、GPT 单元预测、dVAE 语音特征抽取和 BigVGAN 音频生成串联为完整的语音合成流程。系统通过统一的配置文件和模型目录规范,实现高效的文本到语音转换,支持命令行与 Web 界面双模式操作&#xff…

基于go-zero的短链生成系统

go-zero框架 gozero(又称go-zero)是一款由知名开发者kevwan设计的Golang微服务框架,专注于高性能、低延迟和易用性。其核心目标是简化分布式系统的开发,提供开箱即用的工具链,涵盖API网关、RPC服务、缓存管理、数据库…

Linux-修改线上MariaDB服务端口号

准备工作(很重要!!!): 提前做好Linux服务器快照 提前做好数据库数据备份 1. 修改配置文件 首先,我们需要找到MariaDB的配置文件。通常情况下,这个文件位于以下位置:…

Spring Cloud 微服务(负载均衡策略深度解析)

📌 摘要 在微服务架构中,负载均衡是实现高可用、高性能服务调用的关键机制之一。Spring Cloud 提供了基于客户端的负载均衡组件 Ribbon,结合 Feign 和 OpenFeign,实现了服务间的智能路由与流量分配。 本文将深入讲解 Spring Clo…

HTML/CSS基础

1.html:超文本标记语言。它是一种标识性的语言,非编程语言,不能使用逻辑运算。通过标签将网络上的文本格式进行统一,使用分散网络资源链接为一个逻辑整体,属于标记语言。 超文本:就是指页面内可以包含图片&#xff0…

C# 事件驱动编程的核心:深度解析发布者_订阅者模式

适用场景:GUI交互、消息队列、微服务通信等需要解耦事件生产与消费的系统 🧩 模式核心组件解析 发布者(Publisher) 作用:定义事件并管理订阅者列表关键行为: 提供和-运算符注册/注销订阅者通过Invoke()方…

华为云Flexus+DeepSeek征文 | 从零开始搭建Dify-LLM应用开发平台:华为云全流程单机部署实战教程

华为云FlexusDeepSeek征文 | 从零开始搭建Dify-LLM应用开发平台:华为云全流程单机部署实战教程 前言一、华为云Dify-LLM平台介绍1. Dify-LLM解决方案简介2. Dify-LLM解决方案地址3. Dify-LLM单机架构介绍4. 预估成本说明 二、华为云Maas平台介绍1. 华为云ModelArts …

oracle集合三嵌套表(Nested Table)学习

嵌套表 嵌套表(Nested Table)是Oracle中的一种集合数据类型,它允许在表中存储多值属性,类似于在表中嵌套另一个表。 嵌套表具有以下特点: 是Oracle对象关系特性的一部分 可以看作是一维数组,没有最大元素数量限制 存储在单独…

Python学习之——单例模式

Python学习之——单例模式 参考1 利用__metaclass__实现单例super的用法class Singleton(type)元类 2 重载__new__方法实现单例模式3 利用装饰器实现单例考虑一个类如果继承一个单例类的问题 参考 python之metaclasssingleton(一) python之metaclasssin…

【Linux】U-boot常用命令总结

U-Boot 是嵌入式系统中常用的引导加载程序(bootloader),它提供了一套命令行接口,用于调试、加载操作系统镜像以及进行硬件测试等操作。 1、变量操作命令 这些命令用于管理 U-Boot 的环境变量。 命令功能说明setenv name value设…

【Linux】不小心又创建了一个root权限账户,怎么将它删除?!

一.前言 今天在学习linux提权的时候,把新建的一个普通账户权限提升成了root, 当我练习完提权,想要把这个账户删掉的时候。 发现… 好家伙,这个根本删不掉 随后试了各种各样的方法,都不行,后来突然想到是否…

数据结构:数组(Array)

目录 什么是数组(Array)? 🔍为什么数组的下标要从 0 开始? 一、内存地址与偏移量的关系:从 0 开始是最自然的映射 二、指针的起点就是第 0 个元素的地址 三、历史原因:BCPL → B → C → …

视频内存太大怎么压缩变小一点?视频压缩的常用方法

视频传生活或者工作中很常见,如发送视频邮件、在线视频播放、视频上传下载等。未压缩的大内存视频文件传输时,不仅会消耗大量的网络带宽资源,还会使传输时间大幅增加。在网速有限的情况下,发送一个几 GB 的未压缩视频可能需要数小…

性能测试包括哪些方面?要掌握哪些知识

性能测试是软件测试中的一个重要方面,它主要关注软件在不同条件下的稳定性、可靠性和性能表现。性能测试包括多个方面,需要掌握的知识也相对广泛。以下是对性能测试包括的方面以及需要掌握的知识分析: 一、性能测试包括的方面 响应时间&…