ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

【收藏】大模型推理性能优化全解析:服务层、推理引擎和模型量化三方面详解

【收藏】大模型推理性能优化全解析:服务层、推理引擎和模型量化三方面详解 前言优化大模型推理性能就是找一种平衡 —— 既要让 GPU 算得快、不闲着又要少占显存、少浪费带宽还得兼顾吞吐量和延迟的矛盾。服务层从调度入手Continuous Batching 作为调度员每生成一个 token 就调整批次让早结束的请求腾位置、新请求插队免得 GPU 空转流式生成边算边返回还能中途打断既让用户等得短又省了无效计算长序列推理则靠 “局部注意力”“状态向量” 等小聪明把 O (n²) 的计算量砍成 O (n×k)让模型能 “啃” 长文档还不费太多力。推理引擎层从效率入手KV-Cache 像记笔记存下历史计算结果避免重复劳动PagedAttention 学操作系统分页解决显存碎片问题让内存用得更透APC 则抓 “重复前缀”比如 100 个用户问同一篇财报它只算一次前缀的缓存剩下 99 次直接复用省了大半算力分布式并行TPPP“分工合作”把大模型拆给多卡干你算这部分我算那部分既装下大模型又提速算子融合则把零散的计算步骤捆成一团少读写显存、少启动 Kernel让数据在 GPU 里跑得更顺。模型量化层则是 “瘦身术”把 32 位浮点数压成 8 位甚至 4 位整数用点精度损失换显存减半、速度翻倍接着靠 SmoothQuant、GPTQ 这些技巧让 “瘦身后” 的模型依然能打。下面是这三个层面的详细阐述 一、服务层优化一Continuous Batching传统静态批处理比如以前用 Triton 的 Static Batching最大的浪费是 “token 级空转”—— 比如一批里有个请求只需要 5 个 token其他要 50 个那前 45 个 token 生成时这个请求早就结束了但 GPU 还得为它保留位置相当于占着坑不干活。 Continuous Batching 的关键是 “按推理步调度”每生成一个 token也就是走一步推理就重新排一次队把那些 Early-Finished早结束的请求踢出去腾位置再把新进来的 Late-Joining晚加入请求塞进来这样 GPU 的计算单元每一步都满负荷没有空档。但这里不是随便塞得处理好请求长度差异不然短请求会被长请求堵死所以现在大多会分 “长度桶”把差不多长度的请求放一个桶里调度减少调度出现碎片化长短不一导致的比如 100-200token 的放一桶200-300 的放另一桶各自调度互不干扰既保吞吐量又压延迟。Continuous Batching适合处理不同长度的prompt因为大模型推理时有的请求可能只需要5个token就完成有的可能需要50个传统批处理会为了最长的那个请求等很久而Continuous Batching可以实时调整让GPU一直在干活不闲着。 它在每次GPU推理的间隙也就是写完一个token的空档偷偷做点调度工作。系统会实时监控每个请求的进度一旦发现某个请求提前写完了Early-Finished就把它从当前批次中移除腾出位置给新来的请求。同时当新请求到达时Late-Joining它也能立即插入到当前批次中不需要等当前批次完成。二流式交互式生成再看流式交互式生成流式生成其实是 KV-Cache 在服务层的另一种应用它不只是 “边生成边反馈” 这么简单。传统非流式是等模型把所有 token 都算完再返回这里有两个大问题一是用户等得久二是 “资源占用长尾”1个要生成 100 个 token 的请求得占着 KV-Cache 整整 100 步期间其他请求进不来。流式生成 增量解码 中途打断生成一个 token 就返回一个同时把这个 token 对应的临时计算结果不是 KV-CacheKV-Cache 还得留着算下一个释放掉更重要的是用户能随时喊停比如模型生成到第 10 个 token用户觉得不对直接终止后面 90 步的计算就全省了这才是真的省资源。而且底层必须跟 KV-Cache 联动因为每一步只算当前 token得靠 KV-Cache 调出前面的历史信息不然每一步都得重算前面所有 token反而更慢。三长序列推理长序列推理这块痛点是传统 Transformer 的 Attention 计算是 O (n²)n 是序列长度n 从 1k 涨到 10k计算量直接从 1e6 飙到 1e8显存和算力都扛不住。所以所有长序列优化本质都是–如何在不丢关键信息的前提下把 O (n²) 降到 O (n) 或 O (nk)k 是某个小常数。 英伟达的 Star Attention它赌的是 “局部性假设”—— 当前 token 主要跟附近的 token 有关读文章时一句话里的词大概率只和前后几句关联不用跟开头的词扯关系。所以它分两阶段第一阶段把长序列切成小块每个块只算自己和前一个块的 Attention抓 “短期依赖”这一步计算量是 O (nk)k 是块大小第二阶段用全局 Attention 把所有块的结果拼起来抓 “长期依赖”但全局计算时只算块级的特征不是每个 token所以总量还是可控。比如 k512n10k计算量直接降 10 倍还能保住长距离关联。Star Attention 的两阶段计算第一阶段是 “局部注意力”把长序列切成大小为 k 的块。比如 n10000k512那大概能切成 10000÷512≈20 个块取整数方便算。每个块只关注 “自己内部的 token” 和 “前一个块的 token”抓短期依赖。每个块有 k 个 token前一个块也有 k 个所以每个 token 需要和 k自己块k前一个块2k 个 token 算注意力。那一个块的计算量就是k 个 token × 2k 次计算 2k²。20 个块的总计算量就是20 × 2k² 40k²。代入 k512就是 40×512×512≈1048 万次。第二阶段是 “全局注意力”抓长期依赖。这时候不细算每个 token 了而是给每个块提一个 “总结特征”比如用块内所有 token 的均值或最大值当代表20 个块就有 20 个总结特征。全局注意力就是这 20 个特征之间互相计算计算量是 20×20400 次和第一阶段比几乎可以忽略。所以 Star Attention 的总计算量≈第一阶段的 1048 万次 第二阶段的 400 次≈1048 万次。传统 Attention 是 1 亿次1 亿 ÷1048 万≈9.5差不多 10 倍壁仞的 “分段 状态向量” 更鸡贼状态向量其实是前一段的 “语义摘要”就像你读论文记段落大意不用记每句话后面段落基于大意算不用回头算每句话的 Attention。这里的关键是状态向量得小比如把前一段 1000 个 token 的 Attention 输出压缩成 256 维向量既省空间又能保留关键信息不然存状态向量也占显存。FlexPrefill 的 “动态调整范围” 是 “注意力稀疏化” 的变种它不是固定块大小而是靠一个轻量的 “语义分析器” 判断当前内容的 “密度”—— 遇到 “综上所述” 这种总结句就扩大 Attention 范围关联前面更多内容遇到 “例如” 这种举例句就缩小范围只关联前面的论点句这样比固定块更精准该省的省该保的保。“以存换算” 技术利用显存和磁盘存储把不常用的数据放到显存外需要时再调回来。我们先搞清楚 “存什么换什么”存的是不常用的 KV-Cache 或 Attention 权重换的是显存空间但得控制换入换出的延迟比如把前 1000 个 token 的 KV-Cache 放到 SSD但不能等要用了才调得提前预取到内存再从内存调到显存让 IO 和计算重叠不然 GPU 等数据会更慢。二、推理引擎优化一KV-Cache机制大模型推理的传统方法每次生成新token都要重新计算所有历史token的键值对就像每次写新句子都要重新读一遍前面所有内容这太浪费时间了。KV-Cache 你可能知道是存 K 和 V但为什么是 K 和 V不是 Q因为 Q 是当前 token 的查询每次都不一样没法存K 是历史 token 的 “键”特征标识V 是历史 token 的 “值”信息内容这俩是固定的生成新 token 时只需要用新 Q 去查旧 KV所以能存。而且 KV-Cache 的存储格式不太一样一般按注意力头拆分每个头的 KV 单独存这样后面做 TP张量并行时能直接把每个头的 KV 切分到不同 GPU不用跨卡传数据省通信量。还有动态扩容问题一开始不知道请求要生成多少 token不能预分配太大空间浪费也不能太小不够用要扩容拷贝数据费时间所以现在都用 “预分配小块 动态拼接”比如每个请求先给 64 个 token 的 KV 块不够了再追加内存碎片少扩容快。华为的 UCM 技术是 KV-Cache 的升级版搞 “三级缓存”热数据最近用的放显存温数据近期可能用的放内存冷数据很久不用的放 SSD还会跟踪每个 KV 块的访问频率比如 5 分钟没碰过就丢 SSD1 分钟内碰过就放内存这样既省显存又能通过预取减少调数据的延迟比如在当前计算快用完显存时提前把下一段需要的 KV 从 SSD 调到内存不让 GPU 等。二PagedAttentionPagedAttention 是解决 KV-Cache 的 “内存碎片化” 痛点传统 KV-Cache 要分配连续显存比如一个请求要 100 个 token得找一块 100token 的连续空间要是显存里有 10 个 10token 的空闲块也没法用只能等别的块释放。PagedAttention 学操作系统的内存分页把 KV-Cache 切成固定大小的 “页”比如每页存 64 个 token 的 KV一个请求的 KV 不用连续存分散在多个页里用 “页表” 记每个页的位置这样不管空闲页在哪数量够就能用彻底解决碎片化。比如一个请求要 100 个 token拿 2 个页6436第二个页只用 36 个位置就行不用管这俩页在显存的哪个角落。而且它还支持 “页共享”比如两个请求有相同的前缀比如都用同一段文档当上下文它们的前缀 KV 页能共享不用存两份这就跟后面的 APC 联动上了。淘汰策略也不是简单 LRU是 “引用计数 LRU”比如一个页被 3 个请求共享引用计数是 3只有所有请求都不用了计数归 0才会被淘汰不会误删共享页。三自动前缀缓存(APC)自动前缀缓存 (APC) 解决的是 “前缀重复计算” 的大坑比如 100 个用户问 “这份 2025 财报的利润是多少”“这份 2025 财报的营收是多少”前面都带相同的 1000 字财报前缀传统做法是每个用户都算一遍这 1000 字的 KV-Cache重复 100 次纯浪费。APC 的核心是 “前缀特征哈希 页共享”不是直接对 token 哈希而是对前缀对应的 KV 页特征做哈希比如把每个 KV 页的特征压缩成哈希值这样即使前缀略有不同比如 “2025 财报” 和 “2025 年度财报”也能匹配到相似 KV 页提高命中率。而且它能 “动态匹配子集”比如前缀 A 是 “财报第一章”前缀 B 是 “财报第一章第一节”APC 能认出 B 是 A 的子集直接共享 A 里第一节的 KV 页不用重算。vLLM 里的 APC 还跟请求队列绑在一起新请求进来先查哈希表有匹配的缓存就直接加载跳过最费算力的 prefill 阶段计算前缀 KV 的阶段直接进 decode 阶段生成回答 tokenprefill 阶段本来就占推理算力的 70% 以上所以 APC 一上吞吐量直接涨好几倍。另外APC 得处理 “缓存过期”比如财报更新了旧缓存就得删所以每个缓存块都有 “版本号” 和 “时间戳”文档一更新自动淘汰旧版本避免返回错数据。四分布式推理并行方案TP和PP这两种分布式推理并行方案其实是解决推理时人多力量大但又别抢着干活的问题。TP张量并行是把一个大蛋糕切成多块每块由不同的人负责切但最终要拼成一个完整的蛋糕。具体来说TP把模型的张量比如多头注意力中的每个头分散到多个GPU上每个GPU只负责一部分计算比如MHA并行就是把多头注意力的每个头切分到不同GPUKV缓存也跟着切分。这样当模型很大时单个GPU放不下TP就能把一个大计算任务拆成小块让多个GPU一起干活避免了单卡内存不足的问题而且还能同时处理KV缓存的切分让推理效率更高。PP流水线并行把整个模型按层切成多个阶段每个GPU负责一个阶段的计算就像生产线上的不同工位。比如第一层在GPU1上算算完后把结果传给GPU2算第二层GPU1空闲了又能接新任务。这样当请求量大时GPU1可以继续处理新请求而GPU2还在处理上一个请求的后续层大大减少了设备空闲时间。PP最厉害的是它通信量小因为只传层间的激活值KV缓存是独立的不需要跨设备传递所以能支持更大的batch_size因为单个GPU只存模型的一部分节约下来的显存可以存更多KV缓存。TP 是 “水平切分”把同一层的模型权重拆到多卡比如 16 个头的 Attention用 4 卡 TP每卡负责 4 个头解决 “单卡装不下大模型” 的问题。但 TP 有上限并行度不能超过模型的 “可切分维度”比如只有 16 个头最多 16 卡 TP再多就没法切了所以适合中小规模并行。PP 是 “垂直切分”把不同层拆到多卡比如 100 层模型用 10 卡 PP每卡负责 10 层解决 “层数太多计算慢” 的问题。PP 的关键是减少 “流水线气泡”刚开始卡 2 要等卡 1 算完才动有个空窗期现在都用 “重叠通信”卡 1 算完一层就把中间结果传给卡 2不用等 10 层都算完气泡就小了。TP 和 PP 可以这样混合用先按 TP 把每层拆成 M 卡再按 PP 把 M 卡一组的层拆成 N 组总共 M*N 卡比如 4 卡 TP2 卡 PP8 卡既能装下大模型TP 解决权重大小又能提速PP 解决层数多。华为的 “1 卡 1 专家” 是 MoE 模型的并行每个专家放一卡TP 切分单个专家的权重PP 切分 MoE 的层既用 MoE 的稀疏性每次只激活部分专家又解决专家数量多的问题。DistriFusion 是图像生成的并行把图像块按空间切分每卡算一个块减少边缘通信本质是 TP 的变种。五算子融合和优化算子融合其实就是让神经网络的计算流程变得更紧凑你做菜的话不可能每切一块肉就要洗一次刀换一次砧板。算子融合就是把切肉、洗刀、换砧板这些步骤合并成一个连贯的动作直接把肉切好就下锅不用来回折腾。算子融合不是简单 “合并步骤”而是抓 “显存带宽瓶颈”。每个算子启动一次 CUDA Kernel 要花几十微秒两个算子启动两次就多一笔开销这还是小事。更要命的是没融合时Add 的输出要写回显存LayerNorm 再从显存读一写一读占两次带宽显存带宽本来就不够这一堵就慢了。融合后Add 的输出直接在 GPU 的寄存器或共享内存里传给 LayerNorm不用碰显存少了两次带宽占用还省了一次 Kernel 启动开销。但融合得看 “依赖和兼容性”比如 Add 和 LayerNorm 是前后依赖还在同一维度操作才能合。这种优化不改变计算逻辑只是把计算流程重组了只是把我们小组成员的工位合并不用来回走动。在Transformer这种结构里这种融合特别有效因为像Add和LayerNorm这种操作本来就是前后依赖的完全可以合并。FasterTransformer 把 MultiHeadAttention 的整套流程QKV 投影→Scaled Dot-Product→多头拼接→线性层都融合成一个 Kernel原来要启动 5-6 次 Kernel现在一次搞定中间数据全在共享内存里传显存访问少 80% 以上速度直接翻倍。三、模型量化技术最后是模型量化做到平衡精度损失和节省资源。大模型的坑在于激活值和权重分布极不均匀比如激活值里可能有几个 100 的离群值大部分在 - 1 到 1 之间普通对称量化会把范围拉到 [-100,100]小值全被量化成 0失真严重。SmoothQuant 的办法是 “转移误差”给激活值乘 0.1 缩到 [-10,10]权重乘 10 扩到 [-100,100]让两者量化范围接近失真变小。LLM.int8 是 “混合精度”权重用 INT8激活值里的离群值用 FP16因为离群值少但影响大这样既省资源又保精度比如 99% 的数用 INT81% 用 FP16显存只多一点精度跟 FP16 差不多。GPTQ 更狠量化前先微调把权重切成小块每块量化后算误差再调整未量化的权重补偿误差相当于 “瘦身时补营养”让模型瘦了还有力气。比如 16B 模型 FP16 要 32GB 显存INT4 量化后只要 10GB普通显卡就能跑batch_size 还能翻倍速度快 4 倍以上。寒武纪的 vLLM-MLU 用 INT8是因为 MLU 的 INT8 计算单元比 FP16 多比如每个核心有 1024 个 INT8 ALU只有 256 个 FP16 的不用 INT8 就浪费硬件算力。另外量化还得防 “溢出”INT8 范围是 - 128 到 127计算前得把输入缩到位不然一溢出结果就错了现在的量化算子都有动态缩放就是做这件事情的。最后为什么要学AI大模型当下⼈⼯智能市场迎来了爆发期并逐渐进⼊以⼈⼯通⽤智能AGI为主导的新时代。企业纷纷官宣“ AI ”战略为新兴技术⼈才创造丰富的就业机会⼈才缺⼝将达 400 万DeepSeek问世以来生成式AI和大模型技术爆发式增长让很多岗位重新成了炙手可热的新星岗位薪资远超很多后端岗位在程序员中稳居前列。与此同时AI与各行各业深度融合飞速发展成为炙手可热的新风口企业非常需要了解AI、懂AI、会用AI的员工纷纷开出高薪招聘AI大模型相关岗位。最近很多程序员朋友都已经学习或者准备学习 AI 大模型后台也经常会有小伙伴咨询学习路线和学习资料我特别拜托北京清华大学学士和美国加州理工学院博士学位的鲁为民老师给大家这里给大家准备了一份涵盖了AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频全系列的学习资料这些学习资料不仅深入浅出而且非常实用让大家系统而高效地掌握AI大模型的各个知识点。这份完整版的大模型 AI 学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】AI大模型系统学习路线在面对AI大模型开发领域的复杂与深入精准学习显得尤为重要。一份系统的技术路线图不仅能够帮助开发者清晰地了解从入门到精通所需掌握的知识点还能提供一条高效、有序的学习路径。但知道是一回事做又是另一回事初学者最常遇到的问题主要是理论知识缺乏、资源和工具的限制、模型理解和调试的复杂性在这基础上找到高质量的学习资源不浪费时间、不走弯路又是重中之重。AI大模型入门到实战的视频教程项目包看视频学习是一种高效、直观、灵活且富有吸引力的学习方式可以更直观地展示过程能有效提升学习兴趣和理解力是现在获取知识的重要途径光学理论是没用的要学会跟着一起敲要动手实操才能将自己的所学运用到实际当中去这时候可以搞点实战案例来学习。海量AI大模型必读的经典书籍PDF阅读AI大模型经典书籍可以帮助读者提高技术水平开拓视野掌握核心技术提高解决问题的能力同时也可以借鉴他人的经验。对于想要深入学习AI大模型开发的读者来说阅读经典书籍是非常有必要的。600AI大模型报告实时更新这套包含640份报告的合集涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师还是对AI大模型感兴趣的爱好者这套报告合集都将为您提供宝贵的信息和启示。AI大模型面试真题答案解析我们学习AI大模型必然是想找到高薪的工作下面这些面试题都是总结当前最新、最热、最高频的面试题并且每道题都有详细的答案面试前刷完这套面试题资料小小offer不在话下这份完整版的大模型 AI 学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】
返回列表