关于nlp:搜索语义模型的大规模量化实践

67次阅读

共计 6157 个字符,预计需要花费 16 分钟才能阅读完成。

作者 | 把酒问青天

导读 

通过近几年的技术演进,语义模型在百度搜寻场景中被宽泛地利用,耗费了大量的 GPU 资源,模型压缩技术也随之失去大量钻研和实际。通过兼顾推理性能、业务成果和迭代效率的优化指标,咱们胜利地将 INT8 量化技术大面积地利用到了搜寻场景中,极大地提高了资源效力。此外,目前大模型正在被钻研和利用,算力资源曾经成为瓶颈,如何以更低的老本进行落地是一个十分热点的问题。基于对模型压缩技术的实际和积攒,咱们可能更好地助力大模型的摸索和利用。

全文 6287 字,预计浏览工夫 16 分钟。

01 搜寻语义模型现状

ERNIE: Enhanced Representation through Knowledge Integration 是百度在 2019 年 4 月的时候,基于 BERT 模型做的进一步优化,在中文的 NLP 工作上失去了 state-of-the-art 的后果。

近年来,ERNIE 1.0/2.0/3.0 等语义模型在搜寻各个重点业务场景下失去了广泛应用,包含相关性、排序等多个子方向,耗费了大量 GPU 资源。每个业务方向个别由多个模型组成链路来实现最终计算,整体搜寻业务所波及的模型数量多、迭代快。目前,线上全流量模型超过几百个,月级迭代近百次。语义模型的大量利用对搜寻产生了微小影响,相干业务指标对模型精度的变动十分敏感。总的来说,在模型压缩技术的工程实际中,推理性能、业务指标和迭代效率三者的优化指标该当对立思考:

1、推理性能:采纳 INT8 量化,ERNIE 模型的性能减速均匀达 25% 以上。其次要影响因素蕴含输出数据量大小(batch size、sequence length 等)、暗藏节点数、非标准网络结构与算子交融优化。

2、业务指标:以某相关性场景下的 ERNIE 模型为例,模型输入在数值上的 diff 率不超过 1%,在离线测试集上的评估指标达到简直无损。

3、迭代效率:离线量化达小时级,流水线式疾速产出量化模型,不阻塞模型全生命周期的相干环节(如模型多版本迭代、小流量试验、全量化推全等)。

02 模型量化简述

简而言之,模型量化就是将高精度存储(运算)转换为低精度存储(运算)的一种模型压缩技术。劣势如下:

  • 更少的存储开销与带宽需要:如每层权重量化后,32 位比特压缩到 8 比特甚至更低比特,模型占用空间变小;内存拜访带宽的压力天然也会变小。
  • 更快的计算速度:单位工夫内执行整型计算指令比浮点计算指令更多;另,英伟达安培架构芯片还有专用 INT8 Tensor core。

如果咱们从不同的技术角度来对待它,那么:

  • 从映射函数是否是线性,分为线性和非线性。非线性量化计算较为简单,个别次要钻研线性量化,其公式如下:

    Q = clip(round(R/S) + Z),其中 R: high precision float number,Q:quantized integer number,s:scale,z:zero point。

  • 从零点对应地位辨别,线性量化又分为对称和非对称。

△1:对称与非对称量化

以矩阵乘为例,计算公式如下:

𝑹𝟏𝑹𝟐 = 𝒔𝟏𝑸𝟏𝒔𝟐𝑸𝟐 = 𝒔𝟏𝒔𝟐𝑸𝟏𝑸𝟐

𝑹𝟏𝑹𝟐 = 𝒔𝟏(𝑸𝟏 − 𝒛𝟏) 𝒔𝟐(𝑸𝟐 − 𝒛𝟐) = 𝒔𝟏𝒔𝟐𝑸𝟏𝑸𝟐 − 𝒔𝟏𝒔𝟐𝒛𝟐𝑸𝟏 − 𝒔𝟏𝒔𝟐𝒛𝟏𝑸𝟐 + 𝒔𝟏𝒔𝟐𝒛𝟏𝒛𝟐

