PPIO CTO王闻宇:我们是怎么做到让AI推理成本下降数量级的?

算力成本高企、大模型参数越来越大、多模态模型让推理成本再提高2个数量级、推理效率低、业务场景丰富但落地链路长等一系列现实问题,成为制约AI应用广泛落地的关键因素。

如何降低算力成本,迎接推理算力爆发时代的到来?

王闻宇先生2024全球机器学习技术大会上,以《如何做到算力基建和推理优化的“软硬兼施”与创新突破》为题,对AI推理成本高企的原因进行深度剖析,并给出两个降低推理成本的有效方法。

当前,AI推理面临的首要问题是高昂的成本:

以GPT-4当前的推理价格为例,如果我们做一个粗略的估算,假设日活跃用户达到10亿,每人每天使用7,000个token(包含上下文信息),并且不考虑目前百万级脱壳的费用,每天产生的费用将高达2.1亿美金。若按365天计算,年费用将达到惊人的600亿美金。

GPT-4推理价格估算 = 用户数 x 每用户生成Token数 x 单位Token推理价格

这一数字相当于超过了40座世界第一高楼迪拜的哈利法塔(Burj Khalifa)的造价。更值得注意,这还只是今天的情况,还未考虑到多模态应用等更广泛的普及场景,因此实际使用量可能远超这一数字。

600亿美金的概念意味着,如果AI推理市场的体量再放大十倍,其规模将接近甚至超过当前整个云计算产业的总收入。这表明AI推理在未来市场的发展潜力巨大,远远超过现有的云计算产业。因此,从商业角度看,AI推理无疑是一个具有巨大潜力和前景的市场。

AI 推理成本高企的原因分析

挑战1:生产资料昂贵

导致AI推理成本高昂的原因有多种,其中生产资料成本是重要因素之一。例如,某些顶级芯片制造商的产品毛利率超过了70%。

当然,成本不仅仅局限于GPU,电力消耗也是重要成本因素,特别是在电费较高的地区,电力成本可以显著影响总体运营成本。

挑战2:LLM 参数还在越来越大

近年来,随着技术的不断进步,大型模型的参数规模也在迅速扩张。例如,今年Mixtral推出了具有8*22 141B 参数的模型,Grok发布了拥有341B参数的模型。Llama3也公开了400B参数的模型,而传说中的GPT-5的参数规模更是将迈上新的台阶,尽管具体数值尚未揭晓。更大的模型意味着更高的计算需求,从而推高了推理成本。

随着多模态技术的发展,尤其是音视频数据的处理,进一步增加了推理的复杂度。虽然据说Sora只有10B的参数量(没有得到官方的证明),但是音视频的生成具有长序列特性(对比LLM的Token数量大得多得多), 这种长序列特性会使得计算量和显存会大大增加,这最终也会使得推理成本的增长更是呈现指数级上升的趋势。

挑战3:推理效率低

大模型系统的推理效率低下是行业普遍存在的问题,这主要是由于算法和硬件两方面原因导致的。

首先在算法层面,由于大模型自回归推理的特性,计算量随着文本生成长度平方增长,意味着生成的文本序列越长,推理的速度越慢。

其次经典的GPU硬件架构需要在推理过程中频繁进行数据传输和搬运,这会显著限制推理效率。比如在推理过程中,大量的数据通信发生在各级缓存层之间,不仅消耗GPU的算力,而且系统需要花费大量时间等待数据的搬运工作完成。

挑战4:业务场景丰富,落地链路长

业务场景丰富和落地链路长会间接导致推理成本过高。

当业务场景变得越来越多时,为了满足各种复杂和多样的需求,通常需要设计和训练更为复杂和庞大的模型。这些模型往往需要更高的计算资源和存储资源,导致推理过程中所需的计算成本增加。

落地链路长通常意味着从模型训练到实际部署应用的过程中,需要经过多个阶段和环节,包括数据预处理、模型训练、模型优化、模型部署等。这些环节都可能涉及到计算和存储资源的消耗,导致推理成本增加。

降低推理云成本两个有效思路

思路1:分布式云,充分动员市场,降低生产资料成本
分布式云方面,充分动员市场的社会、经济、技术三大驱动力,以获得更便宜的生产资料,包括 GPU 卡与电力能源等。

