admin管理员组

文章数量:1566224

一般情况下,深度神经网络的计算本质上是一对tensor的计算,例如常见的conv2d的计算本质上是一个7层的for循环,那么底层的硬件,例如内存大小,SM的数量,threads和blocks等都会对最终的for循环造成影响。

现存的深度学习框架(例如Tensorflow,PyTorch ,MXNet)会将DNN中的计算映射到其底层提供的向量计算内核库(例如cuDNN,MKL-DNN)来实现高性能。 但是,这些内核库存在以下几个问题:

  • 现存的加速库cuDnn,MKL-DNN针对Tensor的优化是需要耗费大量的人力和经验的。
  • 硬件的发展导致会有更多的硬件出现,这种情况下再去人工手写就很窒息。

因此,目前大家希望设计一套自动搜索的过程。

  • 搜什么:搜tensor计算的for循环如何部署,例如for循环如何安排,如何切割,如何和底层PE map,因此我们针对一个for循环,其实是可以得到一个模板的,每个模板是有参数的。因此搜索就分为两个:搜模板和搜参数。例如图a展示的就是现在模板定了(for循环的次序定了),只需要搜 for循环的参数;图b展示的是搜模板,是通过我规定模板的次序(譬如说先split循环的轴,然后reorder等),然后按照我们规定的顺序进行搜索。所谓的beam搜索是指站在当前的搜索节点上,我们选择最优的几个节点,站在这个节点上往下一个搜索节点走,这种beam 搜索会导致一个问题:局部最优解不一定是全局最优解。

本文标签: 神经网络编译器Tensorscheduletune