神经网络的软硬件协同加速
文章平均质量分 67
神经网络的软硬件协同加速
free1993
这个作者很懒,什么都没留下…
展开
-
Winograd(二)实测
测试环境说明:我测试了TVM里面默认的Winograd和卷积的模版。分别记录了他们运行的时间,发现在TVM没有优化的版本下,Winograd就是个笑话,就跑出来的时间就很坑,感觉winograd没有被广泛应用就是会存在加速其实没有很好的。测试例子输入的参数的说明batch,in_channel,in_size,num_filter,kernel,stride,padding,测试结果这测试结果,跑不过普通的卷积。还有很大的优化空间的。...原创 2021-06-30 17:02:55 · 227 阅读 · 0 评论 -
Winograd(一):背景知识介绍
背景winograd是针对卷积做的特定的卷积加速的算法。一维卷积对于输入是一维的In来说,当卷积核是F,输出是Out.其中y0和y1的计算公式如下所示:y0=z0x0+z1x1+z2x2y1=z1x0+z2x1+z3x2上面是针对的是正常卷积的计算过程,对于这种正常的卷积计算来说,我们是需要6次乘法和四次加法。为了加速计算,我们希望减少乘法的次数,用加法来代替乘法。因此winograd使用四个变量m1,m2,m3,m4来代替中间的计算。在这种情况下,将乘法减少到4次。因此我们将上述的计算原创 2021-06-28 18:39:10 · 1292 阅读 · 1 评论 -
多面体模型系列二
数据依赖关系多面体模型在上面的系列一已经介绍过了,然后我们现在需要来优化for循环之间的数据依赖关系。数据依赖关系可以分为3个基本的部分.对于我们例子中的二维矩阵的乘法来说,存在的三个数据依赖关系如下:Read dependence: the read-only data之间的流动。例如计算C[i][j]和C[i][j+1]都需要A[i][k] 。Flow dependence: transferring the intermediate results,例如C[i][j]的计算是不断累加中间变原创 2021-05-18 19:18:16 · 588 阅读 · 0 评论 -
多面体模型系列一
Polyhedral Model基本概念多面体模型是用于循环优化的数学模型,我们把满足多面体模型的循环称为static control part(SCoP)。在多面体模型中,一个循环由三个基本的组件组成:iteration domains, access relations, schedule.iteration domains由循环过程中访问的数据的下标组成。access relations标记访问的映射关系。schedule标记loop执行的过程针对上面的二维的矩阵乘法来说,iterat原创 2021-05-18 18:23:03 · 2211 阅读 · 3 评论 -
TVM简介
整体架构从开发者在不同深度学习开放平台上所撰写的代码,到最终在不同硬件平台上执行,这其中存在着不小的差距。深度学习框架更多关注开发者的便捷性,而硬件设备更注重能耗和效率。TVM/NNVM,定位于开源的深度学习编译器技术栈(open deep learning compiler stack),整体目的就是缩小这两者之间的差距。需要注意的是,无论是深度学习框架还是硬件设备,两者都具有高度的多样性,倘若一对一的进行优化和编译,工作量会由于组合爆炸而激增。为此,TVM/NNVM借用了在CPU架构中常用的编程语言原创 2020-12-12 18:34:25 · 9616 阅读 · 0 评论 -
代码优化-loop transformation(unroll,fusion,skew等)
loop transformation:模型的并行和局部性(时间和空间)loop fusion循环融合,就是将多个循环融合在一起。融合在一起的好处包括充分利用数据的局部性,同时利用一些pipeline/multithread的技术可以减少计算时间。例如对于下面的循环:在没有融合之前,我们得先访问A[i],然后串行访问B[i]。我们得launch两个kernel,也就是每个kernel都得处理一个for循环,这种增加了局部性。将一个整体的for循环拆成多个for循环称为loop fission.我原创 2021-05-10 19:19:09 · 1156 阅读 · 0 评论 -
Halide-based IR和 Polyhedral-based IR
背景编译器后端的第一步是生成低级IR。低级IR可以理解为实现单个算子的算法的抽象表达形式。编译器后端的第二步是后端优化。针对不同的硬件架构,不同的算法实现方式有不同的性能。后端优化的目的就是希望能找到算子的最优实现方式,达到最优的性能。编译器后端优化是AI编译器的核心内容。编译器后端的第三步是代码生成。代码生成即把优化后的低级IR转化成机器指令,这一步通常会借助其他成熟的编译工具来实现,不是AI编译器的核心内容。常用的编译工具包括跨平台的LLVM、Nvidia GPU的编译工具NVCC等等。AI编译器会原创 2021-05-10 18:33:50 · 2263 阅读 · 0 评论 -
神经网络的加速
背景目前神经网络应用在大多数的场景,包括计算机视觉(包括目标识别、检测),推荐系统,大型的科学计算等。神经网络的计算本质上是张量计算(tensor),因此为了加速神经网络的计算,我们就需要进行张量的加速计算。为了加速张量计算,我们需要软硬件协调。张量计算有两个特征计算密集(compute-intensive)访存受限(memory-bound)目前现存的一些技术算法层面稀疏性所谓的稀疏,就是利用神经网络计算过程中的零值元素。提出的要求就是只取出非零数值送到PE中,然后进行运算。包括的方面原创 2021-05-08 15:03:19 · 1972 阅读 · 0 评论