原文来源:量子位
图片来源:由无界 AI生成
原本需要一张16万元的80G A100干的活,现在只需要一张不到2万元的24G 4090就够了!
上海交大IPADS实验室推出的开源推理框架PowerInfer,让大模型推理速度加快了11倍。
而且不用量化,就用FP16精度,也能让40B模型在个人电脑上运行;如果加入量化,2080 Ti也能流畅运行70B模型。
结合大模型的独特特征,通过CPU与GPU间的混合计算,PowerInfer能够在显存有限的个人电脑上实现快速推理。
相比于llama.cpp,PowerInfer实现了高达11倍的加速,让40B模型也能在个人电脑上一秒能输出十个token。
我们最熟悉的ChatGPT,一方面有时会因为访问量过大而宕机,另一方面也存在数据安全问题。
开源模型能较好地解决这两个问题,但如果没有高性能的显卡,运行速度往往十分感人:
而PowerInfer的出现,刚好解决了这个痛点。
PowerInfer一经发布就引起热烈反响,不到24小时就获得了500+星标,其中还有一颗来自llama.cpp的作者Gerganov。
目前,PowerInfer的源码和论文均已公开,下面就一起看看它的加速效果究竟有多强。
推理速度最高11倍
在搭载x86 CPU和NVIDIA GPU的消费级硬件平台上,PowerInfer以参数量从7B到175B的一系列LLM模型为基准,对PowerInfer的端到端推理速度进行了测试,并和同平台上性能最好的推理框架llama.cpp进行了对比。
对于FP16精度的模型,在搭载了13代Intel Core i9和单张RTX 4090的高端PC(PC-High)上,PowerInfer平均实现了7.23倍的速度提升,其中在Falcon 40B上实现了高达11.69倍的速度提升。
在所有测试用例上,PowerInfer平均达到了8.32 tokens/s,在OPT 30B和Falcon 40B上最高分别达到16.06 tokens/s和12.94 tokens/s。
借助PowerInfer,当今的消费级平台可以流畅运行30-40B级别的LLM,并以可以接受的速度运行70B级别的LLM。
△ PowerInfer在不同模型中不同输出长度下平均生成token速度测试图,纵坐标为加速比,每根柱状图上标注的数字代表了每秒钟能够生成的token数量
模型量化是端侧LLM推理非常常用的技术,PowerInfer也支持了INT4量化模型的推理。
PowerInfer分别在高端PC(PC-High)和搭载单张RTX 2080Ti的中低端PC(PC-Low)上测试了一系列INT4量化模型的推理速度。
在PC-High上,PowerInfer能够高速运行40-70B规模的模型,最高达到了29.09 tokens/s的推理速度,并且实现了平均2.89倍,最高4.28倍的速度提升。
同时,在消费级硬件上运行OPT-175B这种规模的模型也成为可能。
在PC-Low这种中低端PC上,PowerInfer可以流畅运行30-70B规模的模型,并实现平均5.01倍,最高8.00倍的速度提升,这主要得益于INT4量化后模型大部分热神经元得以放置在显存中。
△ PowerInfer在INT4量化模型中的推理速度,纵坐标为加速比,每根柱状图上标注的数字代表了每秒钟能够生成的token数量
最后,PowerInfer对比了PC-High上运行PowerInfer相比于云端顶级计算卡A100运行SOTA框架vLLM的端到端推理速度,测试模型为FP16精度的OPT-30B和Falcon-40B(ReLU)。
当输入长度为64时,PowerInfer对A100的速度差距从93%-94%缩小到了28%-29%;在输入长度为1的纯生成场景中,这一差距会被进一步缩小到低至18%。
这代表着PowerInfer借助稀疏激活和CPU/GPU混合推理,极大地弥合了消费级显卡到顶尖服务端计算卡的推理速度差距。
△PowerInfer在4090上与vLLM在A100的性能对比
那么,PowerInfer是如何实现消费级硬件上的高速推理的呢?
充分利用模型和硬件特点
PowerInfer实现高速推理的秘诀,在于充分利用了稠密模型存在的高局部性的稀疏激活,并与CPU和GPU的运算特点进行了充分结合。
何谓“稀疏激活”?
最近Mixtral MoE大模型引爆了整个AI圈,稀疏模型重新进入大家的视野。
一个有趣的事实是:像OPT、LLaMA(ReLU)这样被视为稠密模型的LLM,同样存在稀疏激活的特征。
什么是稠密模型的稀疏激活呢?
和MoE模型中一个输入token只需要激活FFN layer其中一个或者两个专家模块类似,以OPT模型的稠密FFN层为例,只需要激活一小部分(实验显示约10%)神经元即可保证输出的正确性。
其他的神经元虽然参与了计算,但并没有对输出产生明显贡献。
换句话说,稠密模型中的每一个神经元都是一个专家!
△ 左图来自Alexander Clark论文(aRXiv编号:2101.03961)
MoE模型可以在专家FFN层之前通过路由模块将输入分发给其中一个或者两个专家进行计算,那么稠密模型中的稀疏激活又该如何路由或者在计算之前就知道哪些专家神经元会对结果产生贡献呢?
答案是为稠密模型增加路由预测模块。
在模型开始服务前,PowerInfer首先会对模型进行离线分析,通过将模型在通用数据集中进行推理获取每一层输入与激活神经元之间的对应关系,进而为稠密模型每一层训练一个小的预测路由模块来预测每一个输入会激活的神经元,只计算路由激活的神经元(专家)。
在多个下游任务的测试中,PowerInfer的路由模块几乎没有引入额外的精度损失。
稀疏激活带来的推理局部性
稀疏激活的另一个有趣事实是,尽管对于不同的输入token,激活的神经元分布存在差异;但如果在足够多的数据上进行推理,并将每次激活的分布叠加,PowerInfer发现少部分神经元总体上被激活的概率更高。
也就是说,统计意义上大模型神经元的激活符合Power Law分布(Power Law分布是一种统计规律,表示少数事件的发生频率远高于大量其他事件)。
如下图(a)所示,对于OPT-30B和LLaMA(ReGLU)-70B两个模型里的某一层FFN网络,统计意义上26%和43%的神经元分别贡献了80%的激活。
而在整个模型的尺度上,如下图(b)所示,17%和26%的神经元贡献了80%的激活。
因此,当只考虑对最终激活有贡献的运算时,LLM具有推理局部性:对权重的访问倾向于集中在一定的区域,而不是均匀分布在所有的神经元上。
在推理运算中它显现为程序的局部性:对内存空间的访问倾向于集中在一定的区域,而不是均匀分布在整个内存空间。
在常见的个人电脑中,GPU具有较少的显存和更强的计算能力,适合处理频繁访问且计算强度高的任务;而CPU拥有更大的内存容量但相对较弱的算力,适合处理少量访问且计算强度低的任务。
因此,理想情况下,一小部分经常访问的神经元应该存储在显存中,相比之下更大、访问频率更低的神经元更适合存储在内存中,由CPU进行计算。
这启发了PowerInfer基于局部性特征进行CPU/GPU混合推理系统的设计。
CPU/GPU混合推理设计
根据上述神经元的Power Law和由此产生的局部性,PowerInfer通过提前静态分析每一个神经元的冷热性,将少量的热神经元加载在GPU显存上,剩余的冷神经元加载到CPU的内存中。
以神经元为粒度的模型混合加载,会出现一层内有些神经元在GPU上,有些神经元在CPU上。
为此,PowerInfer设计了细粒度的CPU/GPU混合推理引擎。
以下图为例,对于某一层的输入,PowerInfer会首先预测该输入会激活神经元为3,4,5。
然后CPU、GPU会分别根据预测信息,执行位于其内存中的神经元的计算。
具体以下图的例子来说,CPU上会计算第四个神经元,GPU上会计算第三个、第五个神经元,然后再GPU上对两边的计算结果进行合并。
△PowerInfer混合计算的方式
PowerInfer的整体架构
总体而言,PowerInfer利用基于稠密模型的稀疏激活及其引入的局部性特性,开发出了一种创新的CPU/GPU混合推理引擎。
在接入一个大型语言模型(LLM)时,PowerInfer首先在离线阶段对模型的预测路由模块进行训练,并深入分析模型的激活特征。
同时,结合目标硬件的带宽和容量等关键信息,计算出最佳的神经元放置策略。
在此基础上,PowerInfer会根据这些计算结果,将神经元优化地分布在内存或显存中。
在在线推理阶段,CPU和GPU分别处理存储在其内存中的神经元,随后在GPU上对这些独立计算的结果进行高效合并。
△ PowerInfer整体架构图
总结与展望
对于端侧用户而言,PowerInfer的高效推理框架打开了新的可能性。
首先,它使得个人电脑用户能够在本地运行先进的大型语言模型,而无需昂贵的专业硬件。
这不仅促进了人工智能应用的普及化,也为爱好者、研究人员和小型企业提供了前所未有的机会。
在云端部署方面,PowerInfer同样存在巨大的潜力。
现有的云端CPU也有强大的AMX计算单元支持,通过利用CPU、GPU间的异构特征,可以乐观地认为PowerInfer能够使用更少的高端计算卡,做到更高的服务吞吐。
论文地址:
https://ipads.se.sjtu.edu.cn/_media/publications/powerinfer-20231219.pdf