Once-for-All: Train One Network and Specialize it for Efficient Deployment 解读
2026/7/17 5:10:48 网站建设 项目流程

一、论文基本信息

论文题目: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 训练一个同时支持分辨率、深度、宽度和卷积核大小变化的超网络,并在部署时根据具体硬件和延迟约束快速选择专用子网络;它的核心贡献不是训练一个固定小模型,而是实现“训练一次、适配多设备、多预算部署”,在降低搜索和训练成本的同时获得强硬件适配能力。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询