大模型推理显存优化系列(4):eLLM-大模型推理中的弹性显存管理和优化

简介: 本文简要介绍eLLM相关技术挑战、总体设计和初步性能评估

文章作者:徐家乐 张锐 赵军平。

系列文章回顾⬇️

大模型推理显存优化系列(1):vTensor

大模型推理显存优化系列(2):LayerKV

大模型推理显存优化系列(3):FlowMLA——面向高吞吐的DP MLA零冗余显存优化

    简介

    显存管理是大模型推理高效、规模化部署的关键技术之一。蚂蚁集团ASystem团队联合上海交通大学研发的eLLM,挖掘激活与KV cache的动态管理机会,通过弹性显存管理技术实现可用显存的显著提升,在典型模型和显存受限场景下,相比基线方案(基于vLLM)实现3x batch增加和2.3x decode吞吐提升。方案精度无损,无需微调等额外操作。

    以下简要介绍eLLM相关技术挑战、总体设计和初步性能评估,完整的技术报告见以下论文链接。

    显存管理挑战

    显存需求

    随着模型架构发展、长上下文包括思维链等新场景推广,显存需求构成悄然发生一些变化:

    • 模型架构创新:DeepSeek MLA、GLA(Group Latent Attn,Tri Dao等,参考文献[2])、混合线性等通过更高效KV cache设计显著降低了KV用量。例如Jamba-52B仅需2块GPU支持200K上下文,其中激活与KV cache用量接近1:1。
    • 上下文扩展:上下文长度从2K扩展至200K时,prefill阶段激活内存占比从0.3%跃升至30.8%;而如果是短输入、长思维链,prefill阶段的激活显存在decode阶段无法被使用。
    • KV轻量化:针对KV的各种量化、压缩、稀疏探索层出不穷,而激活由于outlier的存在普遍难以轻量化。


    图1:典型推理显存构成(A100部署,vLLM)

    以上因素叠加促使我们重新关注显存的总体优化,特别是考虑当前主流的推理框架由于一些设计或实现的限制,导致了显存资源事实上的浪费(抛个观点“闲置即浪费”,浪费的单位是 GB * msec,即容量x时间,时间以毫秒计),轻易放弃了优化压榨的机会。

    显存管理不足

    当前vLLM、SGLang等主流框架经过了充分改进,取得了广泛普及。不过显存管理方面仍存在一些不足:

    • 碎片化管理:模型权重、KV cache和激活三分天下,在框架启动时静态圈了3个小池子,互不通用。尤其是KV和激活,随不同模型、负载或SLO等存在更多动态性和潜在流通性。可惜,他们被碎片化的隔离了。
    • 激活显存闲置:框架按prefill阶段所需的最大激活显存所预留的显存小池子,到了decode阶段由于激活需求降低了10^3~10^4倍基本在闲置(decode每次1个token,相比Prefill输入1K ~ 32K ctx,降低了1K ~ 32K倍),即使随生成变长,KV cache压力变大,进而触发了recompute/offload等兜底手段在拼命换气,一旁的激活显存仍在躺平。系统缺乏显存的全局、动态调度机制。
    • chunk prefill的限制:chunk prefill可显著降低激活显存的占用(特别是prefill阶段),不过也存在一些限制:1)对一些模型不支持,例如至评测时不支持混合线性模型Jamba;2)影响TTFT指标。


    图2:当前框架显存管理的局限和浪费优化机会

    进一步,以vLLM为例,简单说明下主流框架的静态显存划分和管理策略:

    • 总体逻辑:框架启动后先分配模型权重显存,再按启动参数估算激活内存(为prefill留够激活,prefill进行中不能OOM),剩余空间分配给KV cache。激活值由PyTorch的CUDACachingAllocator管理,KV cache则预分配为torch.Tensor。
    • 隔离性弊端:静态划分的3类对象池不利于基于负载、SLO的动态显存,容易引起部分显存闲置。

    图3:显存管理对比示意

    eLLM设计

    总体架构

    eLLM采用三层架构设计:

    1.虚拟张量抽象层:解耦逻辑地址与物理资源,为弹性管理奠定技术基础。

    2.弹性内存机制:通过映射重分配实现激活/KV cache的动态空间调整,结合CPU内存作为弹性缓冲。

    3.轻量级调度策略:基于服务等级目标(SLO)实现资源分配与性能的动态权衡。


    图4:eLLM总体架构

    image.gif

    图5:vLLM和优化后eLLM的显存构成对比

    eTensor对象

    eTensor对象是扩展的PyTorch Tensor对象,保留现有接口,内部封装GPU虚拟内存管理(基于CUDA VMM API)弥合激活值与KV cache的抽象层差距:

    • 双张量类型设计
    • KV eTensor:预分配与上下文等长的连续的虚拟地址空间,物理内存按需分配。
    • 激活eTensor:支持非均匀虚拟地址段,适配小粒度、高频访问特性。
    • 地址对齐策略:虚拟地址段(张量槽)与物理内存块粒度严格对齐,平衡访问效率与碎片控制。

    图6:eTensor对象和显存池

    弹性显存分配

    设计了tensor对象的动态扩、缩操作,打通KV cache和激活显存各自领地:

    • 扩张(Inflation,KV cache扩容):
    1. 检测KV内存不足时向激活池发出借用请求;
    2. 激活池通过轻量级GC回收非活跃内存块;
    3. 逻辑转移内存所有权至KV池;
    4. VMM动态映射至目标KV eTensor地址空间。
    • 收缩(deflation):逆向执行膨胀流程,采用惰性避免开销


    图7:弹性显存扩缩示意

    PD感知调度

    针对推理Prefill、decode阶段特性优化资源分配:

    • prefill阶段:KV cache卸载至CPU缓冲区,释放GPU空间处理激活数据和放入更多新请求(降低排队耗时);
    • decode阶段:激活内存需求骤降,将KV cache重新加载至GPU,利用膨胀机制扩大批量处理能力;
    • 工程优化:采用层级KV cache传输机制,降低CPU-GPU数据迁移开销。

    image.gif

    SLO感知弹性缓冲

    通过逻辑缓冲区动态平衡TTFT与TPOT指标诉求:

    • 动态缓冲区抽象:在固定物理容量内动态调整逻辑可用空间,避免数据逐出;
    • 违规响应算法:
    • TPOT超标时缩小缓冲区,限制prefill请求;
    • TTFT超标时扩大缓冲区,优化首响应延迟;
    • 自适应调节:通过5次迭代窗口内的违规次数触发调整,因子α=2控制调整速率。

    eLLM结果对比

    测试环境

    • 基线方案:基于vLLM-0.5.5构建三组对比:
    • vLLM:标准实现;
    • vLLM-CP:开启chunked-prefill后的vLLM框架;
    • eLLM:本项目的实现方法。
    • 评测模型:
    • 在线服务:Llama3-8B-262K(最大上下文262K);
    • 离线推理:Llama3-8B-262K与Jamba-Mini。
    • 数据集:
    • 在线:32K-2K、2K-2K合成负载,ShareGPT真实对话;
    • 离线:8K-2K、16K-2K、32K-4K、128K-4K合成负载。

    在线推理性能

    Llama3-8B在单A100(80GB)GPU的测试表明:

    • TTFT优化:2K-2K负载下,eLLM相比vLLM和vLLM-CP分别实现295倍和140倍的首字加速。收益主要来自PD感知显存调度、基线由于显存不足,排队时间过长(更详细分析参考另一篇工作LayerKV[3])。
    • 弹性机制优势:vLLM-CP仅通过预留激活内存缓解KV压力,eLLM则结合GPU内弹性与GPU-CPU协同,在高并发场景下保持性能稳定;
    • 批量处理增益:eLLM支持更大decode批次,输出性能提升显著。


      image.gif

    图8:在线推理评测对比

    离线推理优化

    Jamba-Mini在不同负载下的吞吐表现:eLLM实现最大batch提高至3x,带来总吞吐与decode吞吐分别提升1.8x和2.3x。

    • vLLM对混合线性模型不支持chunk prefill,导致Jamba模型因激活/KV占比更高,eLLM的弹性策略效果更显著。
    • 输入序列增长时,eLLM通过内存借调维持大批次处理,避免vLLM的性能陡降。

    image.gif

    图9:离线推理性能评测

    参考

    [1] eLLM: https://arxiv.org/abs/2506.15155

    [2] GLA: https://arxiv.org/abs/2505.21487

    [3] LayerKV: https://arxiv.org/abs/2410.00428

    相关文章
    |
    15天前
    |
    负载均衡 测试技术 调度
    大模型分布式推理:张量并行与流水线并行技术
    本文深入探讨大语言模型分布式推理的核心技术——张量并行与流水线并行。通过分析单GPU内存限制下的模型部署挑战,详细解析张量并行的矩阵分片策略、流水线并行的阶段划分机制,以及二者的混合并行架构。文章包含完整的分布式推理框架实现、通信优化策略和性能调优指南,为千亿参数大模型的分布式部署提供全面解决方案。
    266 4
    |
    28天前
    |
    机器学习/深度学习 缓存 监控
    大模型推理优化技术:KV缓存机制详解
    本文深入探讨了大语言模型推理过程中的关键技术——KV缓存(Key-Value Cache)机制。通过对Transformer自注意力机制的分析,阐述了KV缓存的工作原理、实现方式及其对推理性能的显著优化效果。文章包含具体的代码实现和性能对比数据,为开发者理解和应用这一关键技术提供实践指导。
    571 8
    |
    29天前
    |
    存储 人工智能 NoSQL
    AI大模型应用实践 八:如何通过RAG数据库实现大模型的私有化定制与优化
    RAG技术通过融合外部知识库与大模型,实现知识动态更新与私有化定制,解决大模型知识固化、幻觉及数据安全难题。本文详解RAG原理、数据库选型(向量库、图库、知识图谱、混合架构)及应用场景,助力企业高效构建安全、可解释的智能系统。
    |
    3月前
    |
    负载均衡 并行计算 异构计算
    大模型训练推理优化(5): FlexLink —— NVLink 带宽无损提升27%
    本期我们将介绍蚂蚁集团ASystem团队在大模型通信优化上的新工作FlexLink,旨在通过动态聚合多路通信(NVLink,PCIe,RDMA),在H800等典型硬件上将典型通信算子如(AllReduce, All Gather)吞吐提升最高达27%,尤其适合大模型长序列推理(Prefill阶段),及训练等通信密集的带宽bound场景。方案对精度无影响。
    |
    26天前
    |
    机器学习/深度学习 缓存 自然语言处理
    【万字长文】大模型训练推理和性能优化算法总结和实践
    我们是阿里云公共云 AI 汽车行业大模型技术团队,致力于通过专业的全栈 AI 技术推动 AI 的落地应用。
    906 38
    【万字长文】大模型训练推理和性能优化算法总结和实践
    |
    25天前
    |
    机器学习/深度学习 存储 并行计算
    大模型推理加速技术:FlashAttention原理与实现
    本文深入解析大语言模型推理加速的核心技术——FlashAttention。通过分析传统注意力机制的计算瓶颈,详细阐述FlashAttention的IO感知算法设计、前向反向传播实现,以及其在GPU内存层次结构中的优化策略。文章包含完整的CUDA实现示例、性能基准测试和实际部署指南,为开发者提供高效注意力计算的全套解决方案。
    234 10
    |
    23天前
    |
    监控 算法 测试技术
    大模型推理服务优化:动态批处理与连续批处理技术
    本文系统阐述大语言模型推理服务中的关键技术——动态批处理与连续批处理。通过分析传统静态批处理的局限性,深入解析动态批处理的请求调度算法、内存管理策略,以及连续批处理的中断恢复机制。文章包含完整的服务架构设计、核心算法实现和性能基准测试,为构建高性能大模型推理服务提供全面解决方案。
    168 3
    |
    24天前
    |
    机器学习/深度学习 存储 缓存
    大模型推理加速技术:PagedAttention原理与实现
    本文深入解析大语言模型推理中的革命性技术——PagedAttention,该技术是vLLM推理引擎的核心创新。通过将操作系统中的虚拟内存分页概念引入注意力机制,PagedAttention有效解决了KV缓存的内存碎片问题,实现了近乎零浪费的KV缓存管理。文章详细阐述其原理、内存管理机制、实现细节,并提供完整的代码示例和性能分析。
    154 1
    |
    2月前
    |
    机器学习/深度学习 算法 数据可视化
    从零开始训练推理模型:GRPO+Unsloth改造Qwen实战指南
    推理型大语言模型兴起,通过先思考再作答提升性能。本文介绍GRPO等强化学习算法,详解其原理并动手用Qwen2.5-3B训练推理模型,展示训练前后效果对比,揭示思维链生成的实现路径。
    321 2
    从零开始训练推理模型:GRPO+Unsloth改造Qwen实战指南

    热门文章

    最新文章