深度学习部署技术
深度学习部署技术
Once-for-All: Train One Network and Specialize it for Efficient Deployment
论文地址:https://arxiv.org/abs/1908.09791
为了能最好地适应不同的硬件平台和效率约束(即部署方案),深度学习模型的有效部署需要专门的神经网络。传统方法有使用手动设计或者针对每种情况使用AutoML来搜索专门的神经网络,它们的训练成本随着部署方案的数量线性增长。这里介绍一种将模型训练与模型搜索分离的新方法,训练一个支持多种网络设置(深度,宽度,内核大小和分辨率)的once-for-all网络,无需为每个场景训练专门的模型。在给定部署方案的情况下,可以从once-for-all网络中选择专用子网,无需再次训练,专用模型的训练成本从0(N)减少到0(1)。
介绍
深度神经网络(DNN)模型大小和计算成本的爆炸性增长给如何在不同硬件平台上有效地部署这些深度学习模型带来了新的挑战,因为它们必须满足不同的效率约束,在不同的硬件资源(如片上存储器大小和算术单元的数量等),不同的电池条件或工作负载下,最佳模型会也有很大不同。
考虑到不同的硬件平台和效率限制,研究人员要么设计专门用于移动设备的紧凑模型,要么通过压缩加速现有模型以实现高效部署。但是,为每个部署方案设计专用的DNN耗费人力且计算成本高昂,因为无论是基于人工还是基于AutoML的方法都需要重复网络设计过程并针对每种情况从头开始重新训练设计的网络,随着部署方案数量的增加,总成本呈线性增长,这使得它们无法处理大量硬件设备和高度动态的部署环境(不同的电池条件,不同的工作负载,不同的延迟要求等)。
针对此问题,这里介绍一种新的解决方案,设计一个可以直接部署在不同网络配置下的once-for-all网络,该网络可以灵活地支持不同的深度,宽度,内核大小和分辨率的设置,无需重新训练,仅通过选择该网络的一部分来执行推断。once-for-all的简单示例如图1(左)所示,具体来说,就是将模型训练阶段和模型专门化阶段分开。在模型训练阶段,训练一个once-for-all网络,从中可以生成具有不同网络配置的各种子网络;在模型专门化阶段,为子网络的子集构建准确率表和硬件效率(延迟或能量)表,准确率表可以在所有硬件平台之间共享。子网络的权值不需要再次训练直接来自once-for-all网络,因此该过程速度快,计算效率高。在测试时,给定一个部署场景,只需要查询准确率表和硬件延迟表就可以选择一个专用的子网络,而且成本可以忽略不计。因此,专用神经网络网络设计的成本从O(N)降低到O(1)(图1中)。
在许多硬件平台(CPU、GPU、mCPU、mGPU、FPGA加速器)和效率约束条件下广泛评估了OFA在ImageNet上的有效性。在所有部署方案下,OFA与SOTA硬件感知的NAS方法相比,持续提高ImageNet的准确性,同时将GPU小时数、美元数和二氧化碳排放量节省了几个数量级。在ImageNet移动设置(小于6亿Mac)上,OFA以5.95亿Mac实现了新的SOTA 80.0%的top1精度(图2)。据我们所知,这是SOTA ImageNet top1在移动设置下的精度首次达到80%。
训练once-for-all网络需要联合优化权重以保持大量子网络的准确性,子网络共享权重,但它们不应该相互干扰。针对此问题,本文提出了用于once-for-all网络的渐进收缩算法(progressive shrinking algorithm),即首先训练具有最大深度,宽度和内核大小的神经网络,然后逐步训练网络以支持较小的子网络。这种逐步缩小方案对于防止较小的子网络影响较大子网络的精度至关重要。此外,逐步缩小还可以在大型子网络的帮助下为小型子网络提供良好的初始化和更好的监督,而不是从头开始训练它们。
图1 左:支持多种网络配置的once-for-all网络。中:深度学习部署成本。右:精度-延迟表。
方法
问题定义
训练支持多种网络配置的once-for-all网络的问题可以定义为下式:
Once-for-all网络的权重表示为,网络配置为,表示选择方案,即从Once-for-all网络的权重中选择满足网络配置为的子网络。在这项工作中,探索了卷积神经网络的四个重要维度,即深度,宽度,内核大小和分辨率。总体目标是训练以使每个支持的子网络达到与使用相同网络配置独立训练网络相同的准确度。
训练once-for-all网络
渐进收缩算法。图2是渐进收缩算法的一个示例,这种渐进收缩方案具有三个独特的优势。首先,它使once-for-all网络更容易优化,因为每个子任务比完整任务简单得多。其次,在大型模型的帮助下,小型模型更容易训练。渐进式收缩能够通过保持大型子网络的最重要权重(图5)为小型子网络提供良好的初始化,并通过知识蒸馏提供更好的监控(图2),这比从头开始训练小型子网络更好。第三,逐步缩小给予共享权重的排序并防止较小的子网络影响较大子网络的性能。训练细节如下:
▪弹性分辨率(Elastic Resolution)(图2)。为了支持弹性分辨率,在训练模型时为每批训练数据采样不同的图像尺寸,这是通过修改数据加载器来实现的。
▪弹性内核大小(Elastic Kernel Size)(图3)。在共享kernel权重时引入内核转换矩阵(kernel transformation matrices),即在不同的block之间使用单独的内核转换矩阵,在每个block内,内核转换矩阵在不同的channel之间共享。
▪弹性深度(Elastic Depth)(图4)。保留前D个blocks并跳过最后的N个blocks,。因此,一个深度设置仅对应于block的一个组合。最后,在大型和小型模型之间共享前D个blocks的权重。
▪弹性宽度(ElasticWidth)(图5)。引入一个通道排序操作来支持部分宽度。它根据channel的重要性重新组织channel,channel的重要性是根据信道权重的L1范数计算的。
▪知识蒸馏(Knowledge Distillation)(图2)。在训练once-for-all网络时,使用训练数据给出的hard labels和经过训练的完整网络给出的soft labels。
图2 渐进式收缩过程的示例。
图3:弹性内核大小的内核转换矩阵。
图4:弹性深度训练过程。
图5:弹性宽度渐进收缩过程。
模型部署
在训练了once-for-all网络之后,下一阶段是为给定的部署方案派生专用子网络。目标是在优化精度的同时搜索满足目标硬件平台上的效率(例如,等待时间,能量)约束的神经网络。“once-for-all”方法将模型训练与网络搜索分离,在这项工作中提出了一个简单的解决方案,即随机抽样子网络子集并构建其精度表和延迟表。因此,给定目标硬件和延迟约束,可以直接查询准确度表和相应的延迟表,以获得表中的最佳子网。查询表的成本可以忽略不计,从而避免了总成本的线性增长。
实验
实验应用渐进式收缩算法来训练ImageNet上的once-for-all网络在不同延迟限制的各种硬件平台上(Samsung Note8,Google Pixel1,Pixel2,NVIDIA 1080Ti,2080Ti,V100 GPU和Intel Xeon CPU)。表1比较了独立训练模型与once-for-all网络的top1精度。表2给出了了once-for-all和移动平台上支持硬件的最新NAS方法(三星Note8)之间的比较。表3总结了在不同延迟约束下移动平台上的结果。图6显示了其他六个硬件平台上的详细结果。
表1在相同网络配置下,独立训练模型和once-for-all网络的top1精度。
表2 与三星Note8上最先进的硬件感知NAS方法的比较。
表3 不同延迟约束下三星Note8上的ImageNet精度结果。
图6 在移动设备、Intel CPU和GPU上的部署结果。
总结
本文提出了一种将模型训练与网络搜索分离的once-for-all的新方法,以便在大量部署方案下实现高效的深度学习。与以前针对每个部署方案设计和训练神经网络的方法不同,本文设计了一个支持不同网络配置的once-for-all网络。与传统方法相比,大大降低了训练成本(GPU小时数),并且为了防止不同大小的子网络互相干扰,提出了一种渐进式收缩算法,与每个子网络独立训练相比,能够实现相同的精度水平。各种硬件平台和效率约束的实验证明了该方法的有效性。