题目要求:模型有 N 层,每层必须从给定的若干量化方案中选择一种。每种方案带来该层的精度损失 loss 与内存占用 mem。希望在满足总精度损失不超过阈值 T 的前提下,使总内存占用最小。
这是一个典型的相关算法:多重选择背包(Multiple-Choice Knapsack Problem, MCKP)
深度学习模型的推理量化问题,该模型包含多个全连接层,每个层可以选择不同的量化方案(16−bit量化、8−bit量化),不同方案会带来不同的内存占用和精度损失。
需要选择模型最优的量化方案组合,在满足总精度损失约束的前提下最小化内存占用。
本题考虑16bit,8bit量化两种场景
在给定的如下条件:
每层在不同位宽下的精度损失(如8位量化时,第i层的精度损失为lossi)
每层在不同位宽下的内存占用(如8位量化时,第i层的内存占用为memi)
模型整体的精度损失不能超过阈值T
请设计一个算法,为每层选择最优量化位宽,使得总内存占用最小且满足总精度损失小于T。
第一行:整数L(层数)和浮点数T(精度损失阈值)
接下来L行,每行描述一层的量化选项:
整数K(该层可选的量化位宽数量)
K组数据,每组包含:位宽描述字符串(8bit和16bit)、精度损失(浮点数)、内存占用(浮点数)
最优总内存占用(保留两位小数)
输入
3 0.3
2 8bit 0.2 100.0 16bit 0.1 200.0
2 8bit 0.3 150.0 16bit 0.1 300.0
1 8bit 0.1 150.0
输出
650.00
说明
3层,满足精度阈值0.3
第一层,2种量化位宽数量,8bit 精度损失0.2,内存100;16bit 精度损失0.1,内存200
第二层,2种量化位宽数量,8bit 精度损失0.3,内存150;16bit 精度损失0.1,内存300
第三层,1种量化位宽数量,8bit 精度损失0.1,内存150
满足0.3精度损失的最优内存占用为650
第一层16bit,精度损失200
第二层16bit,精度损失300
第三层8bit,精度损失150
总共内存占用200+300+150=650
输入
2 0.5
2 8bit 0.2 100.0 16bit 0.1 200.0
2 8bit 0.3 150.0 16bit 0.15 300.0
输出
250.00
说明
2层,精度阈值为0.5
第一层,2种量化位宽数量,8bit 精度损失0.2 内存100;16bit精度损失0.1 内存200
第二层,2种量化位宽数量,8bit 精度损失0.3 内存150;16bit精度损失0.15 内存300
满足0.5精度损失的最优内存占用为250
第一层8bit,精度损失0.2,内存占用100
第二层8bit,精度损失0.3,内存占用150
总共内存占用100+150=250