T-MAC 是一种转变的基于查找表(LUT)的顺序,专为在 CPU 上高效实践低比特大型言语模子(LLMs)推理而诡计,无需权重反量化【DVH-417】こだわりの手コキ 4時間SP 5 30人のハンドメイド,维持搀杂精度矩阵乘法(mpGEMM),显耀裁汰了推理支出并晋升了筹画速率。
为增强开采上的智能性,在边际开采部署大型言语模子(LLMs)成为了一个趋势,比如微软的 Windows 11 AI + PC。
现在部署的大言语模子多会量化到低比特。关联词,低比特 LLMs 在推理过程中需要进行低精度权重和高精度激活向量的搀杂精度矩阵乘法(mpGEMM)。现存的系统由于硬件短缺对 mpGEMM 的原生维持,不得不将权重反量化以进行高精度筹画。这种曲折的方式导致了显耀的推理支出,何况无法跟着比特数进一步裁汰而取得加快。
为此,微软亚洲参谋院、中国科学时间大学、中国科学院大学的参谋东说念主员结伙开发了 T-MAC。T-MAC 遴荐基于查找表(LUT)的筹画范式,无需反量化,径直维持搀杂精度矩阵乘,其高效的推感性能以偏激和洽且可彭胀的特点为在资源受限的边际开采上内容部署低比特 LLMs 铺平了说念路。
代码:https://github.com/ microsoft / T-MAC
亚州情色论文:https://www.arxiv.org/ pdf/2407.00088
此外,面前大模子的部署巨额依赖于专用加快器,如 NPU 和 GPU 等,而 T-MAC 不错解脱专用加快器的依赖,仅运用 CPU 部署 LLMs,推理速率以至大概进步归拢派上的专用加快器,使 LLMs 不错部署在种种包括 PC、手机、树莓派等边际端开采。T-MAC 现已开源。
在 CPU 上高效部署低比特大言语模子
T-MAC 的要津转变在于遴荐基于查找表(LUT)的筹画范式,而非传统的乘累加(MAC)筹画范式。T-MAC 运用查找表径直维持低比特筹画,从而抛弃了其他系统中必须的反量化 (dequantization) 操作,何况显耀减少了乘法和加法操作的数目。
经过实验,T-MAC 展现出了不凡的性能:在配备了最新高通 Snapdragon X Elite 芯片组的 Surface AI PC 上,3B BitNet-b1.58 模子的生成速率可达每秒 48 个 token,2bit 7B llama 模子的生成速率可达每秒 30 个 token,4bit 7B llama 模子的生成速率可达每秒 20 个 token。
这以至卓著了 NPU 的性能!
当部署 llama-2-7b-4bit 模子时,尽管使用 NPU 不错生成每秒 10.4 个 token,但 CPU 在 T-MAC 的助力下,仅使用两核便能达到每秒 12.6 个 token,最高以至不错飙升至每秒 22 个 token。
这些都远超东说念主类的平均阅读速率,比较于原始的 llama.cpp 框架晋升了 4 至 5 倍。
即使在较低端的开采如 Raspberry Pi 5 上,T-MAC 针对 3B BitNet-b1.58 也能达到每秒 11 个 token 的生成速率。T-MAC 也具有显耀的功耗上风:达到换取的生成速率,T-MAC 所需的中枢数仅为原始 llama.cpp 的 1/4 至 1/6,降粗劣耗的同期也为其它应用留住筹画资源。
值得防范的是【DVH-417】こだわりの手コキ 4時間SP 5 30人のハンドメイド,T-MAC 的筹画性能会跟着比特数的裁汰而线性提高,这一兴隆在基于反量化去扫尾的 GPU 和 NPU 中是难以不雅察到的。但 T-MAC 大概在 2 比特下扫尾单核每秒 10 个 token,四核每秒 28 个 token,大大卓著了 NPU 的性能。
图 1 BitNet on T-MAC vs llama.cpp on Apple M2图 2 在不同端侧开采 CPU(Surface Laptop 7, NVIDIA AGX Orin, Apple M2-Ultra)的各核数下 T-MAC 和 llama.cpp 的 token 生成速率可达 llama.cpp 的 4-5 倍。达到换取的生成速率,T-MAC 所需的中枢数仅为原始 llama.cpp 的 1/4 至 1/6
矩阵乘不需乘,只需查表 (LUT)
关于低比特参数 (weights),T-MAC 将每一个比特单独进行分组(举例,一组 4 个比特),这些比特与激活向量相乘,事前筹画扫数可能的部分和,然后使用 LUT 进行存储。
之后,T-MAC 遴荐移位和累加操作来维持从 1 到 4 的可彭胀位数。通过这种顺序,T-MAC 拆除了 CPU 上驱散不高的 FMA(乘加)教唆,转而使辛勤耗更低驱散也更高的 TBL / PSHUF(查表)教唆。
图 3 搀杂精度 GEMV 基于现存反量化的扫尾范式 vs T-MAC 基于查找表的新范式以比特为中枢的筹画,取代以数据类型为中枢的筹画
传统的基于反量化的筹画,内容上所以数据类型为中枢的筹画,这种方式需要对每一种不同的数据类型单独定制。
每种激活和权重的位宽组合,如 W4A16(权重 int4 激活 float16)和 W2A8,都需要特定的权重布局和筹画内核。
举个例子,W3 的布局需要将 2 位和另外 1 位分开打包,并运用不同的交错或混洗顺序进行内存对皆或快速解码。然后,相应的筹画内核需要将这种特定布局解包到硬件维持的数据类型进行实践。
而 T-MAC 通过从比特的视角不雅察低比特矩阵乘筹画,只需为单独的一个比特诡计最优的数据结构,然后通过堆叠的方式彭胀到更高的 2/3/4 比特。
同期,关于不同精度的激活向量(float16 / float32 / int8),仅有构建表的过程需要发生变化,在查表的时候不再需要谈判不同的数据结构。
图 4 以比特为中枢的查表筹画搀杂精度 GEMV同期,传统基于反量化的顺序,从 4-比特裁汰到 3/2/1-比特时,尽管内存占用更少,但是筹画量并未减小,而且由于反量化的支出不减反增,性能反而可能会更差。
但 T-MAC 的筹画量跟着比特数降粗劣够线性减少,从而在更低比特带来更好加快,为最新的责任 BitNet,EfficientQAT 等发布的 1-比特 / 2-比特模子提供了高驱散的部署决策。
图 5 使用不同端侧开采 CPU 的单核,T-MAC 在 4 到 1 比特的搀杂精度 GEMV 算子相较 llama.cpp 加快 3-11 倍。T-MAC 的 GEMM 耗时能跟着比特数减少线性减少,而基于反量化的 llama.cpp 无法作念到(1 比特 llama.cpp 的算子性能由其 2 比特扫尾推算得到)
高度优化的算子扫尾
基于比特为中枢的筹画具有好多上风,但将其扫尾在 CPU 上仍具有不小的挑战:
(1)与激活和权重的一语气数据探访比较,表的探访是当场的。表在快速片上内存中的驻留关于最终的推感性能尤为紧要;
(2)关联词,片上内存是有限的,查找表(LUT)顺序比较传统的 mpGEMV 增大了片上内存的使用。这是因为查找表需要保存激活向量与扫数可能的位模式相乘的驱散。这比激活自己要多得多。
图 6 T-MAC 与 llama.cpp 在筹画数据流上的不同为此,微软亚洲参谋院的参谋员们深刻探究了基于查表的筹画数据流,为这种筹画范式诡计了高效的数据结构和筹画历程,其中包括:
1. 将 LUT 存入片上内存,以运用 CPU 上的查表向量教唆(TBL / PSHUF)晋升当场访存性能。
2. 改变矩阵 axis 筹画规章,以尽可能晋升放入片上内存的有限 LUT 的数据重用率。
3. 为查表单独诡计最优矩阵分块(Tiling)方式,说合 autotvm 搜索最优分块参数
4. 参数 weights 的布局优化
a)weights 重排,以尽可能一语气探访并晋升缓存掷中率
b)weights 交错,以晋升解码驱散
5. 对 Intel / ARM CPU 作念针对性优化,包括
a)寄存器重排以快速建筑查找表
b)通过取平均数教唆作念快速 8-比特累加
参谋员们在一个基础扫尾上,一步步应用多样优化,最终相干于 SOTA 低比特算子取得显耀加快:
图 7:在扫尾多样优化后,T-MAC 4-比特算子最终相干于 llama.cpp 取得显耀加快告白声明:文内含有的对外跳转荟萃(包括不限于超荟萃、二维码、口令等风物)【DVH-417】こだわりの手コキ 4時間SP 5 30人のハンドメイド,用于传递更多信息,精真金不怕火甄选时刻,驱散仅供参考,IT之家扫数著述均包含本声明。
声明:新浪网独家稿件,未经授权不容转载。 -->