MLSys 2021

Table of Contents

MLSys 大部分文章质量都一般,因此只做粗读。

Cortex: A Compiler for Recursive Deep Learning Models

对 Tree-LSTM 形状的结构进行加速,递归结构加速的关键有两点:

  • 把所有计算 offload 到 GPU 上,避免大量无必要的 kernel call,减少在 CPU 上处理控制流的时间。
  • 把每次计算重复使用的参数 cache 起来(比如说 \(h_{t} = W \cdot [ h_{l} \| h_{r} ] + b\) 里面的 \(W\) 和 \(b\) ,类似于 persistent RNN 的做法。

解决方案:kernel fusion,把整颗树的计算 fuse 到一个 kernel 里。

本文提出了一个编译器层面(实际处理的场景很局限)的解决方案,把树结构和计算函数分离,然后做一些简单的 scheduling 和针对树形结构常用的优化(例如分开内部节点和叶子的计算)。

缺点当然还是有很多的,fuse 起来之后做反向传播就比较麻烦,而且需要每一棵树编译一个 kernel。

TODO 思考反向传播咋弄

Horizontally Fused Training Array: An Effective Hardware Utilization Squeezer for Training Novel Deep Learning Models

又是一篇做 horizontal fusion 的文章,面向的场景是超参数优化这种场景——有大量网络结构相同参数不同的模型要跑,在这种情况下可以并行执行不同轮次的同一个算子(把不同轮次的数据矩阵和权重矩阵都堆叠起来,调用一个新算子,由于大部分算子都是 GUFuncs,不需要实现新算子)。看起来工程量也不大,不需要对计算图做处理,也不需要做复杂的调度。

花了不少篇幅来介绍这种实验设置的必要性(为了说服审稿人这不是强行增加并行度)。

IOS: Inter-Operator Scheduler for CNN Acceleration

仍然是 horizontal fusion,主要解决多分支 CNN 类似的计算模式。

之前的工作例如 TASO 只能合并同类型算子。这篇文章试图并行不同算子,具体的方式是:

  • 分割计算图为 stage 和 group
  • 同一个 stage 的算子同步执行(相同计算模式直接合并,不同模式使用 cuda stream)
  • 同一个 group 中的算子顺序执行。

提出了一个动态规划(指数级)算法最优化时延。没有与 Rammer 等工作做比较。

Equality Saturation for Tensor Graph Superoptimization

TASO 算法实际上是一个提出一类 rewrite rule 并且找到如何 rewrite 能在一个 cost model 下得到最优替换的过程。这与 egg 的应用场景完全重叠,因此这篇文章用 egg 重写了 TASO。

Nimble: Efficiently Compiling Dynamic Neural Networks for Model Inference

目前为止模型的推理引擎大部分针对静态图和指定 shape 的输入设计,而实际场景下网络中有可能有控制流(e.g. beam search),输入数据的 shape 是不定的(e.g. dynamic batch size)。Nimble 提出了一套解决方案:

编译器层面

  • 类型方面,增加了一个 Any 类型(用来标注不定长 Tensor 或者结果不定长的算子例如 unique),及相应的 type inference。
    • 由于 Any 不确定具体值,可能会漏掉一些编译期可以检查的 error,可以用 sub-shaping 来解决。
  • shape function,分为三类:数据有关,数据无关和

Author: expye(Zihao Ye)

Email: expye@outlook.com

Date: 2021-05-01

Last modified: 2021-10-25 Mon 21:58

Licensed under CC BY-NC 4.0