在理论利用中,两者精度差别不大,对称量化在推理上更容易实现、计算更快。

  • 从量化粒度上,分为逐层量化、逐组量化和逐通道量化。第一种在推理上最易实现,性能更好,个别利用在输出矩阵。第二和第三种在推理上难实现,但业务精度好,个别利用在权重矩阵。
  • 从浮点矩阵中统计最大值是否截断上,分为饱和量化和非饱和量化。个别权重采纳非饱和量化;输出 / 输入矩阵数据分布不平均,采纳饱和量化。
  • 从是否参加训练上,分为训练后量化(Post-Traning Quantization,PTQ)和量化感知训练(Quantization Aware Training, QAT)。从实际上看,前者性价比最高,在精度损失可承受范畴内可能疾速产出量化后模型,并取得不错的性能减速;后者须要联合训练来看,往往是在 PTQ 造成精度损失过大时采取的进一步伎俩。

△图 2:PTQ 与 QAT 流程

  • 从是否在推理中动静生成尺度因子,分为在线(动静)量化和离线(动态)量化。在线量化须要在推理过程中依据理论激活计算量化参数,会影响推理速度。

03 训练后量化

结合实际的利用场景,咱们率先对训练后 INT8 量化技术进行了粗疏钻研和大规模实际。本文中波及到的硬件测试环境为 GPU A10,CUDA 11.2,TensorRT8,工具链包含 PaddlePaddle、PaddleInference、PaddleSlim 等。

3.1 量化损失的精细化剖析

低精度示意空间远远小于高精度示意空间,无论采纳何种校准办法和校准数据,量化肯定会带来不同水平上的数值误差。为了尽可能的减小误差、不影响模型业务指标,那么误差的起源和解决方案该当被全面粗疏地探索与剖析。比方,哪些算子适宜量化,每个算子量化后带来的端到端误差如何掂量,是否将误差较大的局部算子不作量化等问题。

3.1.1 量化算子的抉择

通常状况下,应该优先对计算密集型算子(如 mul、matmul;conv2d、depthwise\_conv2d;pooling(pool2d);concat;elementwise\_add 等)进行量化,对非线性算子(如 softmax,tanh,sigmoid,GeLU 等)和非计算密集 layer 的算子不做量化。

△图 3:ERNIE 模型通过算子交融后的 FP16 推理耗时占比状况

在 ERNIE 模型推理时,利用性能剖析工具(nsight 等)察看会发现,FC(对应 paddle 中 mul)相干 kernel 耗时占比超过 70%,BGEMM(对应 paddle 中 matmul)相干 kernel 占比靠近 10%。因而能够重点从这两类算子动手进行量化,某线上 ERNIE 模型(输出数据 batch size=10,max sequence length=128)的测试状况如下:

△图 4:ERNIE 模型 FP16 和 INT8 推理时性能减速与离线指标比照

对于 FC,如果依照在推理时算子交融后网络中所处的位进行划分的话,能够人为地分成 4 类:

  • QKV FC:推理时 Q、K、V 地位的 3 个 FC 会被交融在 1 个 kernel 进行计算,后续将其作为一个整体来对待。
  • multi-head att-FC:通过多头注意力计算后的线性算子。
  • FFN FC:FFN 中的 2 个 FC,第 1 个 FC 和激活函数(如 relu)会交融成 1 个 kernel,第 2 个 FC 是独立的 kernel。
  • 业务 FC(未体现在示意图中):在主体 ERNIE 构造后减少若干 FC 进行微调,利用于不同的业务场景。推理时可能也会有算子交融操作。

之所以依照上述形式进行划分:一是划分粒度更精密,便于察看和断定量化误差起源;二是尽可能与以后的推理实现逻辑保持一致,缩小不必要的简单改变。在算子类别 + 数量的多重组合下,更细粒度的量化,能更好地均衡性能减速和精度。

3.1.2 量化算子的敏感性

某层算子量化不当所带来的损失会在层间逐步传递累积,模型层数越深、宽度越大,损失可能也会越大。每层内算子的量化误差对端到端指标的影响也是不一样的。在实践中,不同业务场景或者不同模型版本之间,量化后的业务指标损失不同,不肯定都能在可承受范畴内。这种状况下,最间接的办法是找出造成损失较大的算子,并将其跳过不做量化。被量化的算子缩小,损失也会随之升高。一个 12 层 ERNIE 模型构造中至多有 12* 6 个 FC 算子,绝大部分按 INT8 计算,只有几个仍按 FP16 计算,其性能减速变动不会大,模型指标损失却能更小。通过遍历每个 FC 算子对模型指标的敏感性大小,就能断定哪些 FC 能够不做量化。

