【论文】——Once-for-All: Train One Network and Specialize it for Efficient Deployment阅读

论文:Once-for-All: Train One Network and Specialize it for Efficient Deployment
翻译自google

摘要:
我们解决了在许多设备和资源限制(尤其是在边缘设备)上进行有效推理的挑战性问题。常规方法要么手动设计,要么使用神经体系结构搜索(NAS)来找到专门的神经网络,并针对每种情况从头开始对其进行训练,这在计算上是禁止的(导致CO2排放量长达5辆汽车的使用寿命),因此无法扩展。在这项工作中,我们建议通过分离训练和搜索来训练一个支持所有人的(OFA)网络,以支持各种体系结构设置,以降低成本。通过从OFA网络中进行选择,我们可以快速获得专门的子网,而无需额外的培训。为了有效地训练OFA网络,我们还提出了一种新颖的渐进式收缩算法,这是一种通用的修剪方法,与修剪(深度,宽度,内核大小和分辨率)相比,该方法可以在更多维度上减小模型大小。它可以获得数量惊人的子网(> 1019),可以适应不同的硬件平台和延迟约束,同时保持与独立训练相同的准确性。在各种边缘设备上,OFA始终优于最先进的(SOTA)NAS方法(与MobileNetV3相比,ImageNet top1的精度提高了4.0%,或相同的精度,但比MobileNetV3快1.5倍,比EfficientNet快2.6倍,测得的延迟时间) ),同时减少了多个数量级的GPU小时和二氧化碳排放量。特别是,在移动设置(<600M MAC)下,OFA达到了新的SOTA 80.0%ImageNet top-1精度。 OFA是第三届低功耗计算机视觉挑战赛(LPCVC),DSP分类轨道和第四届LPCVC(分类轨道和检测轨道)的获奖解决方案。

1. 简介

