NestDNN: Resource-Aware Multi-Tenant On-Device Deep Learning for Continuous Mobile Vision 解读
一、论文基本信息
论文题目:NestDNN: Resource-Aware Multi-Tenant On-Device Deep Learning for Continuous Mobile Vision
作者:Biyi Fang、Xiao Zeng、Mi Zhang
发表会议:ACM MobiCom 2018
论文方向:移动端多任务视觉系统、资源感知推理、嵌套式模型压缩、运行时调度
这篇论文不是单纯提出一个新的剪枝指标,而是提出一个面向移动端连续视觉应用的完整系统框架。它关注的问题非常实际:手机、无人机、AR 眼镜、可穿戴摄像头等设备,往往要同时运行多个视觉任务,而设备的 CPU、内存、电量等资源会随着应用启动、关闭和优先级变化不断变化。NestDNN 的目标是让每个视觉模型都能提供多个资源—精度折中版本,并在运行时根据当前资源动态选择最合适的模型容量。论文发表于 MobiCom 2018,DBLP 记录显示其页码为 115–127。(dblp)
这篇论文的核心可以概括为:
NestDNN 不是只压缩一个模型,而是把一个模型变成多个容量嵌套的 descendant models,并在运行时根据资源状态为多个并发应用动态选择模型容量和资源分配。
二、论文要解决的问题
移动端视觉系统和普通离线推理场景不一样。普通模型压缩通常假设部署环境固定,比如给定一个内存限制、一个延迟限制,然后压缩出一个固定模型。
但移动端连续视觉系统有两个明显特点。
第一,多个视觉应用会并发运行。例如无人机可能同时做车辆检测、交通标志识别、道路场景理解;AR 眼镜可能同时做人脸识别、物体识别、场景理解。
第二,运行时可用资源是动态变化的。用户可能启动新应用、关闭旧应用,系统可能调整应用优先级,后台进程也可能抢占资源。论文明确指出,移动视觉系统的运行时资源会因为新应用启动、已有应用关闭和应用优先级变化而动态变化。(MSU Innovation Center)
传统做法通常是为每个应用准备一个固定压缩模型。这个做法有两个问题。
当资源不足时,固定模型可能仍然太大,导致多个应用抢资源,视频帧处理率下降。
当资源充足时,固定压缩模型又无法利用额外资源恢复精度,因为被压缩掉的能力已经固定丢失。
所以 NestDNN 要解决的问题是:
如何让每个模型在移动端提供多个资源—精度折中,并让系统在运行时为多个并发任务动态选择最合适的模型容量?
这和普通剪枝方法不同。普通剪枝关心的是:如何得到一个小模型。
NestDNN 关心的是:如何让一个模型在不同资源条件下拥有多个可切换容量,并让多个应用共享有限资源。
三、核心思想
NestDNN 的核心思想可以分成两部分。
第一部分是multi-capacity model,多容量模型。
它把一个原始模型压缩和恢复成一组嵌套的 descendant models。小容量模型嵌套在大容量模型里面,小模型和大模型共享参数,因此不需要像保存多个独立模型那样占用大量存储空间。论文指出,小容量 descendant model 会共享大容量 descendant model 的参数,并嵌套在大容量 descendant model 内部,从而在较小内存占用下提供多个资源—精度折中。(MSU Innovation Center)
第二部分是resource-aware runtime scheduler,资源感知运行时调度器。
它在系统运行时持续监控资源变化和应用请求,然后为每个并发应用选择合适的 descendant model,并分配合适的计算资源,使所有应用整体上获得更好的精度、帧率和能耗表现。论文明确说明,在线阶段调度器会监控资源变化,查询每个应用的 profile,选择最优 descendant model,并分配运行时资源。(MSU Innovation Center)
因此,NestDNN 的整体逻辑是:
离线阶段生成多容量模型,在线阶段根据资源动态调度模型容量。
这使它既不是纯剪枝论文,也不是纯调度论文,而是把模型压缩、参数共享、模型切换和运行时资源调度放到一个系统里统一考虑。
四、为什么需要 multi-capacity model
如果想让一个模型支持多个资源—精度折中,最直接的方式是训练多个独立模型。例如一个大模型、一个中等模型、一个小模型,每个模型对应不同延迟和精度。
但这种方式在移动端并不现实。
因为多个模型会带来三个问题。
第一,存储开销大。每个模型都有独立参数,多个版本累加起来占用大量内存。
第二,模型切换开销大。运行时如果要从小模型切换到大模型,需要加载新模型、释放旧模型,产生 page-in 和 page-out 开销。
第三,多任务场景下不可扩展。如果每个应用都有多个模型版本,而系统又同时运行多个应用,模型数量会快速膨胀。
NestDNN 的解决办法是:
让不同容量模型共享参数,并形成嵌套关系。
小模型是大模型的一部分。升级到更大容量时,只需要加载额外新增的参数;降级到更小容量时,只需要停用或释放额外参数。这样,模型切换成本比多个独立模型低得多。
论文实验也表明,multi-capacity model 相比多个独立 descendant models 显著减少内存占用。六个应用合计时,multi-capacity model 占用 524.6 MB,而独立模型累计占用 1112.0 MB,减少 587.4 MB。(MSU Innovation Center)
这里最关键的是:
NestDNN 的多容量模型不是多个模型的集合,而是一个共享参数的嵌套模型。
五、模型生成第一步:Filter-based Model Pruning
NestDNN 先通过 filter pruning 得到一系列不同容量的模型。
卷积层中,一个 3D filter 通常对应一个输出 feature map。剪掉一个 filter,不仅会删除当前层的一个输出 feature map,还会删除下一层对应输入通道上的卷积核。因此,filter pruning 可以同时减少参数量和 FLOPs。论文中也明确说明,剪掉某层一个 3D filter 会减少当前层对应计算,并进一步减少下一层与该 feature map 相连的 kernel 和计算。(MSU Innovation Center)
NestDNN 的剪枝并不是简单用 L1 norm,而是提出了一个新的 filter importance ranking 方法:TRR,Triplet Response Residual。
TRR 的直觉是:
如果一个 filter 提取出的特征能让同类图像更接近、异类图像更远,那么这个 filter 更重要。
给定一个 triplet:anchor image、positive image、negative image。其中 anchor 和 positive 属于同一类,negative 属于不同类。对于第 i 个 filter,TRR 定义为:
其中表示第 (i) 个 filter 产生的 feature map。
这个公式的含义是:如果该 filter 让 anchor 和 negative 的特征距离大,同时让 anchor 和 positive 的特征距离小,那么它对类别区分更有价值。论文明确解释,TRR 通过比较 anchor-negative 和 anchor-positive 的 feature map 距离残差,衡量 filter 区分不同类别图像的能力。(MSU Innovation Center)
所以,TRR 与 L1 norm 的区别是:
L1 norm 只看权重大小,TRR 看 filter 产生的特征是否具有类别区分能力。
论文在 VGG-16 / CIFAR-10 上对比 TRR 和 L1 norm,结果显示 TRR 在几乎所有剪枝比例和卷积层上都优于 L1 norm。例如在 conv13 上剪掉 50% 和 90% filters 时,TRR 对应精度为 89.72% 和 87.40%,而 L1 norm 只有 75.45% 和 42.65%。(MSU Innovation Center)
这个结果说明:
TRR 更适合找到真正冗余的 filters,尤其在高剪枝比例下比单纯权重范数更稳定。
六、Filter Pruning Roadmap:剪枝路线图
NestDNN 不是一次性剪出一个模型,而是迭代剪枝,形成一条filter pruning roadmap。
具体过程是:根据 TRR 重要性排序,跨卷积层剪掉一批不重要 filters,然后对剪枝模型重新训练以恢复精度。这个过程反复进行,直到剪枝模型无法达到用户设定的最低精度要求。论文指出,每轮剪枝都会剪掉跨层不重要 filters,并通过 retraining 补偿精度损失;最终形成一条 pruning roadmap,其中每个 footprint 都是一个带有剪枝记录的模型。(MSU Innovation Center)
这条 roadmap 的作用非常重要。
它不仅提供一系列不同容量的模型,还记录了从大模型到小模型的 filters 删除顺序。
最小的剪枝模型被称为seed model。
之后 NestDNN 会从这个 seed model 出发,反向按照 roadmap 把被剪掉的 filters 一步步“长回来”,生成一个多容量模型。
所以,pruning roadmap 的意义是:
它记录了哪些 filters 应该先被剪掉,也记录了后续模型恢复时应该按什么顺序把 filters 加回来。
七、模型生成第二步:Freeze-&-Grow based Model Recovery
普通剪枝会得到多个 pruned models,但这些模型经过各自 retraining 后参数彼此不同。如果把它们都保存在移动端,就会变成多个独立模型,存储开销仍然很大。
NestDNN 采用Freeze-&-Grow机制来解决这个问题。
它从 seed model 开始,也就是最小容量模型。然后先冻结 seed model 中已有 filters 的参数,再沿着 pruning roadmap 的反方向,把之前剪掉的 filters 逐步加回来。新长出来的 filters 会参与 retraining,而已有 filters 被冻结,不会改变。论文说明,multi-capacity model 的生成从 seed model 开始,先冻结已有 filters,再按照 roadmap 反向执行 filter growing,将被剪掉的 filters 加回来。(MSU Innovation Center)
这个机制非常关键。
如果不冻结已有参数,那么较小 descendant model 的参数会在训练较大模型时被改变,从而破坏小模型的性能。Freeze-&-Grow 通过冻结小模型已有参数,保证小模型始终嵌套在大模型中,并且性能不被后续训练破坏。
可以这样理解:
小容量模型先训练好并固定,大容量模型是在小容量模型外面继续增加 filters。
这样最终形成的多容量模型具有嵌套结构:
最小模型包含最核心 filters。
中等模型在最小模型基础上增加一部分 filters。
最大模型继续增加更多 filters。
所有 descendant models 共享同一个模型文件中的参数。
这也是 NestDNN 名字中 “Nest” 的含义。
八、运行时调度:根据资源动态选择 descendant model
有了 multi-capacity model 之后,系统还需要决定运行时每个应用用哪个容量。
NestDNN 为每个 descendant model 建立 profile,包括:
推理精度。
处理延迟。
内存占用。
然后调度器根据当前运行的多个应用、用户对每个应用的精度和延迟要求、系统可用资源,选择每个应用使用哪个 descendant model,并分配多少计算资源。
论文定义了一个 cost function:
其中:
(v) 表示应用。
表示为应用 (v) 选择的 descendant model。
是用户设定的最低精度目标。
是 descendant model 的精度。
是最大允许处理延迟。
是模型在 100% 计算资源下的延迟。
是分配给应用 (v) 的计算资源比例。
用来控制精度和延迟之间的偏好。
这个 cost function 的第一项惩罚精度不足,第二项惩罚延迟超过要求。论文也指出,(\alpha) 越大,调度越重视延迟;越小,调度越偏向高精度。(MSU Innovation Center)
这里最重要的是:
NestDNN 把模型选择和资源分配统一到同一个调度目标中。
它不是只选择小模型,也不是只追求最高精度,而是在当前资源和应用目标下寻找整体最优折中。
十、实验设置
论文使用六个移动视觉应用进行评估,覆盖通用类别识别和特定类别识别任务。
其中 VGG-16 用于 CIFAR-10、GTSRB、Adience-Gender;ResNet-50 用于 ImageNet-50、ImageNet-100、Places-32。论文把这六个应用分别标记为 VC、VS、VG、RI-50、RI-100、RP。(MSU Innovation Center)
部署平台方面,论文在三台 Android 手机上实现和评估 NestDNN:Samsung Galaxy S8、Samsung Galaxy S7 和 LG Nexus 5,并使用 Monsoon power monitor 测量功耗。论文报告主要展示 Samsung Galaxy S8 上的最佳结果。(MSU Innovation Center)
这种实验设置很符合论文目标:它不是只在离线 GPU 上报告 FLOPs,而是在真实移动设备上评估多应用并发、模型切换、帧率和能耗。
这也是 NestDNN 与很多纯算法剪枝论文的重要区别:
它强调真实移动系统中的运行时资源变化和多租户调度。
十一、实验结果解读
11.1 多容量模型提供更好的精度—容量折中
论文比较了 descendant models 和 baseline models。baseline models 使用与 descendant models 相同的结构和计算成本,但作为独立模型训练。
结果显示,descendant models 在六个应用、各个模型大小下都比 baseline models 精度更高。平均来看,descendant models 比 baseline models 高 4.98% 精度;两个最小 descendant models 平均高 6.68%,两个最大 descendant models 平均高 3.72%。论文解释,小容量 descendant models 受益于 TRR 保留下来的重要 filters,因此在容量很小时优势更明显。(MSU Innovation Center)
这个结果说明:
NestDNN 不是简单地把模型缩小,而是通过 TRR 和 Freeze-&-Grow 保留了更关键的表征能力。
尤其是在小容量模型上,TRR 的重要性排序带来了明显收益。
11.2 多容量模型显著减少内存占用
如果为每个应用保存 5 个独立模型,内存占用会非常大。NestDNN 的 multi-capacity model 通过参数共享显著降低了内存 footprint。
论文表 3 显示,六个应用合计时,multi-capacity models 占用 524.6 MB,而对应独立模型累计占用 1112.0 MB,减少 587.4 MB。(MSU Innovation Center)
这说明:
嵌套参数共享是 NestDNN 能在移动端支持多个模型容量的关键。
如果没有参数共享,多个容量模型在移动端根本不够实用。
11.3 模型切换开销更低
移动端运行时应用会启动和关闭,可用资源也会变化,因此模型可能需要频繁升级或降级。如果是多个独立模型,模型切换需要 page-out 旧模型、page-in 新模型,开销很大。
NestDNN 的 descendant models 是嵌套关系。升级时,小模型是大模型的一部分,因此不需要 page-out 小模型,只需要 page-in 新增参数;降级时,也不需要 page-in 小模型,只需要停用或释放多余参数。
论文显示,在模型切换时,multi-capacity model 的 page-in/page-out 开销比独立模型更低;例如 VC 应用中,升级时 multi-capacity model 的 page-in 为 81.4 MB、page-out 为 0,而独立模型 page-in 为 128.2 MB、page-out 为 46.8 MB。论文还报告,对于每 1000 次模型切换,VC 的能耗减少 602.1 J。(MSU Innovation Center)
这说明:
NestDNN 的嵌套结构不仅减少存储,还减少运行时模型切换的内存和能耗开销。
11.4 运行时调度提升帧率和精度
NestDNN 将资源感知调度与固定折中 baseline 进行比较。baseline 使用每个应用精度—资源曲线上的 “knee” 模型,也就是一个固定模型版本。
实验结果显示,在 MinTotalCost 策略下,当 NestDNN 保持与 baseline 相同平均 Top-1 accuracy 时,平均帧率提升 2.0×;当保持与 baseline 相同平均帧率时,平均精度提升 4.1%;在折中点处,帧率提升 1.5×,平均精度提升 2.6%。在 MinMaxCost 策略下,NestDNN 在相同精度下帧率提升 1.9×,在相同帧率下精度提升 4.2%,折中点处帧率提升 1.5×、精度提升 2.1%。(MSU Innovation Center)
这个结果是全文最重要的系统性结论:
资源感知动态选择模型容量,比固定模型容量更适合移动端多应用并发场景。
11.5 能耗也明显下降
除了精度和帧率,NestDNN 还评估了能耗。论文报告,在 MinTotalCost 策略下,NestDNN 在折中点处相比 baseline 平均能耗降低 1.7×;在 MinMaxCost 策略下,也能达到约 1.5× 平均能耗降低。(MSU Innovation Center)
这说明 NestDNN 的收益不只是理论计算量,也体现在移动设备真实能耗上。
对于移动视觉系统来说,这一点非常重要,因为电池续航往往和推理速度一样关键。
十二、方法优点
12.1 面向真实移动端多任务场景
NestDNN 的最大价值在于,它不是只研究单模型压缩,而是面向移动端连续视觉中的multi-tenant on-device deep learning。
它考虑了多个应用并发运行、资源动态变化、应用目标不同、模型切换成本和能耗等真实系统问题。
这使它比单纯报告 FLOPs 的压缩方法更接近实际部署需求。
12.2 多容量模型节省存储和切换成本
通过 Freeze-&-Grow 形成嵌套 descendant models,NestDNN 可以在一个模型文件中提供多个容量版本。
这比保存多个独立模型更适合移动端。
它用参数共享解决了“多预算模型”在存储上的不可扩展问题。
12.3 TRR 比简单 L1 更关注特征判别性
TRR 不是看 filter 权重大小,而是看 filter 产生的 feature maps 是否有助于区分类别。
这比 L1 norm 更符合分类任务目标。
论文实验也显示,TRR 在高剪枝比例下比 L1 norm 更能保持精度。(MSU Innovation Center)
12.4 调度器同时考虑精度和延迟
NestDNN 的 cost function 同时包含精度不足惩罚和延迟超限惩罚。
这使它能根据不同应用需求选择不同模型容量。例如一个应用可能更重视实时性,另一个应用可能更重视识别精度。
这种按应用需求进行资源分配的能力,是普通模型剪枝方法没有的。
12.5 支持运行时动态适配
移动端资源状态经常变化。NestDNN 可以在资源变化时重新选择 descendant model 和资源分配。
因此,它不是静态压缩,而是resource-aware runtime adaptation。
十三、方法局限
13.1 生成多容量模型的离线成本较高
NestDNN 需要先进行 TRR 重要性计算、迭代剪枝、retraining、roadmap 构建,再执行 Freeze-&-Grow 生成多容量模型。
论文也承认,TRR 虽然优于 L1 norm,但计算成本更高,会显著增加多容量模型生成过程的成本。(MSU Innovation Center)
所以它更适合离线生成一次、长期部署使用的场景。
13.2 容量档位是离散的
NestDNN 生成的是一组 descendant models,每个 descendant model 对应一个固定容量。
这和后来的 US-Net、OFA 这类连续或大规模子网络搜索不同。NestDNN 的模型选择空间更像几个离散档位。
因此,如果运行时资源刚好处在两个档位之间,调度器只能选择最合适的已有 descendant model,而不能任意连续调整宽度。
13.3 主要面向 CNN 视觉模型
论文实验主要使用 VGG-16 和 ResNet-50。作者讨论中认为方法可以推广到 GoogLeNet、MobileNet、BinaryNet 等模型,但原始实验仍主要围绕 CNN 视觉任务。(MSU Innovation Center)
对于 Transformer、ViT、LLM、VLM 等结构,如何构建嵌套多容量模型,需要重新设计剪枝对象和共享机制。
13.4 调度依赖准确 profile
NestDNN 的调度器需要知道每个 descendant model 的精度、延迟和内存 profile。
这些 profile 与设备、框架、batch size、系统负载有关。如果设备或运行环境变化较大,profile 可能需要重新测量。
因此,NestDNN 的部署效果依赖较准确的离线 profiling。
13.5 不解决输入难度自适应
NestDNN 的动态性主要来自运行时资源变化和多任务调度,而不是根据每一帧图像的难度动态选择模型。
换句话说,它关注的是:
当前资源够不够?当前多个应用怎么分资源?
而不是:
当前这张图像难不难?是否需要更大模型?
这一点和 FBS、RNP、SkipNet、BlockDrop 这类 input-adaptive 方法不同。
十四、整体评价
NestDNN 的核心贡献不是提出一个单独的剪枝准则,而是把模型压缩放到了移动端多任务系统里重新思考。
它真正关心的是:当一个设备上同时运行多个视觉应用,而资源又动态变化时,系统如何让每个应用都尽可能保持较好的精度和帧率。
为此,它提出了两个关键机制。
第一,用 TRR + Freeze-&-Grow 生成嵌套式 multi-capacity model,让一个模型可以提供多个资源—精度档位,同时避免多个独立模型带来的存储和切换开销。
第二,用 resource-aware runtime scheduler 在运行时动态选择 descendant model 和资源分配,使多个并发视觉应用在有限资源下整体表现更好。
这篇论文的价值在于,它把“模型压缩”从单模型、单预算问题扩展到多应用、多容量、动态资源调度问题。
它解决的问题非常系统化:
不是只问模型怎么变小,而是问移动端系统如何在资源变化时持续高效运行多个视觉模型。
十五、一句话总结
《NestDNN: Resource-Aware Multi-Tenant On-Device Deep Learning for Continuous Mobile Vision》提出一种面向移动端连续视觉的资源感知多租户推理框架,通过 TRR filter pruning 和 Freeze-&-Grow 生成嵌套式 multi-capacity model,并在运行时根据多个应用的精度、延迟和资源需求动态选择 descendant model 与资源分配;它的核心价值在于用一个共享参数模型提供多个资源—精度折中,并通过系统级调度提升多应用并发场景下的精度、帧率和能效。
