一、论文基本信息
论文题目:Once-for-All: Train One Network and Specialize it for Efficient Deployment
作者:Han Cai、Chuang Gan、Tianzhe Wang、Zhekai Zhang、Song Han
发表会议:ICLR 2020
方法简称:OFA,Once-for-All Network
官方代码:mit-han-lab/once-for-all
这篇论文的核心目标是解决高效模型部署中的一个现实问题:不同设备、不同延迟约束、不同功耗预算下,能否只训练一次网络,然后快速得到适合具体部署场景的子网络。ICLR 官方页面明确指出,OFA 的核心思想是decouple model training from architecture search,也就是把模型训练和结构搜索解耦;训练好一个 once-for-all network 后,可以在不额外训练的情况下,从中选择适合某个硬件和约束的专用子网络。
官方代码仓库为mit-han-lab/once-for-all。仓库说明该方法发表于 ICLR 2020,并提供 OFA 网络、预训练模型、子网络评估和多设备专用模型。仓库中也列出了 MobileNetV3、ProxylessNAS、OFA-ResNet50 等不同设计空间和多个硬件平台上的 specialized networks。(GitHub)
二、论文要解决的问题
深度网络部署时,一个很常见的问题是:同一个模型往往要部署到很多不同设备上,例如服务器 GPU、移动端 CPU、移动端 GPU、FPGA、边缘设备等。不同设备的计算特性差异很大,即使 FLOPs 相同,真实延迟也可能完全不同。
传统做法通常是:给定一个设备和延迟约束,然后用人工设计或 NAS 搜索一个专门的网络,再从头训练。这样做的问题是成本非常高。每多一个设备或一个延迟目标,就可能需要重新搜索、重新训练、重新调参。OFA 论文指出,传统方法要么人工设计网络,要么使用 NAS 为每个场景搜索并从头训练专用网络,这在计算成本上是不可扩展的。
OFA 想解决的问题是:
能不能只训练一个大网络,让它包含大量不同子网络,然后针对不同部署场景直接从里面选一个合适的子网络?
也就是说,它不是为每个设备重新训练一个模型,而是:
训练一次,部署多次。
这也是标题中Once-for-All的含义。
三、核心思想
OFA 的核心思想可以概括为一句话:
先训练一个包含海量子网络的超网络,然后针对具体设备和约束,从这个超网络中直接选择一个子网络进行部署。
这个超网络不是只支持宽度变化,而是支持多个维度的弹性变化,包括:
输入分辨率。
网络深度。
通道宽度 / expansion ratio。
卷积核大小。
ICLR 页面明确写到,OFA 支持 diverse architectural settings,包括depth、width、kernel size、resolution。(ICLR)
这和普通可伸缩网络的区别很明显。US-Net 主要让网络在不同宽度下运行,而 OFA 进一步把可变维度扩展到深度、宽度、卷积核大小和输入分辨率。这样,一个 OFA 网络中就包含了数量极其庞大的子网络。论文摘要中提到,OFA 可以支持超过个子网络。(ICLR)
所以,OFA 的关键不只是“模型变宽变窄”,而是:
一个训练好的超网络,可以覆盖大量不同结构、不同计算量、不同延迟特性的子网络。
四、OFA 和普通 NAS 的区别
普通 NAS 通常是先搜索结构,再训练该结构。
也就是说,流程是:
先针对某个设备和目标延迟搜索一个网络结构。
然后从头训练这个网络。
如果换一个设备或换一个延迟约束,就可能要重新搜索、重新训练。
OFA 的流程完全不同:
先训练一个 once-for-all network。
然后针对不同设备和约束,从中选择子网络。
选出来的子网络可以直接继承 OFA 的权重,不需要从头训练。
这个区别非常关键:
普通 NAS 的成本会随着部署场景数量增加而增加。
OFA 的训练成本基本只发生一次,后续部署场景主要只需要搜索和选择子网络。
ICLR 官方摘要也明确指出,OFA 通过训练一个支持多种结构设置的网络,把训练和搜索解耦;给定部署场景后,可以从 OFA 网络中快速选择专用子网络,而不需要额外训练。(ICLR)
五、核心技术一:Progressive Shrinking
OFA 最大的训练难点是:子网络数量太多。如果直接同时训练所有子网络,训练会非常困难,因为不同子网络之间会相互干扰。
为了解决这个问题,论文提出Progressive Shrinking,渐进式收缩训练。
它的核心思想是:
先训练最大网络,再逐步让网络支持更小的子结构。
也就是说,不是一开始就同时训练所有深度、宽度、核大小和分辨率,而是按照一定顺序逐渐扩大可采样子网络范围。
这个过程可以理解为:
先让最大网络学好完整表达能力。
然后逐步训练弹性卷积核大小。
再训练弹性深度。
再训练弹性宽度。
最后训练弹性输入分辨率或联合弹性空间。
论文将 Progressive Shrinking 称为一种 generalized pruning method,因为它不仅缩小通道,还在更多结构维度上进行收缩,包括 depth、width、kernel size 和 resolution。(ICLR)
这里的重点是:
OFA 不是简单地训练一个大网络,然后随便截取子网络;它通过 Progressive Shrinking 让大量子网络都能继承有效权重。
六、核心技术二:Elastic Kernel Size
普通卷积层的卷积核大小是固定的,比如、
、
。
OFA 中,一个卷积层可以支持多个 kernel size。例如最大 kernel 是,较小的
、
可以看作从中心裁剪出来的子卷积核。
这样,一个大卷积核就可以包含多个不同大小的子卷积核。
但是,仅仅裁剪中心权重还不够,因为不同 kernel size 的权重分布不同。为了让小核从大核中继承得更好,OFA 引入了 kernel transformation,使较小 kernel 能从较大 kernel 中更稳定地获得有效权重。
这一点很重要:
OFA 的 elastic kernel size 不是简单粗暴地截取权重,而是要让不同 kernel size 的子网络共享并适配权重。
七、核心技术三:Elastic Depth
网络深度决定了计算量和表达能力。更深的网络通常精度更高,但延迟也更大。
OFA 支持不同深度的子网络。对于一个 stage,如果最大深度是 4 个 block,那么较小深度的子网络可以只使用其中前 2 个或前 3 个 block。
这种设计让 OFA 能在不同设备上选择不同深度。
如果设备预算充足,可以选择更深网络。
如果设备预算紧张,可以选择更浅网络。
所以,elastic depth 的意义是:让同一个网络可以在不同深度下运行,从而适配不同延迟约束。
八、核心技术四:Elastic Width / Expansion Ratio
在 MobileNetV3、MBConv 等结构中,block 内部通常有 expansion ratio,例如 3、4、6。Expansion ratio 越大,中间通道越多,表达能力越强,但计算量也越大。
OFA 支持不同 expansion ratio。这相当于让每个 block 的中间宽度可以变化。
官方仓库中也列出了 OFA MobileNetV3 的设计空间,例如 depth 取 2、3、4,expand ratio 取 3、4、6,kernel size 取 3、5、7。(GitHub)
这说明 OFA 的子网络搜索空间不是只改变一两个全局超参数,而是在多个 block 上同时选择深度、宽度和卷积核大小。
这也是它能覆盖大量部署场景的原因。
九、核心技术五:Elastic Resolution
输入分辨率也是影响计算量的重要因素。
相同网络结构下,输入分辨率越高,计算量越大;分辨率越低,推理速度越快,但可能损失精度。
OFA 把输入分辨率也纳入搜索空间。官方仓库中可以看到 OFA-MobileNetV3 和 ProxylessNAS 的输入分辨率范围是 128 到 224,OFA-ResNet50 的输入分辨率范围也是 128 到 224。(GitHub)
这使 OFA 可以根据设备和任务要求选择合适分辨率。例如延迟非常严格时,可以选择低分辨率;如果精度要求更高,可以选择高分辨率。
这里的重点是:
OFA 不只搜索网络内部结构,也搜索输入分辨率。
十、子网络如何被选择出来
训练好 OFA 超网络后,还需要针对具体部署场景选择一个子网络。
这个问题可以写成:
约束为:
其中表示一个子网络结构,(T) 是目标设备上的延迟约束。
也就是说,目标是在满足延迟约束的前提下,找到精度最高的子网络。
为了高效搜索,OFA 会使用两个辅助工具:
Accuracy predictor。
Latency lookup table。
Accuracy predictor 用来快速估计某个子网络的精度。
Latency lookup table 用来估计某个子网络在目标硬件上的延迟。
这样就不需要每次都完整训练和真实测试所有候选网络,而可以快速搜索符合约束的结构。
最终选出的子网络直接继承 OFA 权重,可以进行少量 BN 重新统计或校准,然后部署。
这里最重要的是:
OFA 把昂贵的训练成本转移到一次性超网络训练中,把后续部署变成低成本子网络选择问题。
十一、和 US-Net 的区别
US-Net 主要解决的是宽度可伸缩。
它让一个网络可以在不同 width multiplier 下运行,例如从到
。
OFA 则更进一步。
它不仅改变宽度,还同时改变:
深度。
卷积核大小。
输入分辨率。
expansion ratio / channel width。
所以,US-Net 更像是一个宽度弹性网络。
OFA 更像是一个多维结构弹性超网络。
二者的共同点是都希望“训练一次,多种部署”。区别是 OFA 的搜索空间更大,也更接近硬件部署场景下的真实需求。
十二、实验结果解读
12.1 OFA 支持极大的子网络空间
论文指出,OFA 通过 progressive shrinking 可以同时训练超过个子网络。这个数量说明 OFA 的设计空间非常大,不是简单几个宽度或几个深度组合。(ICLR)
这点的意义在于:
部署时可以根据不同设备和延迟约束找到更细粒度、更合适的子网络。
普通方法可能只有几个候选模型,而 OFA 可以提供非常密集的结构选择空间。
12.2 OFA 在多种硬件平台上优于已有 NAS 方法
论文在 CPU、GPU、移动端 CPU、移动端 GPU、FPGA accelerator 等多种硬件平台上进行了实验。ICLR 页面显示,OFA 在多种硬件平台和约束下 consistently outperforms SOTA NAS methods,并且相较 MobileNetV3 最多有 4.0% ImageNet Top-1 提升。(ICLR)
这说明 OFA 的优势不只是训练成本低,而是在具体硬件约束下也能找到强性能子网络。
这里要强调一点:
不同硬件对网络结构的偏好并不相同。
某些设备可能更适合小 kernel,某些设备可能更适合较浅网络,某些设备对分辨率更敏感。OFA 的多维搜索空间正好能适应这种差异。
12.3 移动端设置下达到 80.0% ImageNet Top-1
论文报告中一个很有代表性的结果是:OFA 在移动端设置下达到 80.0% ImageNet Top-1 accuracy,并且 MACs 小于 600M。ICLR 页面和官方仓库都突出展示了这个结果。(ICLR)
这个结果说明,在移动端计算预算下,OFA 不是只追求速度,而是能达到很高的精度上限。
对于高效模型设计来说,这一点很关键:
OFA 不是简单压缩模型,而是在具体资源约束下寻找精度和效率更优的结构。
12.4 相比 MobileNetV3 和 EfficientNet 有真实延迟优势
论文摘要中提到,OFA 可以在相同精度下比 MobileNetV3 快 1.5×,比 EfficientNet 快 2.6×,这里比较的是 measured latency,而不只是 FLOPs。(arXiv)
这点非常重要。
很多模型压缩论文只报告 FLOPs,但 FLOPs 和真实延迟并不总是一致。OFA 在搜索时考虑目标硬件延迟,因此更能找到实际部署友好的结构。
所以 OFA 的实验重点不是单纯证明 MACs 低,而是证明:
面向具体硬件约束搜索出来的子网络,能带来真实部署优势。
12.5 官方仓库提供多个设备和约束下的专用模型
官方 GitHub 仓库列出了大量 specialized networks,包括 LG G8、Samsung S7 Edge、Samsung Note8、Samsung Note10、Google Pixel、1080Ti、V100、Jetson TX2、Intel Xeon CPU 等不同平台上的模型配置和精度。(GitHub)
这说明 OFA 的方法确实围绕“多设备部署”展开,而不是只在单一 FLOPs 指标上做比较。
这也是 OFA 和普通剪枝方法最大的不同之一:
它不是只给出一个压缩模型,而是给出一套可以面向不同平台特化的模型生成机制。
十三、方法优点
13.1 训练一次,适配多种部署场景
OFA 最大优点是:
一次训练,面向多个设备和多个约束生成专用子网络。
这大幅降低了为不同部署场景分别设计、搜索和训练模型的成本。
13.2 训练和搜索解耦
OFA 的训练阶段只做一次,后续针对不同设备只需要搜索子网络。
这种training-search decoupling是 OFA 的核心贡献。相比每个场景都重新训练一个模型,这种方式更可扩展。(ICLR)
13.3 搜索空间非常大
OFA 同时支持分辨率、深度、宽度、kernel size 等维度变化,因此可以覆盖极其庞大的子网络空间。ICLR 页面提到 OFA 可以同时支持超过 (10^{19}) 个子网络。(ICLR)
这意味着它能为不同硬件和延迟约束找到更细致的结构。
13.4 不需要对子网络重新训练
选出的子网络可以直接继承 OFA 网络权重,不需要从头训练。
这点非常实用,因为如果每个子网络都要重新训练,OFA 的优势就会大幅下降。
13.5 面向真实硬件,而不只是 FLOPs
OFA 使用 latency predictor 或 lookup table 来适配不同硬件平台。这让它比只按 FLOPs 约束设计模型更接近真实部署需求。
官方仓库中给出的多个设备专用模型也说明,OFA 的重点是hardware-aware specialization。(GitHub)
十四、方法局限
14.1 OFA 训练本身成本仍然较高
OFA 虽然避免了为每个场景重新训练模型,但训练 once-for-all network 本身并不轻松。
因为它需要支持大量子网络,还要进行 Progressive Shrinking。因此,OFA 的优势主要体现在部署场景很多时。
如果只需要一个固定模型,训练 OFA 可能反而比普通训练复杂。
14.2 子网络之间存在权重共享干扰
大量子网络共享同一套权重,不同子网络的优化目标可能冲突。
例如大 kernel 和小 kernel、深网络和浅网络、大宽度和小宽度都希望共享权重,但它们对权重的需求并不完全一致。
Progressive Shrinking 可以缓解这种干扰,但不能完全消除。
14.3 搜索空间需要人工设计
OFA 的效果依赖预先定义好的搜索空间,例如 kernel size 取 3、5、7,depth 取 2、3、4,expand ratio 取 3、4、6,resolution 在 128 到 224 之间。
如果搜索空间设计不好,OFA 仍然可能找不到最佳结构。
所以 OFA 并不是完全自动地发现所有可能网络结构,而是在人工设定的弹性空间内搜索。
14.4 子网络选择依赖预测器或延迟表
OFA 的快速搜索依赖 accuracy predictor 和 latency lookup table。如果预测器不准,搜索结果可能不是最优。
此外,延迟表也和具体硬件、推理框架、batch size 有关。换一个硬件环境时,通常需要重新测量或构建新的延迟表。
14.5 对非 CNN 架构不能直接照搬
OFA 原始设计主要围绕 MobileNetV3、ProxylessNAS、ResNet 等 CNN 结构展开。对于 ViT、LLM、VLM 这类模型,弹性维度可能变成 attention heads、MLP ratio、token 数量、layer 数量、hidden size 等。
OFA 的思想可以迁移,但具体训练和搜索方式需要重新设计。
十五、整体评价
OFA 的核心价值在于,它把高效模型部署从“每个场景单独搜索和训练”,推进到“一个超网络覆盖大量部署场景”。
它并不是传统意义上的剪枝方法,也不是简单的动态推理方法。更准确地说,OFA 是一种弹性超网络训练与部署特化方法。
它解决了三个关键问题:
如何训练包含大量子网络的超网络。
如何让子网络继承有效权重而不重新训练。
如何针对具体硬件和延迟约束快速选择合适子网络。
Progressive Shrinking 是 OFA 的训练核心,解决了海量子网络同时训练的困难;多维弹性设计让 OFA 能覆盖分辨率、深度、宽度和卷积核大小;硬件感知搜索让它能真正面向不同设备部署。
这篇论文的影响也很大。它把 slimmable network 的思想进一步扩展成更完整的 once-for-all deployment framework,为后续弹性网络、超网络训练、硬件感知 NAS、多预算部署等方向提供了重要基础。
十六、一句话总结
《Once-for-All: Train One Network and Specialize it for Efficient Deployment》提出 OFA,通过 Progressive Shrinking 训练一个同时支持分辨率、深度、宽度和卷积核大小变化的超网络,并在部署时根据具体硬件和延迟约束快速选择专用子网络;它的核心贡献不是训练一个固定小模型,而是实现“训练一次、适配多设备、多预算部署”,在降低搜索和训练成本的同时获得强硬件适配能力。