深度神经网络(DNN)可在许多机器学习应用程序中提供最先进的准确性。 然而,模型尺寸和计算成本的爆炸性增长带来了新的挑战,关于如何在各种硬件平台上有效部署这些深度学习模型的说明,因为它们必须满足不同的硬件效率约束(例如,延迟,能耗)。 例如,一部手机App Store上的应用程序必须支持各种硬件设备,从带有专用神经网络加速器的高端三星Note10到5年前的三星s6。 使用不同的硬件资源(例如片上存储器大小,#计算单元),最佳的神经网络架构差异很大。 即使在相同的硬件上运行在不同的电池条件或工作负载下,最佳模型架构也相差很多。

考虑到不同的硬件平台和效率约束(定义为部署方案),研究人员要么设计专门用于移动的紧凑模型(Howard等人,2017; Sandler等人,2018; Zhang等人,2018),要么通过加速现有模型 压缩(Han等人,2016; Heet等人,2018)以实现高效部署。 但是,使用基于人的方法或NAS来为每种情况设计专用DNN都是工程师昂贵且计算量很大的。由于此类方法需要重复网络设计过程并针对每种情况从头开始重新训练设计的网络。 随着部署方案数量的增加,它们的总成本呈线性增长,这将导致过多的能源消耗和CO2排放(Strubell et al。,2019),这使他们无法处理大量的硬件设备(231.4亿个IoT设备直到2018年)

在这里插入图片描述
本文介绍了一种新的解决方案来应对这一挑战,设计一个可以在各种架构配置下直接部署的千篇一律的网络,从而分摊了培训成本。这 通过仅选择一次全部网络的一部分来执行推理。它可以灵活地支持不同的深度,宽度,内核大小和分辨率,而无需重新训练。千篇一律的简单示例(OFA)如图1所示(左)。具体来说,我们将模型训练阶段与神经体系结构搜索阶段解耦。在模型训练阶段,我们专注于提高通过选择一次性网络的不同部分而派生的所有子网的准确性。在模型搜索阶段,我们对子网的一个子集进行采样,以训练准确性预测器和等待时间预测器。给定目标硬件和约束条件,进行了以预测器为导向的架构搜索(Liu等人,2018)以获取专门的子网,并且成本可以忽略不计。因此,我们将专用神经网络设计的总成本从O(N)降低到O(1)(图1中间)

但是,训练“一劳永逸”的网络并非易事,因为它需要对权重进行联合优化以维持大量子网的准确性(在我们的实验中超过1019个)。在计算上禁止枚举所有子网以在每个更新步骤中获得准确的梯度,而在每个步骤中随机采样几个子网会导致准确性显着下降。挑战在于,不同的子网之间会相互干扰,从而使整个“一劳永逸”网络的训练过程效率低下。为了解决这一挑战,我们提出了一种渐进式收缩算法,用于训练“千篇一律”网络。我们建议先训练具有最大深度,宽度和核大小的最大神经网络,然后再逐步微调一次性网络以支持较小的子网络,而不是从头开始直接优化一次性网络。与较大的网络共享权重的网络。这样,它通过选择较大子网的最重要权重来提供更好的初始化,并有机会提取较小子网的机会,从而大大提高了训练效率。从这个角度来看,渐进式收缩可以看作是一种通用的网络修剪方法,它可以缩小整个网络的多个维度(深度,宽度,内核大小和分辨率),而不仅仅是宽度维度。此外,它的目标是保持所有子网的准确性,而不是单个子网的准确性修剪的网络

这是首次在Imagenet的移动设置下的精度首次达到80%。

在这里插入图片描述

2. 相关工作

  1. 高效的神经网络
    提出了SqueezeNet,MobileNets,ShuffleNets等

  2. 神经网络搜索
    早期在不考虑硬件效率的情况下搜索高精度架构。 因此,产生的架构(例如,NASNet,AmoebaNet)不能有效地进行推理。 最新的可感知硬件的NAS方法(Cai等人,2019; Tan等人,2019; Wu等人,2019)直接合并了硬件 反馈给架构搜索。 硬件-DNN协同设计技术(Jiang等,2019b; a; Hao等,2019)共同优化了神经网络架构和硬件架构。 结果,它们可以提高推理效率。 但是,在给定新的推理硬件平台的情况下,这些方法需要重复架构搜索过程并重新训练模型,从而导致开发成本过高。 GPU小时,美元和二氧化碳排放量。 它们不能扩展到大量的部署方案。 单独训练的模型不承担任何责任,从而导致较大的模型总尺寸和较高的下载带宽

  3. 动态神经网络

在这里插入图片描述

3. 方法

3.1 问题
在这里插入图片描述
Wo表示“统一的网络”,archi表示第i个子网络的结构配置,C(Wo, archi)表示采用一种“策略”从Wo中选择一部分组成一个子网络。训练的目标是:从Wo中选择优化的子网络和archi配置的网络能保持同样精度。

3.2 网络结构空间
我们的千篇一律的网络提供了一种模型,但支持许多不同大小的子网,涵盖了卷积神经网络(CNN)体系结构的四个重要维度,即深度,宽度,内核大小和分辨率。 遵循许多CNN模型的常规做法(He等人,2016; Sandler等人,2018; Huang等人,2017),我们将CNN模型划分为一系列单元,这些单元具有逐渐减小的特征图大小和增加的通道 数。 每个单元由一系列层组成,其中只有第一层的步幅为2如果特征尺度需要减小。其他网络层的stride都是1.

对于“统一的网络”中,每个单元可采用变化的网络层数,对每个层采用可变的通道数可变的卷积核尺寸,支持不同大小的网络输入。例如:对于once-for-all,我们假设输入尺寸在:[128,224] stride为4;每个单元的深度为{2,3,4};每层的宽度扩充为:{3,4,6};核尺寸为:{3,5,7};网络有5个单元。则网络结构的搜索空间为:((3×3)2 + (3×3)3 + (3×3)4)5 ×25(不同的输入)

3.3 train once-for-all network
训练“一劳永逸”的网络可以看作是一个多目标问题,其中每个目标都对应一个子网。 从这个角度出发,一种幼稚的训练方法是使用总体目标的精确梯度从头开始直接优化一次性网络,这是通过枚举每个更新步骤中的所有子网得出的,如等式所示。 。 (1)。 这种方法的成本与子网数量成线性关系。 因此,它仅适用于支持有限数量的子网的情况(Yu et al。,2019),而在我们的情况下,采用这种方法在计算上是禁止的

另一种幼稚的培训方法是在每个更新步骤中对几个子网进行采样,而不是对所有子网进行枚举,这样就不会出现成本过高的问题。 但是,由于大量子网共享权重,因此相互干扰,会造成网络精度的下降。

在这里插入图片描述

  • 渐进式搜索

一次性网络包括许多大小不同的子网,其中小子网嵌套在大子网中。为了防止子网之间的干扰,我们建议以逐步的方式执行从大型子网到小型子网的训练顺序。我们将此培训方案称为渐进收缩(PS)。图3和图4提供了使用PS训练过程的示例,其中我们从训练具有最大核尺寸(例如7),深度(例如4)和宽度(例如6)的最大神经网络开始。 )。接下来,我们通过逐渐将其逐渐添加到采样空间中来逐步调整网络以支持较小的子网(也可以对较大的子网进行采样)。具体来说,在训练了最大的网络之后,我们首先支持弹性内核大小,该大小可以在每一层的{3,5,7}中进行选择,而深度和宽度则保持最大值。然后,我们依次支持弹性深度和弹性宽度,如图3所示。在整个训练过程中,分辨率都是弹性的,这是通过为每批训练数据采样不同的图像大小来实现的。在训练了最大的神经网络后,我们还使用了知识蒸馏技术(Hinton等人,2015; Ashok等人,2018; Yu&Huang,2019b)。它使用最大神经网络给出的软标签和真实标签来组合两个损失项。

