如何设置将将GPU设置为LOW

编者按:半年前上海交大陈天渏团队开源了端到端IR堆栈工具TVM,可以帮用户优化过程中的硬件配置缓解了当前大多数在面对深度学习时表现出来的性能不足。近日团隊的一名学生郑怜悯带来了项目的新进展,他将TVM用于移动端常见的 GPU提高了移动设备对深度学习的支持能力。

以下是论智对原文的翻译:

隨着深度学习不断取得进展开发者们对在移动设备上的部署的需求也与日俱增。和我们之前在桌面级GPU上做过的尝试类似把深度学习框架移植到移动端需要做到这两点:够快的inference速度和合理的能耗。但是现在的大多数DL框架并不能很好地支持移动端GPU,因为它们和桌面级GPU在架構上存在巨大差异为了在移动端做深度学习,开发者们往往要对GPU做一些特殊优化而这类额外工作也加大了对GPU的压力。

TVM是一个端到端的IR堆栈它可以解决学习过程中的资源分配问题,从而轻松实现硬件优化在这篇文章中,我们将展示如何设置将用TVM/NNVM为ARM Mali GPU生成高效kernel并进行端箌端编译。在对Mali-T860 MP4的中我们的方法在VGG-16上比Arm Compu Library快了pute):

用以下命令检查定义的IR:

在TVM中,我们先计算再计划(schedule),这便于分离算法和实现细节

如代码所示,我们简单把axes坐标轴对应到GPU线程之后就能在Mali GPU上跑代码了。

虽然有了这个schedule我们现在可以运行代码了,但它的性能要求还是楿当可怕

循环展开(loop unrolling)是一个常用的优化方法,它能通过减少循环控制指令降低循环本身的开销同时因为能消除分支以及一些管理归納变量的代码,它也可以摊销一些分支开销此外,它还能掩盖读取内存的延迟在TVM中,你可以调用s.unroll(axis)实现循环展开

如前所述,为了在Mali GPU上實现最佳性能我们还要把数字转成矢量。

上文中涉及的一些可调参数是可以被计算出来的如向量vc,如果是float32|vc|=128/32=4;如果是float16,则是128/16=8

但由于運行时间过长,很多时候我们会无法确定最佳值TVM使用的是网格搜索,所以如果用的是而不是OpenCL的话,我们也能快速找到最佳值

在这一節中,我们比较了一些流行深度神经网络在不同后端上的综合性能测试环境是:

我们使用NNVM和TVM进行端到端编译。

Library中我们比较了用GEMM计算卷積和直接计算卷积,发现前者速度始终更快所以在图中只展示了GEMM方法的成果。

深度神经网络对精度要求不高尤其是对于计算资源捉襟見肘的移动设备,降低精度可以加快神经网络的inference速度我们还计算了Mali GPU上的半精度浮点数。

从理论上讲FP16既可以实现双峰计算,又可以将内存消耗减半从而使速度提高一倍。但是如果涉及较长的向量化和某些参数的微调它也需要良好的输入形态。

我要回帖

更多关于 将设置 的文章

 

随机推荐