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 解读 一、论文基本信息论文题目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 2018DBLP 记录显示其页码为 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 PruningNestDNN 先通过 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 方法TRRTriplet Response Residual。TRR 的直觉是如果一个 filter 提取出的特征能让同类图像更接近、异类图像更远那么这个 filter 更重要。给定一个 tripletanchor image、positive image、negative image。其中 anchor 和 positive 属于同一类negative 属于不同类。对于第 i 个 filterTRR 定义为其中表示第 (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-GenderResNet-50 用于 ImageNet-50、ImageNet-100、Places-32。论文把这六个应用分别标记为 VC、VS、VG、RI-50、RI-100、RP。(MSU Innovation Center)部署平台方面论文在三台 Android 手机上实现和评估 NestDNNSamsung 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 modelsNestDNN 可以在一个模型文件中提供多个容量版本。这比保存多个独立模型更适合移动端。它用参数共享解决了“多预算模型”在存储上的不可扩展问题。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 调度依赖准确 profileNestDNN 的调度器需要知道每个 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 与资源分配它的核心价值在于用一个共享参数模型提供多个资源—精度折中并通过系统级调度提升多应用并发场景下的精度、帧率和能效。