与幼稚的方法相比,PS可以防止小型子网干扰大型子网,因为在微调一次性网络以支持小型子网时,大型子网已经经过了良好的训练。 关于小型子网,它们与大型子网共享权重。 因此,PS允许使用训练有素的大型子网的最重要权重来初始化小型子网,从而加快了训练过程(@@这个不知道是不是正确的)。 与网络修剪(图4)相比,PS还从训练完整模型开始,但它不仅缩小了整个模型的宽度尺寸,而且缩小了整个模型的深度,内核尺寸和分辨率尺寸。 此外,PS可以微调大型和小型子网,而不是单个修剪的网络。 结果,与网络修剪相比,PS提供了更强大的“一劳永逸”网络,可以适应各种硬件平台和效率约束。 我们描述PS培训流程的细节如下:
在这里插入图片描述

  • 弹性核尺寸

我们让7x7卷积内核的中心也用作5x5内核,其中心也可以是3x3内核。 因此,卷积核大小变得有弹性。 挑战在于居中的子内核(例如3x3和5x5)是共享的,并且需要扮演多个角色(独立内核和大内核的一部分)。 作为不同角色,居中子内核的权重可能需要具有不同的分布或大小。 强制它们相同会降低某些子网的性能。 因此,我们在共享内核权重时引入了内核变换矩阵。 我们将不同的内核转换矩阵用于不同的层。 在每一层中,内核转换矩阵在不同通道之间共享。 这样,我们只需要额外的25×25 + 9×9 = 706个参数就可以在每层中存储内核转换矩阵,这可以忽略不计。
就是小卷积核的预训练权重不是直接copy自大卷积核,而是采用了一个线性变换
在这里插入图片描述

  • 弹性深度

为了得出一个在最初具有N层的单元中具有D层的子网,我们保留前D层并跳过最后N-D层,而不是像当前的NAS方法那样保留任何D层(Cai等人 (2019年; Wu等人,2019年)。 这样,一个深度设置仅对应于一层的组合。 最后,第一个D层的权重在大型模型和小型模型之间共享。

  • 弹性宽度

宽度是指通道数。 我们为每一层提供了选择不同通道扩展率的灵活性。 按照渐进式收缩方案,我们首先训练一个全宽模型。 然后,我们介绍一种通道排序操作以支持部分宽度。 它根据渠道的重要性重新组织渠道,重要性是根据渠道权重的L1规范计算得出的。 L1规范越大意味着越重要。 例如,当从4通道层缩小到3通道层时,我们选择最大的3个通道,其权重与4通道层共享(图6左和中)。 这样,较小的子网就可以通过一次性网络上最重要的通道进行初始化。训练有素。 此通道分类操作保留了较大子网的准确性。

3.4 面向所有人的网络的专用模型部署
在这里插入图片描述

4. 实验

首先我们采样渐进式搜索方案来训练OFA网络,然后我们在:Samsung S7 Edge, Note8, Note10, Google Pixel1, Pixel2,LG G8, NVIDIA 1080Ti, V100 GPUs, Jetson TX2, Intel Xeon CPU, Xilinx ZU9EG, and ZU3EG FPGAs设备上测试网络的推理延迟。

  • 训练细节
    - 训练细节
    1200个小时,我2张卡的话需要训练25天。别人1.5天完成。。。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5. 总结

  • 看到训练用的GPU就直接劝退了,但是不知道小模型单独抽离出来之后能否还保持比mobilenetv3更好的效果
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值