澎峰科技发布大模型推理引擎PerfXLLM

自从2020年6月openai发布chatgpt之后,基于transformer网络结构的语言大模型(llm)引发了全世界的注意与追捧,成为了人工智能领域的里程碑事件。
但大模型推理所需要的巨额开销也引发了相关研究者的关注。如何高效地进行推理,并尽可能地减少成本,从而促进大模型应用的落地成为了目前的关键问题。
于是,澎峰科技研发了一款大模型推理引擎—perfxllm,并且已经在高通的骁龙8gen2平台实现了应用。接下来将分为四个部分进行介绍,第一部分将介绍perfxllm的整体架构设计,第二部分将展示手机端的性能表现,第三部分将详细地阐述手机端的推理优化方案,最后在第四部分将介绍perfxllm的未来规划。
一、perfxllm整体架构
目前大模型推理过程主要放在服务器或者云上进行处理。用户发出请求,服务器进行响应,通过gpu等高性能计算部件完成推理计算,并通过网络将结果传输给用户。而随着移动端设备硬件能力的不断进步,并且用户原始数据可能存在敏感隐私信息导致对安全问题有所顾虑,大模型在移动端的应用和落地也成为了实际需求之一。为了兼顾两部分的需求,perfxllm设计上采用了云端一体的架构理念。
如上图所示,当模型经过解析量化之后被perfxllm的推理引擎加载至内存中。不管是云侧还是端侧都是调用同样的一套推理引擎代码。有所区别的地方在于云侧需要进行额外的serving模块,从而获得更高的硬件利用率和qps响应。再聚焦到底层kernel,perfxllm中开发了一套针对大模型推理的算子库,可以支持gpu、cpu等多种硬件设备。
二、perfxllm应用在手机端
目前,perfxllm针对高通骁龙8gen2芯片进行了定制优化,高通8gen2芯片进行了定制优化,对llama模型采用了awq的int4量化方法,并为模型开发了perfxchat app。生成速度为6.7 token/s。模型内存占用为3.7gb。而llama.cpp的生成速度仅为3.2 token/s。
具体而言,通过芯片上的andreno gpu进行加速,使用了opencl编程模型。首先对llama模型进行int4量化,所采用的方式是awq量化方法。而后针对llama模型中最耗时的kernel进行了优化。手机端的输入token和生成token较少时,模型主要瓶颈在于gemm算子和gemv算子,研发团队对这两个算子进行了手工调优。模型使用效果如下。
三、手机端推理优化方案介绍
由于手机端的硬件性能与服务器端差距较大,因而在手机端如何将大模型运行起来,并带给用户流畅的使用体验并不是一件容易的事情。为了对手机端的大模型推理进行优化,perfxllm目前主要采用的手段有低精度量化、算子融合以及核心算子调优。
3.1.低精度量化
低精度量化指的是将更高精度的数据表示类型转化成低精度的数据表示类型来加快计算过程。常用的低精度量化有fp16、int8、int4等。通过低精度的量化,可以减少访存开销和内存空间,通过特殊计算单元加快运算。因而可以获得比原精度更高的性能表现。perfxllm需要将7b的模型运行在手机上。如果是fp16的模型,则需要大概14gb的内存占用。但是目前市面上手机内存一般不超过16gb,再减去系统本身所需要的内存占用以及其他app可能需要的内存空间,必须使用低精度量化才能满足。
perfxllm采用的是awq量化方法,只对权重进行量化。对于fp16的模型参数,将其量化成int4类型,内存占用减少到原来的1/4。所采用的group_size为128,只需要额外存储1%左右的scale和zero参数。
3.2.算子融合
算子融合是将多个算子融合成一个,从而减少中间结果的数据读取和写入操作,并且也能有效地减少kernel launch所需要的开销。为了提高推理速度,perfxllm进行的算子融合操作主要体现在三个部分。第一部分是将残差网络的加法操作和归一化操作进行融合,避免了中间结果在全局内存中的搬运;第二部分是将生成qkv的三次矩阵乘操作融合成一次,使用更大维度的矩阵乘法操作,从而更充分地利用硬件性能;第三部分是将self attention中的操作全部融合成一个算子,这些操作包含针对qk的旋转编码,qkv的两次矩阵乘法以及中间的softmax操作。具体的示意图如下。
3.3.核心算子调优
语言大模型中所需要的算子较少,并且绝大部分性能开销都集中在1-2个算子上,因而针对核心算子的细致调优便显得尤为关键。在手机端,当生成token数量较少时,attention相关算子的耗时占比非常少,而gemm(通用矩阵乘法)类的算子耗时几乎占据了整个推理过程。对于大模型推理而言,一般会分为两个过程。在第一个过程中,输入的token数量大于1,对应的算子即gemm。第二个过程中,输入的token数量恒定为1,对应的算子即gemv(矩阵向量乘法)。因此,推理优化的核心问题在于如何提高gemm和gemv的性能。perxllm对这两个算子进行了细致的优化。
1)针对gemm算子。首先介绍gemm算子的定义,给定矩阵a和b,其维度分别为[m, k]和[k,n],将两者相乘得到矩阵c,维度为[m, n]。根据输入token数量的不同,perfxllm将其分为两种情况进行优化。当输入token数量较少时,矩阵b是一个高瘦矩阵,gemm变成访存密集型算子。当输入token数量较多时,gemm是一个计算密集型算子。针对两种不同的情况,perfxllm采用了两种不同的分块模式,将所需要的数据放置在共享内存之中,以尽可能地减少对全局内存的数据读取。此外,采用了向量化访存来提高访存效率,通过循环展开来避免流水线阻塞提高指令并行度,进行参数调优来获得更好的并行能力和分块配置参数。具体的性能表现如下。固定m为12288,k为4096,n变化。
2)针对gemv算子。需要说明的是,gemv可以视作gemm的一种变体,当b矩阵的n等于1时,则gemm转换为gemv算子。gemv是一个典型的访存密集型算子,其优化核心在于如何提高访存效率,并掩盖计算所需要的开销。perfxllm通过向量化访存来提高访存效率,通过循环展开来避免流水线阻塞提高指令并行度。并且针对int4类型的gemv,通过共享内存来存储zero和scale来减少对全局内存的数据访问。此外,对a矩阵的两个维度进行分块来提高并行性。使用image类型来提高对于b向量的访存性能。
以上一些披露的信息,表明了perfxllm已经完成了整个计算系统架构的设计,并将紧密跟随大模型算法的更迭速度,这弥补了计算芯片迭代慢的弊端(>2年)。
四、未来规划
4.1.更多的模型支持
4.2.支持更多的硬件
4.3.性能优化
4.4.框架优化
欢迎联系我们wangjh@perfxlab.com。一起探索大模型的软件基础建设。
原文标题:澎峰科技发布大模型推理引擎perfxllm
文章出处:【微信公众号:澎峰科技perfxlab】欢迎添加关注!文章转载请注明出处。

联想小新M7268W评测 在输出性能方面符合心理预期
各国新工业战略分解 中国制造业如何应对
小米11 Pro真机图曝光:后摄横置矩形排列
ELAF-1250N-T30006压力传感变送器的分类及工作原理
VR越来越普及,交通行业也把VR延伸到了重要的领域
澎峰科技发布大模型推理引擎PerfXLLM
智米超声波加湿器体验 一件提升桌面气质的单品
万兆铜缆交换机与万兆光纤交换机有什么区别?该如何选择?
影子物联网存在怎样的风险
汽车智能化时代,电感如何应对智能座舱升级
2024年多模态时代将至,微美全息(WIMI.US)打造强大算力底座引领AI热潮新篇章
微软验证器BetaiOS版新增密码管理器:替代iCloud钥匙串,所有设备同步
光驱类型
中国手机制造商vivo在印度投39.8亿作手机整机制造和零售品牌企业建设
让您无忧无虑的DTU产品,稳定、可靠、易于操作
机床电气设备故障问题的原因_机床电气设备故障诊断及优化措施
华为“闪存门”事件或使小米夺回国产老大
TI推出新型低功耗音频编解码器
QC,IQC,IPQC,QA到底有啥区别?
车载摄像头常见知识与故障处理