△图 5:量化算子的敏感性分析方法

其中,打 skip quant 标记的粒度与上一节中提到的 FC 划分办法保持一致,比方 QKV 内 3 个 FC 全量化或全不量化。EMD 间隔是指量化前后在某个小数据集上的输入值之间的散布间隔,间隔越小则被认为敏感性越强。

案例 1 :线上某 ERNIE 模型通过屡次微调迭代后,全 FC 量化后的离线评估指标降落了约 1.4%。利用敏感性分析方法后,跳过前 8 个敏感 FC 后,量化模型的离线评估指标损失曾经很小,性能减速仍有 30% 以上。

△图 6:全 FC 量化与跳过 4 个 FC 不作量化时的推理减速与离线指标比照

案例 2 :线上某 ERNIE 模型,全 FC 量化后的离线评估指标降落了 2% 左右。只跳过前 1 个敏感 FC 后,就很好地拉回了离线评估指标。

△图 7:全 FC 量化与跳过 1 个 FC 不做量化时的推理减速与离线指标比照

通过这个办法,咱们能很好地兼顾性能减速和模型精度。通过大量试验后发现,FFN 内 FC 往往更加敏感,对业务指标的影响更大。

3.1.3 数值统计分析

量化过程实质上是寻找适合的映射函数,让量化前后的输出 / 出矩阵或权重矩阵更加拟合。溯源剖析,输出 / 出矩阵和权重矩阵散布状况从根本上决定了量化成果的好坏。对于量化成果极差的模型,个别会对相关矩阵再进行可视化地数值统计分析,这样咱们可能发现是否存在大量异样点,校准算法是否实用等,进而倒推出更优的解决办法。

△图 8:ERNIE 模型某 FC 权重数值散布的直方图统计

3.2 校准数据加强

校准数据的优劣是决定量化损失大小的重要因素之一。

在搜寻某资讯业务场景中,应用了多头输入(一个输入打分对应一个子工作)的 ERNIE 模型,如下:

△图 9:多头输入的模型构造示意图

针对这个模型进行量化时,采纳了训练时局部数据作为校准集,后果发现子工作二的离线成果变得很差。通过分析模型训练微调的过程后,将子工作一和子工作二的训练数据进行等比例混合随机后再作为校准集,量化后的离线成果均失去了满足。

△图 10:数据加强前,子工作一和子工作二在测试集上的打分散布状况

△图 11:数据加强后,子工作一和子工作二在测试集上的打分散布状况

校准数据是从训练 / 测试数据中抽取的一个小汇合,该当尽可能地放弃数据分布的一致性。有些模型的离线测试集并不欠缺,离线指标不能很好的反馈量化损失,也可能会呈现离线成果与在线试验评估不统一的状况,此时能够将在线数据混入离线数据独特作为校准数据。另外,模型迭代通常是在解决 bad case,校准数据中也该当留神 bad case 的比例。

3.3 超参主动寻优

量化包含不同的校准算法(正在应用 avg、abs\_max、mse、KL、hist 等)、校准数据量大小(batch size/num)、是否开启偏置校准等超参,不同模型采纳一组雷同的量化参数,其损失变动也不同,因而超参主动寻优是必不可少的。一方面,通过自动化能够进步迭代效率;另一方面,更大的搜寻空间可能取得比人工调参更优的量化后模型。

△图 12:超参主动寻优办法

具体实现步骤:

  • 抉择初始若干组参数产出量化后模型,推理计算量化前后模型在校准集上的输入值之间的散布间隔(earth mover’s distance,EMD)
  • 依据超参和散布间隔,构建随机树
  • 随机采样若干组不同的参数组合,顺次插入随机树内进行推理并计算相干间隔
  • 依照上一个步骤中散布间隔最短的若干组参数进行理论量化
  • 从第一步再循环执行,直到散布间隔收敛

相比于人工调优,这种办法可能更快地搜查到更优的量化后模型。比方:

△图 13:超参主动寻优实际案例