以GPU为例,虽然高端GPU的价格昂贵,但是中低端GPU/旧GPU便宜。我们可以通过分布式云的方式,利用其强大的市场动员能力,将大量中低端GPU汇聚起来(如RTX4090等),形成一个庞大的分布式GPU算力网络,从而降低算力成本。同时,通过合理的能源管理和调度,可以降低能源消耗和散热成本,进一步降低推理成本。

传统的大型数据中心虽然具备强大的处理能力,但其成本高昂,不仅包括硬件设备的购置和维护,还包括能源的消耗和散热的需求。分布式云通过建立在全球各个位置小型数据中心或边缘计算节点,充分利用各地的廉价能源和算力资源,降低整体成本。

思路2:AI 推理加速,提效降本

虽然生产资料的成本是能通过分布云的方式降低,但是下降空间都是有限的。其实降低推理成本,还有一个大杀器,用得好,其降本空间更大,这就是推理加速技术。

那么什么叫推理加速技术,拿LLM来举例,我们重点关注以下三个指标:

Time To First Token (TTFT): 首 Token 延迟,即从输入到输出第一个 token 的延迟。在在线的流式应用中,TTFT 是最重要的指标,因为它决定了用户体验。

Time Per Output Token (TPOT): 每个输出 token 的延迟(不含首个Token)。在离线的批处理应用中,TPOT 是最重要的指标,因为它决定了整个推理过程的时间。

Throughput:吞吐量,即每秒针对所有请求生成的 token 数。以上三个指标都针对单个请求,而吞吐量是针对所有并发请求的。

这是为了确保用户能够更快地获得系统的反馈,从而提升用户体验。同时,我们还努力增加系统的吞吐量,这意味着系统能够在单位时间内处理更多的数据,让系统推理的效率更高。

降低时延和增加吞吐量不仅关乎用户体验,更直接关系到推理成本。优化后的系统能够更高效地利用计算资源,如CPU、GPU和内存,从而降低单位推理任务的成本。这种成本降低不仅体现在硬件资源的消耗上,还体现在时间成本上,因为更高效的推理过程意味着更短的任务完成时间。

当同样的GPU,如果更短的时间能够完成一个任务,就说明单位时间内能完成更多的任务,这样单任务的时间变短了,生产资料不变,那就说明单任务的推理成本降低了(例如,之前10s生成一张图片,现在1s生成一张图片,相当于10s生成了10张图片,也就时每张图片的推理成本降低了10倍)。

推理加速的本质在于解决制约性能的三要素:显存、算力和带宽。

想象一下,如果有一块固定的显存,能不能像打理家务一样精打细算,让这块显存存下更多的东西?这就是一个值得考虑的点。同样的,对于算力,我们是不是也能在运行时更精细地管理,让更多的计算任务同时跑起来呢?说到带宽,其实它就像是数据在显卡和其他存储设备之间传递的“道路”。如果我们能想办法减少数据在这条“道路”上的拥堵,比如降低通信量,那也是一种优化的思路。

PPIO派欧云推理优化实践:算法、系统、硬件的协同创新

针对制约性能的显存、算力和带宽三要素,PPIO派欧云进行了诸多推理优化实践,形成了算法、系统、硬件的协同创新,结合了一些最新的研究,探索了一些有效的方法。总体上可以分为算法优化、统一推理框架以及硬件适配这三个层次的综合优化。

无损优化系列

当前主流 LLM 基本都是 Decoder Only 的 Transformer 模型,其推理过程可以分为两个阶段。

· Prefill:根据输入 Tokens(I,like,natural,language) 生成第一个输出 Token(Processing),通过一次 Forward 就可以完成,在 Forward 中,输入 Tokens 间可以并行执行(类似 Bert 这些 Encoder 模型),因此执行效率很高,通常都会位于 Compute Bound 区域。

· Decoding:从生成第一个 Token(Processing) 之后开始,采用自回归方式一次生成一个 Token,直到生成一个特殊的 Stop Token(或者满足用户的某个条件,比如超过特定长度) 才会结束,假设输出总共有 N 个 Token,则 Decoding 阶段需要执行 N-1 次 Forward,这 N-1 次 Forward 只能串行执行,效率很低,通常都会位于 Memory Bound 区域。

