大家好,很荣幸受JDC的邀请,为大家做一次分享。本次分享将围绕大模型推理的相关技术展开,涉及内容以通识性介绍为主,深度有限。群内有许多大模型领域的专家,欢迎大家在分享后多多交流。我今天的分享主要包含四个部分:一是大模型结构介绍;二是大模型推理中的并行优化算法及推理加速技术;三是当前热门的MOE场景下的加速技术;四是今年备受关注的强化学习后训练场景下高效推理采样的实现方式。最后,会对相关内容进行总结与展望。一、大模型结构介绍关注本次直播的观众,不少可能从事深度学习相关工作。在2023年大模型兴起之前,大家所研究的多为传统小模型。传统小模型与大模型存在显著区别:传统小模型算子数量多、种类丰富,网络结构复杂;而大模型基于Transformer结构,结构简洁清晰,涉及的算子仅十几个,优化点相对较少,但模型尺寸远大于传统小模型,通常相差数个数量级。因此,大模型与小模型的推理优化思路截然不同。 目前常见的大模型主要分为两类:密集型(Dense)模型和混合专家系统(MOE)模型。MOE模型自去年底至今年初逐渐受到广泛关注,而此前大家更多研究的是Dense模型。Dense模型与MOE模型的核心区别在于Transformer结构中的前馈网络(FFN)层:Dense模型中,所有token共享一个大矩阵进行矩阵乘法运算;MOE模型中,不同的token会激活不同的专家,相当于将原来的大矩阵拆分成多个细粒度的小专家,不同token通过不同专家进行计算和推理。这样做的好处是单个token的计算量大幅下降,例如某600B参数量的MOE模型,每个token激活的参数量可能仅为30B。Dense模型采用全连接结构,简单通用,适用于各类标准推理任务,通常可单机或单卡部署;MOE模型作为混合专家系统,结构相对复杂,推理部署时配置更为繁琐,常见的有大专家并行方式,也可采用多机混合分布式部署,在推理资源调配与架构统一方面比Dense模型复杂。关于MOE架构,存在一些常见误区。例如,常说的300B参数量、激活30B参数量的MOE模型,大家可能认为其性能与30B参数量的dense模型相当,但实际上要达到这一效果,需要在工程上进行大量优化。第一个误区是认为300B参数量的MOE模型,激活30B参数量就等同于30B参数量的模型。事实并非如此,MOE模型推理的主要难点在于:当单个token激活30B参数量的专家时,若输入包含大量token(如在预处理阶段输入大量文字),每个token激活的专家不同。模拟结果显示,当输入token达到125个左右时,300B参数量基本会被全部激活,这会给显存带宽带来极大压力。虽然单个token的计算量降至30B参数量水平,但权重从全局内存加载至计算内存时,带宽难以支撑如此大的参数量,此时其激活量相当于300B参数量的dense模型。不过,MOE模型也有优势,即在计算过程中,随着输入token数量或批次大小的增加,计算量不会显著增加,而Dense模型的计算量基本呈线性或超线性增长。因此,在训练中采用MOE结构可大幅节省时间,在推理中采用大专家并行方式也能降低推理时间。二、推理中的并行优化算法及加速技术1. 张量并行(TP):大模型尺寸庞大,单张GPU的显存往往无法容纳。例如,70B参数量的模型不做量化时需140GB显存,即使进行INT8或IP8量化,也需70GB显存,而部分GPU(如910B)的可用显存仅64GB,无法容纳。为解决这一问题,可将权重切分成多块,分别部署在不同显卡上进行计算,计算后通过通信汇总结果(如进行归约或收集操作)。TP的优势在于能让模型在显存较小的显卡上运行,且可通过并行计算实现加速,但会增加额外通信,在dense模型中,通信占比约30%,因此通信优化是重点。2. 数据并行(DP):DP在训练中应用广泛,目前在推理中也开始采用,尤其在MOE大专家并行时。对于不同的DP域,输入不同数据,可提高整机吞吐量。3. 专家并行(EP):类似于TP,EP将大矩阵拆分成多个专家,将不同专家部署在不同显卡上。这样不仅能实现计算加速,还能整合多张显卡的显存带宽(如单卡1.6T带宽,两张卡可达3.2T),进一步提升性能。4. 序列并行(SP):针对长文本输入场景(如智能体或长上下文对话),单张GPU计算难以满足首字响应时间(TTFT)或每token响应时间(TPOT)要求。SP将单个用户的输入按序列切分,由不同显卡计算,可缩短响应延迟,提高效率。5. 流水线并行(PP):PP在训练中应用较多,目前在推理优化中也逐渐受到重视,尤其适用于后训练场景。后训练更关注整机吞吐量,对延迟要求较低。PP将模型按层横向切分成多段,部署在不同显卡上,通信量小(仅传输激活值),结合流水技术隐藏通信耗时,可显著提升整机吞吐量。6. 预处理器与解码器分离(PD分离):大模型推理中,编码器(encoder)和解码器(decoder)对资源的需求不同:编码器属于计算密集型,解码器属于访存密集型,而目前没有兼顾高算力和高访存带宽的显卡。因此,可将预处理器(P)部署在算力强的显卡上,解码器(D)部署在带宽高但算力相对较低的显卡上,以实现降本目标。此外,PD分离还能提升用户体验。在非PD分离模式下,一台机器需服务多个用户,不同用户请求时间不同。若某用户正在进行解码器计算时,新用户的预处理器请求进入,为保证新用户的首响时间,可能会暂停原有解码器计算或使其与新请求并行计算,导致原有用户的响应时间被拉长,出现卡顿。而PD分离后,机器仅部署解码器,可保证响应的流畅性。目前业界PD分离方案主要有两种:一是PD直连,通过提前建立连接实现点对点直传,传输延迟低,但部署复杂度高,全互联配置及扩容、故障处理均较麻烦;二是基于KV存储(KV store),预处理器计算结果存入KV store,解码器从其中获取数据,实现解耦,部署灵活,但中间存储会增加约20-30ms的首响延迟,仍在可接受范围内。7. 页注意力(Page Attention):该技术可有效节省显存。传统注意力机制中,需为每个用户分配固定大小的窗口(如4K、8K,甚至32K、64K)存储键值对(KV),造成显存浪费。Page Attention借鉴操作系统的分页机制,将KV显存划分为多个块(如128个token/块),按需分配,用完回收再分配给其他用户,可提高显存利用率,增加并发路数。在实际实现中,若某一时刻所有用户均需长窗口(如64K)导致页不足,可暂停相关任务,将其已计算的页卸载至CPU,回收显存页分配给其他任务,待其他任务完成释放页后,再唤醒暂停的任务继续计算,保证程序正常运行。8. 缓存命中(Cache Hit):在多轮对话或长上下文场景中,“以查代算”的缓存技术应用广泛。例如,用户的问题Q1及回答A1会被存入KV存储缓存,当用户基于历史对话提出Q2时,可直接从缓存中获取Q1和A1的计算结果,仅需计算Q2并生成A2,再将Q2和A2存入缓存。采用显存、内存、磁盘三级缓存架构:热数据存于显存,加载速度快;显存不足时,将冷数据写入内存;内存不足时,写入磁盘。结合外部服务,当用户再次访问时,可从磁盘加载历史数据,保证对话连贯性,提高缓存利用率、降低计算量、提升整机吞吐量。 9. 模型量化:随着芯片技术发展,大模型量化技术不断进步。以往多采用INT8量化,现在如英伟达的部分显卡及华为下一代950显卡均支持IP8量化,其表示范围更大,量化损失更小。目前四比特(4-bit)量化在大模型上的效果下降也较少,具备可用性。量化的优势在于:一是降低显存占用,使模型可在单机或单卡部署,减少通信开销;二是提高访存带宽,如从FP16或BF16量化至INT8或IP8,带宽压力可降低一倍,对带宽受限的算子,相当于加速一倍;三是提升计算速度,多数硬件上INT8计算的算力是FP16或BF16的一倍。当前业界常用的量化方案如SmoothQuant量化,其核心思路是:大模型权重分布平缓,无明显奇异值(训练正常的情况下),但输入激活值不可控,可能存在大量奇异值(如99%的值在±1内,1%的值为100以上)。传统Min-Max量化会导致有效数据被量化为零,精度损失大。SmoothQuant量化将奇异值转移至权重,利用权重的平缓特性分摊压力,使INT8量化的效果损失控制在1个点以内甚至无损。三、MOE场景下的加速技术MOE模型的主要问题是权重庞大,虽单个token激活的专家有限,但当输入预处理数据量大或批次尺寸大时,可能激活所有专家,导致带宽压力骤增。对此,可将专家分配到多张GPU上(如256个专家,每2个部署在一张GPU上,共需128张GPU)。对于被频繁激活的“热专家”,可单独部署并进行冗余备份,以降低其计算压力,避免因热专家计算缓慢拖慢整体进程(因所有token需与专家计算完成后进行全局通信)。MOE模型结构复杂,需采用多种混合并行方式优化:注意力(Attention)层可采用TP并行(可能结合SP并行)加速;输入部分采用DP并行;MOE层(FFN层)采用EP并行。过程中涉及大量通信和数据交换,且需多机多卡分布式部署,复杂度高于dense模型。针对DP域的加速技术包括“分块预处理(Chunk Prefill)”:DP域中不同输入的长度可能差异较大(如A输入长、B输入短),导致不同显卡的计算时间不均衡,通信需等待所有显卡完成计算,造成部分显卡空闲。采用Trunk Prefill,将长输入按固定长度(如1024)切分,分轮计算,使各显卡计算时间均衡,减少空闲时间,提高整机吞吐量。计算通信隐藏技术也可提升MOE性能:一是利用共享专家,在共享专家计算时进行其他专家的分发(dispatch),隐藏分发时间;二是采用多流(Multi-stream)技术,将输入分成多组,交替进行注意力计算和合并(combine)操作,实现计算与通信并行,虽对单用户端到端延迟影响不大,但可显著提升整机吞吐量。负载均衡对MOE至关重要:未做负载均衡时,部分专家(热专家)被频繁访问,负载过高,而部分专家(冷专家)很少被访问,资源浪费。通过为热专家分配更多显卡、将冷专家集中部署,可使各显卡的token计算量均衡(如优化后差异从2-3倍降至基本均衡),减少空闲时间,提高整机吞吐量。MOE的投机解码(MTP)技术:在Dense模型中,投机解码采用小模型配合大模型,小模型生成多个token(如10个),大模型校验并接受正确的部分,加速生成过程。MOE的MTP技术则新增一个与标准层相同的Transformer块,该块生成结果需校验,成功则接受,失败则重新生成。当接收率达80%以上时,可带来20%以上的提速。注意力与前馈网络分离(AF分离):借鉴PD分离思想,将模型中的注意力(Attention)和前馈网络(FFN)拆开部署。在解码阶段,随着解码长度增加,注意力的资源需求呈平方级增长,而FFN的资源需求基本恒定(输入为B×1)。将两者分别部署在不同机器上,可根据需求灵活扩容注意力机器,满足整体吞吐量需求,收益可观。四、强化学习后训练场景下的高效推理采样当前强化学习后训练(如PO、POG、SPU等算法)备受关注,我们采用“训推共卡”方式:训练与推理共享计算卡,训练完成后模型更新至推理引擎,推理采样的数据再用于训练,形成迭代。过程中需解决训练与推理的切换、模型更新及推理加速等问题。针对后训练场景的方案包括:一是模型卸载,训练时将推理引擎的模型及KV缓存卸载至CPU或丢弃,复用显存;二是推理引擎热启动与模型快速更新,训练得到的新模型可快速更新至推理引擎,使其继续推理采样;三是优化推理以提升吞吐量,后训练场景对延迟不敏感,因此可极致压榨显存,提高并发路数(高路数下解码效率更高)。总结与展望大模型推理虽模型结构较传统小模型简单,但优化工作复杂,涉及多机多卡分布式推理、KV缓存、注意力优化、量化(需保证效果,多采用后量化)、服务化技术(如LoRA、PD分离、AF分离、重新解码等)及底层算子融合与效率优化等。未来展望:1. 低比特量化:目前8比特量化较普遍,4比特量化因效果损失小,有望成为今年的主流,2比特量化也值得进一步探索。2. 分布式系统优化:随着模型尺寸增大,超级集群的可靠性、易用性、部署维护及容灾能力需重点考虑。大规模集群中,单卡故障可能影响上千用户,需完善容灾机制。3. 精细化显存管理:长上下文导致KV缓存占用显存剧增,需通过异步下发、显存与CPU间数据拷贝及备份等方式,在有限显存中运行更多路数,提高利用率。4. 自动调优:相较于手写算子,Triton等工具在常规算子性能上已不逊色,华为的相关工具也在算子融合调优方面发挥作用。未来需探索更高效的算子开发与调优方式,加速推理开发。以上就是本次分享的全部内容,感谢大家的聆听。