摘要 · 看点
IEEE举办了低功耗计算机视觉挑战赛 (LOW-POWER COMPUTER VISION CHALLENGE, LPCV 2023),颁奖仪式本周在国际顶级体系结构学术会议ESWeek 2023上举行。
本次大赛共有近百个队伍报名参赛,商汤模型工具链联合团队(队名:ModelTC)包揽Rank1-14,以压倒性优势取得冠军,对其他团队保持了超过30%的得分优势。
比赛背景及评分标准
1.1
硬件情况
硬件平台为NVIDIA Jetson Nano 2GB开发板,开启5W mode(不是默认的全功率模式)。
在此状态下,CPU为2*A57,最高约900MHz;GPU为128core Maxwell平台,最高640MHz,等效327GFlops@FP32;DRAM为64bit 1600MHz(3200MT/s),等效25.6GB/s。
1.2
评分标准
score=速度*精度。速度和精度需要同时高于官方的baseline(速度0.108,精度0.50127)。
冠军模型概况
2.1
纸面参数
447M MACs,30.45M Memory Access(即60.9MB的FP16),5.4M参数量。
2.2
测试数据
trtexec测试的裸模型速度6.4ms,LPCV平台测试6.72ms。
达到了41.7%的峰值GPU利用率,36.3%的DRAM IO使用率,基本上达到了理想状态(我们内部测试数据显示,对于CNN结构,NVIDIA GPU的典型峰值利用率是40%左右)。
模型结构说明
3.1
基础知识
对于端上的CV模型来说,访存瓶颈的情况更为常见,其中一些典型的情况是L2和内存发生数据交换,或者是需要开辟一块新的内存。
对于需要持有大尺寸feature/参数的情况下,这两个问题是不可避免的。由于推理的时候计算图是固定的,因此可以使用图论知识得出:“网络持有activation所占显存量”类似于在计算图上求一个割,而实际占用的显存量只需要加上这一个割前后的参数即可得出。
理论上“占有最大显存量的时刻”是activation最大割+前后参数,实际运行中可以通过计算顺序的优化来降低这一占用,即:实际显存开销≤activation最大割+前后参数。换言之,只要极限压缩activation最大割+前后参数,则对于推理时计算顺序的优化可以有更多的选择,更容易跑出硬件的峰值性能。
对于最大割的求解问题,由于分割网络是一个DAG,因此可以直接取负权求最小割,这个问题是可解的,通常是使用网络流算法来求最小割。而本次模型的网络较小,直接口算即可。
此外,对于channel不是8的整数倍,而输入较大的情况,可能会出现访存效率低、整体利用率低的情况。
使用torch.profile观察baseline,发现有两个巨大的开销:res18的最后一次downsample,和输入的一个conv/bn。
对于res18的最后一次downsample,这一层的输入为512*16*16,输出为512*16*16,参数为512*512*3*3,需要hold一份右边分支的输入,大小为256*32*32,总共需要11MB显存。由于baseline使用的PyTorch1.10进行推理,因此没有进行预先的显存分配,需要用empty进行临时分配,因此占用的时间很长(而本身计算反而没有占多少时间)。
输入的第一个conv/bn,同样也有较大的时间开销,原因也是两点:1. 数据不规整,局部性不好,L2-内存交换大 2. 需要新分配内存。
3.2
Encoder部分
基于前面的基础分析,我们遵循”尽量减少最大割“的设计原则,去掉所有的connection,使用vgg-style的直筒网络
降低input size,512→256,降低75%
使用3x3 normal conv,使得计算量与访存量相匹配;去掉pooling
设计6次降采样,stride=64
channel数量选择16/32/64/128/192/256
channel选择128则不吃pretrain,选择512则速度太慢
depth选择2/2/2/2/4/5
将计算权重堆砌在后面,可以增加实际参数量,带来更好的性能与更好的计算局部性,更加efficiency
3.3
Decoder部分
输出面积需要足够的大,因为小类的区域很小,如果输出面积小,那么训练无法提供有效的监督,会导致精度指标不佳,卡在baseline附近上不去
同时输出面积需要尽量的小,因为输出层的计算局部性不佳,且channel不是8的倍数,时间开销很大
实验证明,输入256的前提下,输出stride=4是一个较好的解,精度高于stride=2或stride=8
上采样算子使用deconv(ConvTranspose2D),棋盘格效应在分割任务中影响不大
3.4
网络全貌
前部直筒3x3 conv net,后部deconv,输出layer接分类器
最大割在网络中部,hold的权重只有每个level的输出,都是必要的部分
训练超参
optimizer选择AdamW,20000 iteration,8GPU,每卡batch size16
使用轻度augmentation,最后2000个iter进一步减轻
encoder部分的所有conv layer都使用重参数化
loss使用OHEM
推理部分
5.1
Runtime
使用TensorRT,这是JetPack里面自带的工具,在测试设备上可以直接调用
测试设备是Maxwell架构,不支持int8量化推理,fp16相对于fp32,在算力上也没有区别。但是,fp16可以降低内存IO,使用fp16是有速度收益的
按照比赛要求,由于推理是同步的(sync mode),因此开启useSpinWait选项可以轻微提速
转换指令:
trtexec --workspace=4096 --onnx=xxx.onnx --saveEngine=xxx.trt --best --useSpinWait --outpu tIOFormats=fp16:chw --inputIOFormats=fp16:chw --verbose
5.2
batch选择
由于设备宽度是128,我们的channel为16/32/64/128/192/256,大batch可以提高前部计算的利用率。但同时batch如果过大,会导致内存不足,发生swap交换。因此折中选择了batch=4。
5.3
后处理
模型输出尺寸小于GT,需要添加一个上采样的后处理。bilinear对于边界的处理更加smooth,这样会导致小类被大类“侵害”。因此我们使用了bicubic,获得更加清晰的类别边界。由于我们模型的输出尺寸是64x64,选择了多步后处理,每一步bicubic都只做长宽*2,能略微提高一些精度。
总结
6.1
score及排名
Solution榜上,我们ModelTC拿下Rank1-14,认证为冠军 + extra award
Team榜上,比第二名高出约30%
在国际顶级体系结构学术会议ESWeek2023上公布冠军,并举行颁奖仪式
获奖证书
开源代码
https://github.com/ModelTC/LPCV_2023_solution
关于我们
ModelTC团队
ModelTC团队致力干打造高效、智能的AI模型开发和部署工具,帮助企业和组织更轻松地实现AI愿景。
我们的团队由一群充满激情和创新精神的工程师和科学家组成,专注于解决AI开发中的各种挑战,包括模型训练、优化、部署等方面。我们的目标是通过提供强大的工具和技术支持,使得AI技术的应用变得更加广泛和普及化。
王意如
商汤科技
王意如,商汤科技算法研究员,毕业于北京航空航天大学;致力于探索低延迟模型从few shot到海量工业数据集的性能上限,擅长对算力进行高效的组织与运用,力求解决Deep Learning理论在落地时遇到的实际问题,多次在极低算力平台上完成整体方案的设计与部署。已有6篇论文在CVPR、ICCV等会议发表;担任CVPR、ICCV、ECCV、TKDE、TNNLS、Neural Networks等会议期刊的审稿人。
龚睿昊
商汤科技
龚睿昊,商汤科技模型工具链团队高级研究经理,北京航空航天大学博士;负责模型压缩和软硬件协同技术体系,通过算法和工具实现规模化工业落地,支持智慧城市、智能驾驶、AIOT、手机场景等大量业务模型的轻量化生产;致力于ML+System的综合效率提升,在ICLR、NeuIPS、CVPR、ICCV等期刊会议发表近20篇论文。
浦一凡
清华大学
浦一凡,清华大学在读博士生,研究兴趣包括计算机视觉、机器学习、高效神经网络等。
联系客服