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 里。

本文提出了一个编译器层面的解决方案,把递归模式和树结构分离,对于每种递归模式编译一个kernel,然后每次推理的时候只需要在允许时计算一下index就可以。

至于编译过程本身,做了一些简单的 scheduling 和针对树形结构常用的优化(例如分开内部节点和叶子的计算)。

缺点当然还是有很多的,fuse 起来之后做反向传播就比较麻烦。

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 提出了一套解决方案。

Author: expye(Zihao Ye)

Email: expye@outlook.com

Date: 2021-05-01

Last modified: 2022-04-26 Tue 23:33

Licensed under CC BY-NC 4.0