无损优化的本质,从一定程度上讲,是将Memory Bound转化为 Compute Bound。

方法1:算子融合,重点优化注意力计算和KV-Cache

算子融合简单来说就是优化Transformer模型里两个主要的算子:Attention(注意力模块)和 FFN(前馈神经网络),从而实现推理速度的大大提升。这个过程中,我们在优化AI模型时,用了一种叫做“KV缓存”的技术,这样模型在运行时就不需要每次都重新加载数据,大大提高了效率。

就像是把两个独立的操作合并成一个大的操作,省去了它们之间数据传输的麻烦,直接在显卡的共享内存里快速完成。这样,就降低了显卡和外部存储器之间的通信量,提高了效率。特别是在像4090这样的显卡上,没有高速的HBM内存,这种优化就更重要了。

在算子融合中,我们侧重注意力计算及 KV-Cache。KV-Cache 其实是从Attention机制里来的,大家都知道Attention里有query、key和values这三个要素,著名的Softmax公式,就是基于q乘以k的矩阵运算,然后再取values。在这个过程里,KV会反复使用,所以如果我们能把KV的值缓存起来,就能避免每次都去加载,从而提高每次数据搬运的计算效率,这就是KV缓存的核心。

对于比较耗时的注意力计算包含多次矩阵场乘和Softmax计算,如果可以将这些算子融合为一个大算子,同时减少慢速片外显存到高速的片上显存的传输次数,则可以将复杂度从平方降低到线性,让推理效率大幅提升,这是面向注意力计算的算子融合算法的核心思想。

方法2:以虚拟内存的方式管理显存,减少显存碎片,提升显存使用效率

传统的推理方案中,系统由于无法精确估算每个生成的序列需要多少显存,非常简单粗暴的按配额为每个序列预分配一大段存储空间,这种做法一方面造成大量的显存空间浪费,另一方面也限制了并发处理序列的最大数量。因此,我们在推理过程中借鉴操作系统的“虚拟内存”概念,实现了动态显存管理技术,把逻辑和物理内存分开,用一个指针的方式去映射。

当处理多个序列时,这种方式能更灵活地利用显存碎片,让显存使用得更高效。这就像是把一堆小碎片重新组合起来,变成有用的东西一样。总的来说,这些技术都是为了让AI模型运行得更快、更高效。

方法3:Continuous Batching,减少无效显存占用,提高显存利用率

当我们进行模型训练时,我们通常会分配一个固定的内存区域给模型。但问题是,用户输入的数据长度可能各不相同。有些人可能只输入几个字,而有些人可能会输入一大段文字。如果我们不进行优化,那么当较短的输入完成后,剩余的内存空间就会被浪费掉。

为了解决这个问题,我们采用了“Continuous Batching”方案。简单来说,就是当一个输入序列结束后,我们不会让剩余的内存空间闲置,而是会接着填充下一个输入序列的数据。这样一来,内存的使用就更加高效了。但这个方法也有个缺点,那就是在处理序列对齐时可能会增加一些额外的开销。所以,是否使用这个方法,还需要根据具体的应用场景来决定。

与此同时,我们创新了“共享Context”概念,用以减少计算量和显存开销减少计算量和显存开销。在实际应用中,很多时候用户会使用相同的提示词或问题来咨询。

为了避免重复存储这些相同的内容,我们可以将它们放在共享内存中。这样,当有多个用户使用相同的提示词时,我们就可以直接从共享内存中读取,而不需要重复加载,从而节省了内存和计算资源。

以上这些方法都属于基础的推理加速技术,它们的特点是不会对模型本身造成任何损害。但仅仅依靠这些无损的优化方法,我们可能无法达到理想的加速效果。所以,在实际应用中,我们还需要结合其他更高级的技术来进一步提升推理速度。

有损优化系列

我们在提升推理速度时,真正的挑战并不在之前提到的无损优化上,而是在接下来要讲的有损优化上。那么,什么是有损优化呢?

所谓有损优化是针对模型的结构特点,对模型进行压缩,通过小型化减少推理过程中的计算负载和数据传输量,进而提高推理效率。模型压缩可能会导致轻微的精度损失,但这些损失是可控且可接受的,带来的推理效率提升非常显著,本质是用少量的精度损失换取更大的推理加速。

