本题要求将输入向量与权重矩阵分别做 INT8 非对称量化(per-tensor),用量化后的整数直接做全连接(矩阵–向量乘),并用反量化后的结果评估与原始浮点计算之间的误差。
核心要点如下:
在移动设备或物联网设备上部署深度学习模型时,浮点运算通常会带来较高的计算量、内存占用和能耗。INT8 非对称量化可以将全连接层中的浮点计算转换为整数计算,从而提升推理效率。采用这种方式后,模型数据由 32bit 转换为 8bit,模型大小可缩小至原来的 41;同时,整数运算指令通常能够获得约 2~4 倍于浮点指令的执行速度。该方法也广泛用于移动端 NLP 模型,例如 BERT 最后一层分类头。
本题需要分别对输入向量 x 和权重矩阵 W 进行 INT8 非对称量化,并基于量化结果完成不含偏置的全连接层计算。此外,还需要将量化后的数据反量化回浮点形式,通过比较反量化计算结果与原始浮点计算结果,评估量化造成的误差。
具体需要完成以下两部分:
注:本题中的全连接层不考虑偏置。
对于任意待量化张量 v,其中 v 可以是输入向量 x,也可以是权重矩阵 W,先根据整个张量中的最小值和最大值计算尺度 scalev。
当 max(v)=min(v) 时:
scalev=255max(v)−min(v)如果 max(v)=min(v),即张量 v 中的所有元素完全相同,则定义:
scalev=0在 scalev=0 时,张量中的每个元素按照下式量化到整数区间 [−128,127]:
vquant=clamp(round(scalevv−min(v))−128,−128,127)当 scalev=0 时,张量中的量化结果统一为:
vquant=−128其中,round() 使用就近取偶规则:
round(x)=⎩⎨⎧⌊x⌋,⌊x⌋+1,2⋅⌊2x+1⌋,{x}<21,{x}>21,{x}=21.这里:
{x}=x−⌊x⌋⌊x⌋ 表示向下取整。
截断函数 clamp(t,lo,hi) 定义为:
clamp(t,lo,hi)=⎩⎨⎧lo,hi,t,t<lo,t>hi,else.得到 vquant 后,需要按照原量化尺度将其恢复为浮点数据。
若 scalev=0,反量化结果为:
vdequant=(vquant+128)⋅scalev+min(v)如果 scalev=0,则有:
vdequant=min(v)由于此时原张量中的全部元素都相同,因此该值就是对应的原始输入值。
设输入向量为 x,权重矩阵为 W,全连接层输出记为 Y。本题不使用偏置,因此计算方式为:
Y=x⋅WT使用量化后的整数 xquant 和 Wquant 时,同样按照上述全连接层结构进行计算,所得结果作为第一行输出。
首先使用原始浮点输入 x 和权重矩阵 W 得到:
Yfloat=x⋅WT再使用反量化后的 xdequant 与 Wdequant 得到:
Ydequant=xdequant⋅WdequantT设权重矩阵 W 的行数为 m,则两组输出之间的均方误差(MSE)定义为:
MSE=m1i=0∑m−1(Yfloat,i−Ydequant,i)2最终需要将 MSE×100000 四舍五入为整数后输出。
第一行输入一个整数 n,表示输入向量 x 的维度。
第二行输入 n 个浮点数,依次表示输入向量 x 中的各个元素。
第三行输入两个整数 m 和 n,表示权重矩阵 W 的维度为 m×n。
接下来输入 m 行,每行包含 n 个浮点数,共同组成权重矩阵 W。
第一行输出 m 个整数,表示使用量化后的 xquant 和 Wquant 进行全连接层计算得到的结果。
第二行输出 1 个整数,表示量化误差。该整数应由 MSE×100000 四舍五入后得到。
输入
1
3.14
1 1
2.71
输出
16384
0
说明
输入向量和权重矩阵都只有一个元素,因此二者的 scale 均为 0,量化值均为 −128。整数全连接结果为 16384;反量化能够恢复原始值,因此 MSE 为 0。
输入
2
0.0 255.0
1 2
0.0 255.0
输出
32513
0
说明
输入向量和权重矩阵中的两个端点值可分别量化为 −128 和 127,整数全连接结果为 32513。反量化后数据与原始数据一致,因此 MSE 为 0。
输入
2
0.0 255.0
2 2
0.0 255.0
127.5 127.5
输出
32513 0
812812500
说明
权重矩阵按照整个矩阵的最小值和最大值进行量化,其中第二行的两个 127.5 量化后均为 0,因此对应的整数全连接结果为 0。反量化后该部分数据与原始值存在差异,所以最终 MSE 不为 0。
输入
4
-1.2 0.3 2.7 4.1
3 4
0.5 -0.8 1.7 2.9
-2.4 1.1 0.0 3.3
1.2 2.2 -1.5 0.7
输出
20023 29629 -12475
38
说明
该组数据同时包含正数、负数和 0,且权重矩阵各行的数据分布不同。量化后的整数数据进行全连接计算得到第一行结果;反量化数据与原始浮点数据存在少量误差,计算 MSE 并乘以 100000 后四舍五入得到 38。
© CodeFun2000 · 使用条款
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册