实际上,同类型业务场景下,模型构造不会有很大变动,屡次微调迭代后,超参主动寻优的参数往往会被锁定在一个小范畴内。因而,咱们会以类漏斗模式进行量化模型寻优,即优先在当时圈定的小范畴参数内遍历量化,损失不满足要求后再进行大范畴的搜寻。

3.4 成果评估

搜寻业务场景多种多样,离线评估形式各异。如果思考量化计划的通用性和多维度评估能力,建设独立量化损失评估指标是必要的。相似于 EMD 的间隔度量,打分分桶散布等办法能够作为辅助性指标来应用。

△图 14:一组模型量化前后在测试集上打分 / 输入的数值 diff 状况

04 量化感知训练

绝对于训练后量化,量化感知训练的模型精度更好,但流程较为简单。个别状况下,量化感知训练作为改善训练后量化损失的进阶技术手段。

4.1 无侵入式量化训练

为了升高量化训练难度,实际上咱们会采纳无侵入式办法,即推理模型 + 训练数据。首先,对推理模型进行梯度复原,转换成参数可训练的网络,并插入 fake quant op 再转换成量化后网络;而后应用量化推理模型对量化后网络进行块量化损失监督,进而升高量化损失。

4.2 全算子量化

因为精度问题,训练后量化中个别只对局部算子做量化。进一步晋升推理性能,对全算子量化的话,须要和量化感知训练联合起来。全算子量化是除了 mul 或者 matmul 算子进行量化外,又减少了 layer norm 相干算子和两头传参过程。

△全算子与局部算子 INT8 量化的模型网络示意图

全算子量化在中文场景下体现出一些特异性:

  • 量化后激活散布异样值多,推理端量化累计误差变大。
  • QKV 的输入激活 scale 值较大,推理端中间层输入为 0,导致精度谬误。

通过摸索,可行的解决方案如下:

  • 先进行训练后量化,采纳直方图校准形式,将激活 scale 值限度在某个较小范畴内。
  • 固定离线量化产出的激活 scale 值,再进行权重逐通道的量化训练。

在搜寻相关性某 ERNIE 模型上,输出数据 batch size=20,max sequence length=128 时,具体试验状况如下:

△图 16:全算子 INT8 量化的性能减速与离线评估试验后果

4.3 SmoothQuant

SmoothQuant 是无训练、放弃精度和通用的训练后量化计划,试图解决大模型(>6.7B)量化问题。简略来说,基于权重易量化、激活不易量化的事实,通过离线的数学等价变换将激活的难度迁徙到权重上,将激活和权重都变得较容易量化。

△17:SmoothQuant 外围原理 [1]

在某些量化损失较大的小模型上,咱们采纳量化感知训练 +SmoothQuant 进行了相干试验,也能有不错的体现。比方:

△图 18:SmoothQuant 试验后果

05 瞻望

目前 INT8 量化技术曾经在线上大规模利用,使整体 GPU 资源利用效率失去了极大晋升,也撑持了更多更简单模型的演进。

通过总结大量实践经验和技术调研,更低比特量化(如 INT4)、INT8 量化 +Token 剪枝多压缩伎俩交融等正在试验和落地中。

因为线上业务子方向泛滥,模型多 & 迭代快,将实践经验形象出通用计划势在必行,建设平台化、流水线式治理模型整个生命周期可能大幅度提高效率。同时,也能够将通用方法论利用到其余模型压缩技术的工程利用上。

近期,大模型相干技术方向的钻研相当炽热,模型压缩也是热点之一。初步调研后,在小模型上无效的技术手段有一部分是能够间接平迁到大模型上的,有一些则须要改良。比方,大模型训练相当简单,量化感知训练看起来不是那么经济。依据相干业界动静,PTQ-Weight Only,LLM.int8(),SmoothQuant 等技术正在被钻研和应用。

——END——

参考资料:

[1]https://arxiv.org/pdf/2211.10438.pdf

举荐浏览:

如何设计一个高效的分布式日志服务平台

视频与图片检索中的多模态语义匹配模型:原理、启发、利用与瞻望

百度离线资源治理

百度 APP iOS 端包体积 50M 优化实际 (三) 资源优化

代码级品质技术之根本框架介绍

基于 openfaas 托管脚本的实际

正文完
 0