方法1:量化

首先,我们要理解AI模型中的浮点数。在AI模型中,浮点数是由符号位、指数位和小数位组成的。我们经常听到的FP32、FP16、FP8,其实就是在这些位数上做了不同的取舍。这些浮点数的位数越来越少,其实是AI硬件发展的一个趋势。

下面这个图展示的是英伟达最近几代GPU的架构,从Ampere架构到今天的Hoper/Ada Lovelace和Blackwell架构,你可以看到它们的浮点运算能力在逐渐增强,从FP16->FP8->FP6/FP4,为什么要这么做呢?其实,这就是在进行能够更好地做量化。

量化就是将模型本身浮点数类型(FP16)转换成整数(INT8/INT4等)或者更低位数类(FP8等)的方法,从而提高计算速度。

我们经常听到的INT8量化就是这样一种技术。但是,INT8量化的一个问题在于,它不能对所有的内容都进行量化。对于一些复杂的操作,如SoftMax操作,可能需要先还原到FP16或FP32再进行计算。

传统的显卡,包括一些国产显卡,在量化时主要使用INT8,并结合反复的量化和反量化来达到最终的效果。但是,INT8有一个问题,就是当有大量接近于零的数据时,它们可能会被直接清零,导致精度损失。

FP8 和 INT8 的值分布

而FP8则不同。即使在数据接近于零的情况下,FP8也能很好地保持精度,不会出现直接清零的情况。这就是为什么现在的4090显卡以及H100等显卡会成为大家的主力选择。它们能够更好地支持FP8等低位数的浮点数运算,从而在保持精度的同时,提高计算速度。

FP8 和 INT 的量化对比

现在 H100等高性能计算平台之所以成为大家的主力,主要是因为它们支持全内容量化,特别是FP8全链路量化。这种量化方式能在保持精度损失在可接受的1%-2%范围内,显著提升计算速度,有时甚至能达到4倍以上的加速效果。这种优化对于需要高效推理的AI应用来说,是极具吸引力的。

FP8:全链路量化,存储和计算的全面提升

方法2:稀疏化的硬件优化

除了全链路量化,稀疏化也是另一种重要的优化技术。对Transformer来说,其注意力层的精确计算导致了序列长度二次的运算和内存复杂性,稀疏化可以理解为将矩阵中接近于零的值直接置为零,从而降低计算量。

其中,有一种叫做HyperAttention的方法,寻找对角矩阵D , 一个矮胖矩阵S, 将有价值的数据集中在斜对角线上,从而通过稀疏化计算实现约等于序列长度一次的运算和内存复杂性。

稀疏化的硬件优化
稀疏化加速

除了HyperAttention这种attention的近似方法之外,激活稀疏和KV缓存稀疏也是非常有效的优化方法,通过激活稀疏的预测方法,可以将热的神经元放入GPU,冷的神经元放入CPU,再通过实时预测的方法,动态计算当前输入对应的热神经元,不计算当前输入的冷神经元,从而大大降低神经元的计算量。

稀疏化计算:权重稀疏,减少计算量

KV缓存存储的是历史token列表,大模型的推理当中,实际只有少部分的热token对最终的输出起到决定作用,KV缓存稀疏正是基于这门一种策略,通过计算不同token的累积贡献度,删除掉贡献度最低的token,从而降低KV的输入长度,最终达到加速的目的。

稀疏化计算:KV Cache稀疏,减少存储,支持长窗口

在有限长度的KV Cache中,驱逐与Query相关度低的KV值。 永久保留KV Cache中靠前的KV值,  Decoding时用较少的KV实现较长KV的效果。

总的来说,这些推理加速方案为我们提供了更多的选择和可能性,让我们能够根据不同的应用场景和需求来定制最优的AI计算解决方案。

但这些原理听起来简单,但在实际应用中却需要针对每个模型进行细致的分析和优化。因为不同的模型对优化的敏感度和需求是不同的。而且,在进行有损优化后,还需要通过评测工具来评估精度损失和性能提升之间的平衡。只有当精度损失在可接受的范围内,且性能提升显著时,这样的优化方案才是有效的。

为解决这些困扰,这方面的实践上,PPIO派欧云推出了派欧算力云 AI 算力产品。助力企业和AI从业者和研究者纵享算力。