0.Triton Optimizer


OpenAI Triton简介中提到Optimizer,其主要用于分析和优化前端传入的Triton IR,通过各类 Transformation 和 Conversion (Pass) 策略,最终传递给 Backend 做 translate,IR的整个经过的流程如下:

 从图中可以看出主要有三个部分的优化:

  1. Triton IR的优化;
  2. Triton IR到TritonGPU IR的转换;
  3. TritonGPU IR的优化;

其中与硬件GPU相关的IR为TritonGPU IR,该IR包含了与GPU 相关的信息,如硬件相关的Op以及layout信息。

OpenAI triton分享:triton源码结构_哔哩哔哩_bilibili

1.Triton IR优化pass


Triton IR 上的优化主要是计算本身的,与硬件无关的优化,包含了如下 Pass:

  1. Inliner Pass:将 Kernel 内调用的子函数 Inline 展开;
  2. Combine Pass:将一些特定的case进行op的融合,如:
    select(cond, load(ptrs, broadcast(cond), ???), other) => load(ptrs, broadcast(cond), other)
  3.  Canonicalizer Pass:通过应用一系列的规则来简化和标准化IR;
  4. CSE Pass:MLIR 的 cse Pass,公共子表达式消除;
  5. LICM Pass:MLIR 的LoopInvariantCodeMotion Pass(https://mlir.llvm.org/doxygen/LoopInvariantCodeMotion_8cpp_source.html),将循环无关的变量挪到for循环外;

 2.TritonGPU IR 的优化

TritonGPU IR 上的优化在计算本身优化外,新增了 GPU 硬件相关的优化,具体的 Pass如下:

  1. ConvertTritonToTritonGPU Pass:将 Triton IR 转换为 TritonGPU IR,主要是增加 TritonGPU 硬件相关信息的 layout;
  2. Coalesce Pass:访存合并pass,重排order,使得最大contiguity 的维度排在最前面(pass原理解析可以参考:https://zhuanlan.zhihu.com/p/687394750);
  3. Combine Pass:和Triton IR优化pass功能一致;
  4. Pipeline Pass:MMA 指令(对应功能部件为NVIDIA的Tensor Core)对应的 global memory 到 shared memory 的 N-Buffer 多缓冲优化;
  5. Prefetch Pass:MMA 指令对应的 shared memory 到 register file 的 N-Buffer 多缓冲优化;
  6. Canonicalizer:和Triton IR优化pass功能一致;
  7. CSE Pass:和Triton IR优化pass功能一致;
  8. LICM Pass:和Triton IR优化pass功能一致;

MMA指令实现原理可以参考(https://zhuanlan.zhihu.com/p/455166274 

Logo

欢迎来到由智源人工智能研究院发起的Triton中文社区,这里是一个汇聚了AI开发者、数据科学家、机器学习爱好者以及业界专家的活力平台。我们致力于成为业内领先的Triton技术交流与应用分享的殿堂,为推动人工智能技术的普及与深化应用贡献力量。

更多推荐