组间交流和框架间对比

与 Darkroom 组交流

  • 首先是 TVM 学习了 Darkroom 中 Halide 的设计思想,其中 Halide 采用的一个思想是 Halide 将算法描述(algorithm) 和计算过程(schedule) 进行分离,这么做的主要原因是因为不同计算机体系结构的设计(缓存,SIMD等) 不同,从而导致算法的计算过程也不同;因此分离算法定义和计算过程,则可以方便为不同的体系结构指定不同的计算过程;
  • 对计算过程而言,Halide 可以比较快的实现一个性能还不错的 kernel,开发效率较高,换不同的计算过程(schedule) 测试方便;TVM 后于 Halide 发布,并且 TVM 做到了更高效的从计算图表示到代码生成方案。在 Halide 的规则制定基础上,TVM通过把图到op生成规则这一步进一步抽象化,把生成规则本身分成各个操作原语,在需要的时候加以组合,并且TVM 扩大了 schedule 的空间,加入了大量的通过手工代码优化经验抽象的规则,这使得在原先基于规则生成代码的方案上,又融入了更多的 TVM 的代码优化方案
  • TVM 中间低层计算图 IR 表示采用的是 Halide IR 图思想
  • 从对计算图的优化来看,双方从文档获得的信息均较少,其中 Darkroom 组得到的一些优化方案是较为传统的优化方案,如循环不连量、死代码删除、公共子表达式提取等;我们组看到的 TVM 对计算图的优化方案主要是针对不同硬件资源的优化方案,在 CPU 上 TVM 提供了循环平铺(tiling) 以及向量化、并行化的方案(其他常规优化交由 LLVM后端进行优化),在 GPU 上提供了如卷积、共享缓冲管理等优化方案

与 XLA 组交流

  • TVM和已有的解决方案不同,以XLA作为例子,TVM走了和目前的XLA比更加激进的技术路线,tvm可以用来使得实现XLA需要的功能更加容易 :已有的解决方案本身基于高级图表示的规则变换,可以产生一些图级别的组合op优化,如conv-bn fusion,但是依然要依赖于手写规则来达到从图的表示到代码这一步。图的op表示到代码本身可以选择的东西太多,如何做线程,如何利用shared memory,而大部分没有在图语言里面得到刻画,导致难以自动化。 这样下去深度学习系统的瓶颈必然从op实现的复杂度变成了实现graph compiler中模式生成规则的复杂度。走这个方向需要非常大的工程团队的支持,而我们希望采用更少的人力达到同样甚至更好的效果。
  • TVM 采取了风险更大但是回报也更大的长远技术路线。简单地说,TVM通过把图到op生成规则这一步进一步抽象化,把生成规则本身分成各个操作原语,在需要的时候加以组合。基于tvm我们可以快速地组合出不同的schedule方案。
  • 从对计算图的优化来看,XLA 包含一些常规的计算优化,如死代码删除、公共字表达式提取等, 并且 XLA 主要针对的是对 GPU 的优化,并且 XLA 有一套同时适用于多个资源架构的优化方案;我们组看到的 TVM 对计算图的优化方案主要是针对不同硬件资源的优化方案,在 CPU 上 TVM 提供了循环平铺(tiling) 以及向量化、并行化的方案(其他常规优化交由 LLVM后端进行优化),在 GPU 上提供了如卷积、共享缓冲管理等优化方案

results matching ""

    No results matching ""