面向专用硬件优化神经网络的策略
随着神经网络规模的不断扩大,在设备端部署它们越来越需要能够并行化常见运算的专用硬件。但为了获得最高效率,仅仅针对网络优化硬件是不够的;网络本身也应该针对硬件进行优化。
优化神经网络的标准方法是通过神经网络架构搜索,其目标是同时最小化网络规模及其执行的浮点运算次数。但这种方法不适用于神经芯片,因为神经芯片通常可以更快地执行易于并行化但浮点运算次数较高的任务,而难以并行化但浮点运算次数较低的任务则执行较慢。
最小化延迟是一个比最小化浮点运算次数更复杂的优化目标,因此在某设备硬件组,我们开发了多种策略,使神经网络架构搜索能够针对某新型神经引擎系列加速器优化网络架构。这些策略涉及对架构搜索空间进行裁剪,例如,降低陷入局部最优解的可能性。我们还发现,针对特定任务,将一些人工直觉与神经网络架构搜索结果相结合,可以帮助我们更可靠、更高效地将结果推广到新任务上。
在涉及多个不同机器学习任务的实验中,我们发现我们的神经网络架构搜索策略可以将延迟降低高达55%。
神经网络架构搜索的类型
神经网络架构搜索需要三要素:搜索空间定义,即指定构建网络可用的基础模块;成本模型,它是网络精度、延迟和内存的函数;以及优化算法。我们使用性能预估器来测量延迟和内存占用,但要测量精度,我们必须训练网络。这是一个主要瓶颈,因为训练单个网络可能需要数天时间。对数千种架构进行采样将耗费数千个GPU日,这显然既不实际,也不环保。
神经网络架构搜索算法分为三类,它们需要训练网络的次数不同:多阶段法、单次法和零次法。
- 多阶段法在每次迭代中对一组架构进行采样。每个网络都被训练并评估其精度和性能,然后基于它们的成本对下一组架构进行采样。进化算法或基于强化学习的算法通常用于多阶段方法。
- 单次法从一个称为超网的大网络开始,该网络包含多个可能的子图。在训练过程中,这些子图开始收敛到一个单一的、较小的网络。单次方法设计为仅训练一次,但其训练时间比多阶段方法中单个网络的训练时间长得多。
- 零次法的工作原理类似于多阶段方法,主要区别在于网络从未被训练。作为精度的替代指标,我们使用网络的可训练性评分,该评分是根据网络的拓扑结构、非线性和运算来计算的。零次方法收敛最快,因为计算评分在计算上非常便宜。缺点是可训练性与模型精度的相关性可能不佳。
搜索空间裁剪
神经网络架构搜索的成本函数可以可视化为一个地形图,每个点代表一个潜在的架构。基于浮点运算次数的成本函数会随着网络尺寸或通道数等因素单调变化:也就是说,如果你找到了一个成本下降的方向,可以确信继续沿着这个方向前进不会导致成本上升。
然而,加入加速器感知的约束条件会引入更多渐近线,即成本从下降转为上升的点,从而破坏了函数的单调性。这导致地形变得更加复杂和崎岖。
为了解决这个问题,我们减少了搜索空间中的选项数量。我们主要探索卷积架构,这意味着输入被分解为几个不同的分量,每个分量在网络中都有自己的通道。反过来,每个通道中的数据会以几种不同的方式进行过滤;每种过滤都涉及不同的数据卷积。
以前,我们会以1为步长探索通道数;而现在,我们只考虑少数几个通道大小。我们将通道大小的选项限制在对神经引擎的并行度因子有利的特定值上。并行度因子是可以并行执行的操作(如点积)的数量。在某些情况下,我们甚至在搜索空间中添加了深度乘数比率,用于在整个模型中缩放通道数。
这些改进可以想象为在更平滑的地形上迈出更少但更大步的步伐,而不是试图穿越因成本函数中加入加速器感知性能而导致的崎岖地形。在优化过程中,由于选项数量减少,它们带来了更快的收敛速度;并且由于裁剪后的搜索空间具有单调性,还提高了稳定性和可靠性。
关键细节在于我们的性能预估器。我们不是在实际硬件或模拟器上部署架构来获取性能指标,而是使用一个机器学习回归模型来估计它们,该模型是在不同算子或子图的测量值上训练的。
在推理时,预估器会将查询的架构分解为子图,并使用回归模型估计每个子图的性能。然后,它会累加这些估计值,以给出模型级的性能。这种基于回归器的设计简化了我们的神经网络架构搜索框架,因为它不再需要编译、推理或硬件。这项技术使我们能够在设计阶段测试加速器,甚至在为它们开发定制编译器和硬件模拟器之前。
将神经网络架构搜索产品化:专家在环
裁剪搜索空间提高了收敛速度、稳定性和可靠性,但将其转移到新的用例并不简单。例如,为检测器模型进行的神经网络架构搜索结果可能不易转移到分类模型。另一方面,由于时间限制,为每个新数据集从头运行神经网络架构搜索可能不可行。在这些情况下,我们发现结合神经网络架构搜索结果和人类专业知识是最快的方法。
当我们在不同数据集上进行神经网络架构搜索时,我们看到了一些共同模式,例如将卷积层与之前的卷积层融合,减少通道数,并使它们与硬件并行度因子对齐。
特别是,在倒置瓶颈块中融合卷积层对提高效率贡献最大。仅通过这些修改,我们观察到延迟降低了高达50%,而一个完全收敛的神经网络架构搜索模型会产生略好的53%的降低。
在从头运行神经网络架构搜索不可行的情况下,人类专家可以依赖数学直觉和对类似数据集上神经网络架构搜索结果的观察,来构建所需的模型架构。
成果与产品影响
我们将此技术应用于某设备产品组合中的多个产品,从Echo Show和Blink家庭安全产品到最新的家用消费机器人Astro。
1. 将Echo Show的检测延迟减半
Echo Show运行一个模型来检测人体存在并定位房间内被检测到的人。原始模型使用了倒置瓶颈块。我们使用加速器感知的神经网络架构搜索将此模型的延迟降低了53%。
我们对深度乘数以及用融合倒置瓶颈块替换倒置瓶颈块的机会进行了搜索。要求是在提高延迟的同时,保持原始模型的平均精度均值不变。我们的V3模型将延迟提高了超过53%(即速度提升2.2倍),同时保持平均精度均值分数与基线相同。
神经网络架构搜索后的发现: 并非每次倒置瓶颈块融合都能改善延迟和精度。较后层更大,用融合层替换它们会损害性能。对于选择融合的层,浮点运算次数如期增加,但延迟并未增加。
2. 使模型适配Blink泛光摄像头的严苛内存预算
Blink摄像头使用分类模型进行安全辅助。我们的目标是将模型参数和峰值激活内存控制在严苛的内存预算内。在这种情况下,我们将神经网络架构搜索技术与专家在环相结合以提供微调。在分类数据集上的神经网络架构搜索结果提供了关于哪些算子/子图更改可以从加速器设计中获益的直觉。
专家建议是用标准卷积替换深度卷积,并通过使整个模型的通道数为偶数(最好是并行度因子的倍数)来减少通道数。通过这些更改,模型开发者能够将模型大小和中间内存使用量减少47%,并使模型符合预算要求。
3. 为机器人技术实现快速语义分割
在机器人技术背景下,语义分割用于理解机器人与之交互的对象和场景。我们对此模型的目标是将延迟减半。我们的起点是一个为在CPU上运行而优化的语义分割模型。
对于此模型,我们搜索了不同的通道大小、融合方式以及输出和输入维度。我们使用多阶段方法结合进化搜索算法。神经网络架构搜索为我们提供了多个具有不同性能的候选模型。最佳候选模型能够将延迟减半。
4. 通过设备端推理保障用户隐私
某神经引擎支持在设备上进行大模型推理,因此我们可以在不将数据发送到云端的情况下处理麦克风和视频馈送。例如,某神经引擎使Alexa能够在设备上执行自动语音识别。设备端处理还提供了更好的用户体验,因为推理流程不会受到间歇性连接问题的影响。在我们的神经网络架构搜索工作中,我们发现更大、更精确的模型现在也可以在设备上运行,且不会影响延迟。
使边缘AI可持续发展
我们之前提到,需要完整训练的多阶段神经网络架构搜索可能耗费高达2000个GPU日。然而,通过本文中描述的某些技术,我们能够在大大缩短的时间内创建高效的架构,使神经网络架构搜索更具可扩展性和可持续性。但我们的可持续发展努力不止于此。
由于其并行性和混合精度特性,神经引擎比通用CPU更节能。对于一百万个普通用户而言,差异每年达到数百万千瓦时的数量级。
当我们通过神经网络架构搜索优化模型时,我们增加了设备同时运行更多神经网络模型的能力。这使我们能够使用更小的应用处理器,并且在某些情况下,使用更少的处理器。通过这种方式减少硬件占用,我们进一步减少了设备的碳足迹。
未来工作
我们已经认识到,裁剪需要一位深入了解硬件设计的专家。这可能无法扩展到未来更复杂的硬件世代。我们还认识到,在时间紧迫的情况下,让专家参与仍然比从头运行神经网络架构搜索更快。因此,我们正在持续研究具有加速器感知能力的神经网络架构搜索算法如何处理大型搜索空间。我们还致力于通过探索如何将三类算法结合来提高搜索算法的效率和效果。我们还计划通过剪枝和聚类引入稀疏性来探索模型优化。敬请期待!FINISHED