Home
Ruan Tingfeng
Cancel

OpenAI Triton 源码走读[ttir-2-ttgir]

相比 ttir 专注表示计算逻辑(硬件无关),ttgir 表示和硬件相关的计算表示。新增的 op 例如: alloc_tensor : tensor<128x32xf32, #share> :申请shared memory insert_slice_async: 往 shared memory 上 insert 一个 slice,语意上类似 tensor.insert...

OpenAI Triton 源码走读[transforms in ttir]

本文将从一个 MLIR Programer 的角度来读 Triton 源码。因为是主要阅读源码,所以比较枯燥,请选择避坑~ 前言 OpenAI Triton 是什么?这个问题很多大佬都已经回答过了,阅读完以下 blog 相信大家会有个基础的理解。 杨军老师的 谈谈对OpenAI Triton的一些理解,帮助大家建立一个宏观印象 董鑫大佬的 如何入门 OpenAI Triton...

MLIR Code Note

Tools 工欲善其事,必先利其器 推荐项目 学习 mlir 的项目 mlir-tutorial 使用 bazel 构建项目,相比 cmake 构建个人感觉更适合新手。 可以抄代码的项目 IREE 架构、风格上很有 Google 的风范。 ByteIR ,字节开源项目。 跳转工具clangd vscode 专属。 1.首先我们需要生成 compile_co...

CPP Note Needed for MLIR

内存模型 C++程序在执行时,将内存大方向划分为4个区域 代码区:存放函数体的二进制代码,由操作系统进行管理的 代码区是共享的,共享的目的是对于频繁被执行的程序,只需要内存中有一份代码即可 代码区是只读的,使其只读的原因是防止程序意外地修改了它的指令 全局区:存放全局变量和静态变量static以及常量,程序作用后释放 ...

Triton Kernel Optim

本文记录下本人优化 Triton Kernel 的思路,由于不了解 Cuda 编程以及对 GPU 体系结构知识只是一知半解,所以本文设计的优化思路都比较通用(aka naive)。 kernel写法上请参考 triton language guide、triton tutorial、以及flaggems等项目,网络资料很不错~ IMO,对 Triton Kernel 的优化过程可以简...

Triton Linalg

最近尝试了一下 Triton-Linalg ,一个开源的工作,支持了几乎所有 triton 原语到 linalg-on-tensor 的下降流程,在这里记录一下自己的学习过程。项目仓库: Triton-Linalg 仓库。 不看长文请调转:浅谈寒武纪开源的Triton-Linalg编译器前端 这将是一篇长文(车轱辘话全集),大该有以下部分,目前还未完工~ 介绍(背景、优缺点、和t...

LLM Inference Optimization

LLM Basic Note attention 1.QK的相似度计算不用除以模长 点积直接表现了向量之间的相似性,在后序softmax计算中,越大的点积就能越突出(越大的权重)。 如果除以模长,就变成了余弦相似度,忽略了向量长度因素的影响。 在self-attention和MHA中,Q和K都是通过变换而来的,保留模长的信息保证了在训练中可以改变变换Q和K的变换参数。 所以处理模...

Triton Example

Triton Kernel 的写法可以参考:官方 tutorial matmul 来自 03-mm 源码说明 以 tutorials/03-matrix-multiplication.py 中矩阵乘优化为例。 下面的group-order的行为能获得更好的data-reuse 分析:A和B中的内容都是行优先存储,以计算九个数为例,那么原始的一次load需要9+9$\times...

LLVM TableGen

TableGen 是一种描述性的语言,用来自动生成 huge include files with tables, .td 也可以理解成 target description。 目前在 MLIR 中使用 TableGen 的场景主要有注册 Dialect、Operation、Pass,并生成对应的 .inc 文件。 现在有个工作需要为 RISCV 扩展新的 Intrinsic,所以深入学...

AI Compiler 中的计算图切分

在 Auto-Parallelism 一文中讲到了ai compiler可能涉及的两种切图算法: (1)为了设备分布式执行切图,将计算图(静态图)切为子图, 为了在内存受限的独立设备上执行 例如:FlexFlow、Alpa (2)为了launch kernel切图(算子融合),子图对于硬件kernel可能过大,无法融合为1个kernel,为了便于在auto-scheduler时直接融(...