Sticky Posts
Post List
【MLIR】Transform Dialect【3】Transform 操作进阶
# 前言
本篇是学习 MLIR 中的 Transform Dialect 的第四篇,本章主要讲的是 MLIR Transform Dialect 的进阶用法,核心围绕如何用更规范、更类型安全的方式编写 transform 操作,以及如何定义自己的 transform 类型。内容来自 MLIR 官方教程 《Chapter 3: More than Simple Transform Operations》。
相关链接: LLVM Project ,MLIR 官方文档,MLIR 官网教程, 《Chapter 0: A Primer on “Structured” Linalg Operations》
more...【MLIR】Transform Dialect【2】添加新的Transformation操作
# 前言
本篇是学习 MLIR 中的 Transform Dialect 的第三篇,添加新的 Transformation 操作。这一章节主要讲了如何为 MLIR 的 Transform 方言添加一个简单的新变换操作。内容来自 MLIR 官方教程 《Chapter 2: Adding a Simple New Transformation Operation》
相关链接: LLVM Project ,MLIR 官方文档,MLIR 官网教程 。
作为初学者,错误在所难免,还望不吝赐教。
# 基本简介
在前一章节 《Chapter 1: Combining Existing Transforma
more...【MLIR】Transform Dialect【1】组合已有的变换
# 前言
本篇是学习 MLIR 中的 Transform Dialect 的第二篇,主要通过一个具体的 “全连接 + 偏置 + ReLU” 层例子,介绍了如何使用 Transform Dialect 来编写变换脚本。内容来自 MLIR 官方教程 《Chapter 1: Combining Existing Transformations》。
相关链接: LLVM Project ,MLIR 官方文档,MLIR 官网教程, 《Chapter 0: A Primer on “Structured” Linalg Operations》,【MLIR】Transform Dialect【0】保持计算结
more...【MLIR】Transform Dialect【0】保持计算结构
# 前言
本篇是学习 MLIR 中的 Transform Dialect 的第一篇,主要讲解 MLIR 为何及如何保持计算结构。内容来自 MLIR 官方教程 《Chapter 0: A Primer on “Structured” Linalg Operations》。
相关链接: LLVM Project ,MLIR 官方文档,MLIR 官网教程, 《Chapter 0: A Primer on “Structured” Linalg Operations》。
作为初学者,错误在所难免,还望不吝赐教。
# 基本简介
本章节主要内容是在阐述 : 为什么编译器不直接把高级计算(如矩阵乘)转成低级
more...【MLIR】跟着Toy语言学习MLIR【6】支持复合结构类型
# 前言
现在开启 MLIR 学习系列。本篇是跟着 Toy 语言学习 MLIR 的第六篇,前述章节已经完整介绍了 toy 语言经 MLIR 降级到 llvm ir,并通过 JIT 进行编译执行的过程,本章节是教程中增添复合类型章节。前述内容请参考【MLIR】跟着 Toy 语言学习 MLIR【1】Toy 语言和 Toy Dialect,【MLIR】跟着 Toy 语言学习 MLIR【2】pattern 匹配和重写,【MLIR】跟着 Toy 语言学习 MLIR【3】通过接口实现通用转换。
相关链接: LLVM Project ,MLIR 官方文档,MLIR 官网教程,【编译器】使用 llvm 编译自
more...【MLIR】跟着Toy语言学习MLIR【5】降级到LLVM及CodeGen
# 前言
现在开启 MLIR 学习系列。本篇是跟着 Toy 语言学习 MLIR 的第五篇,前述章节已经介绍到 toy dialect 降级到 Affine dialect,本章节主要介绍将其降级到 LLVM 及 Codegen 生成可执行文件的过程。前述内容请参考【MLIR】跟着 Toy 语言学习 MLIR【1】Toy 语言和 Toy Dialect,【MLIR】跟着 Toy 语言学习 MLIR【2】pattern 匹配和重写,【MLIR】跟着 Toy 语言学习 MLIR【3】通过接口实现通用转换,【MLIR】跟着 Toy 语言学习 MLIR【4】部分降级到低层方言。
相关链接: LLVM P
more...【MLIR】跟着Toy语言学习MLIR【4】部分降级到低层方言
# 前言
现在开启 MLIR 学习系列。本篇是跟着 Toy 语言学习 MLIR 的第四篇,主要介绍高层级 toy dialect 降级到低层方言的过程,前述内容请参考【MLIR】跟着 Toy 语言学习 MLIR【1】Toy 语言和 Toy Dialect,【MLIR】跟着 Toy 语言学习 MLIR【2】pattern 匹配和重写,【MLIR】跟着 Toy 语言学习 MLIR【3】通过接口实现通用转换。
学习 MLIR 最好的方式还是照着官方教程来,但是只看 MLIR 官网教程,Ch1 到 Ch6,没有基础的话又让人学着有点吃力。现发现好多细节,不看教程认识不到,所以当前内容跟随官网教程。
相
more...【MLIR】跟着Toy语言学习MLIR【3】通过接口实现通用转换
# 前言
现在开启 MLIR 学习系列。本篇是跟着 Toy 语言学习 MLIR 的第三篇,主要介绍如何实现通过接口进行通用转换,前述内容请参考【MLIR】跟着 Toy 语言学习 MLIR【1】Toy 语言和 Toy Dialect,【MLIR】跟着 Toy 语言学习 MLIR【2】pattern 匹配和重写。
学习 MLIR 最好的方式还是照着官方教程来,但是只看 MLIR 官网教程,Ch1 到 Ch6,没有基础的话又让人学着有点吃力。现发现好多细节,不看教程认识不到,所以当前内容跟随官网教程。
相关链接: LLVM Project ,MLIR 官方文档,MLIR 官网教程,【编译器】使用 l
more...【MLIR】跟着Toy语言学习MLIR【2】pattern匹配和重写
# 前言
现在开启 MLIR 学习系列。本篇是跟着 Toy 语言学习 MLIR 的第二篇,主要介绍 toy dialect 高层级方言的匹配重写,前述内容请参考【MLIR】跟着 Toy 语言学习 MLIR【1】Toy 语言和 Toy Dialect。
学习 MLIR 最好的方式还是照着官方教程来,但是只看 MLIR 官网教程,Ch1 到 Ch6,没有基础的话又让人学着有点吃力。所以本教程没有直接参照官网 Toy 教程,而是以 MLIR 工程的 toy 相关代码入手。欢迎参考。
相关链接: LLVM Project ,MLIR 官方文档,MLIR 官网教程,【编译器】使用 llvm 编译自定义语
more...【MLIR】跟着Toy语言学习MLIR【1】Toy语言和 Toy Dialect
# 前言
现在开启 MLIR 学习系列。本章介绍 Toy 语言和 Toy Dialect 这一步骤的转换。当然,是从 Toy AST 到 Toy Dialect 这一过程得转换。从 Toy 文本语言到 AST 这个转换过程,需要编译原理的知识和非常麻烦的词法分析器,且这个过程与 MLIR 无关,所以该文章不会包含这个过程。
学习 MLIR 最好的方式还是照着官方教程来,但是只看 MLIR 官网教程,Ch1 到 Ch6,没有基础的话又让人学着有点吃力。所以本教程没有直接参照官网 Toy 教程,而是以 MLIR 工程的 toy 相关代码入手。欢迎参考。
相关链接: LLVM Project ,ML
more...【琐记】你的爱好能坚持多少年
# It's A Rain Day 足球
雨天 足球
踢足球,开始于高中入学...
# 血遗术之谜
推荐一下我的小说:
《血遗术之谜》
更偏向于严肃小说。写小说,开始于研究生时代。
# 另外
还有博客和 3D 建模。
more...【Triton】Triton实现矩阵乘
# 前言
本篇介绍 Triton 实现的矩阵乘运算。本文结合 Triton 官方文档和官方 triton 矩阵乘实现方式,以绘图的方式介绍其加速算法和原理。比这对 NVIDIA GPU 架构理解尚浅,肯定存在理解偏差和错误,请批判性阅读,互相学习。
参考 Triton 中文官方文档、Triron 矩阵乘实现方式
作为初学者,错误在所难免,还望不吝赐教。
# 一点 CUDA 必备知识
# 流式多处理器 SM
一块 GPU 拥有多个流式多处理器 SM。
原子性绑定:一个线程块(Thread Block)中的所有线程,会被绑定到且仅绑定到同一个 SM 上执行。
一对多复用:一个 SM 在同一时刻
more...【LLM推理加速】FlashAttention
# 前言
本文介绍 FlashAttention。本文只关注 FlashAttention 前向推理部分的应用。
参考链接:Transformer 模型详解(图解最完整版) , Attention is All You Need,Pytorch 版本的 Transformer 实现、一文了解 Transformer 全貌(图解 Transformer)、大模型推理加速:看图学 KV Cache、手撕大模型|KVCache 原理及代码解析、FlashAttention 详解:为什么它能让大模型注意力计算又快又省显存?、Flash Attention 原理详解 (含代码讲解)、【手撕 LLM-Fl
more...【LLM推理加速】PagedAttention
# 前言
本文介绍 VLLM 的 PagedAttention。
参考链接:Transformer 模型详解(图解最完整版) , Attention is All You Need,Pytorch 版本的 Transformer 实现、一文了解 Transformer 全貌(图解 Transformer)、大模型推理加速:看图学 KV Cache、手撕大模型|KVCache 原理及代码解析、PagedAttention 论文解读、论文《Efficient Memory Management for Large Language Model Serving with PagedAttention
more...【LLM推理加速】Online Softmax
# 前言
本文介绍 VLLM 的 Online Softmax。
本文大部分内容来自于 【手撕 LLM-Flash Attention】从 softmax 说起,保姆级超长文!!。
参考链接:Transformer 模型详解(图解最完整版) , Attention is All You Need,Pytorch 版本的 Transformer 实现、一文了解 Transformer 全貌(图解 Transformer)、大模型推理加速:看图学 KV Cache、手撕大模型|KVCache 原理及代码解析 、FlashAttention 深度解析:从数学原理到工程实现、Flash Attenti
more...LLM基础知识【1】
# 前言
本文罗列一些大模型、Transformer 相关的基础知识。
可能会有误解和疏漏,谨慎参考。
# 什么是动态图
什么是计算图 :由「算子节点 + 张量边」组成的 DAG 有向无环图,记录:数据怎么走、谁加谁、谁乘谁、谁做归一化
什么是静态图 :我们通常把 onnx、TensorRT network IR 等看作静态图。先把整个网络结构完整定义、固化、序列化成一张固定的图,图是永久存在的文件 / 结构体(ONNX 文件、TRT Network IR),图一旦生成,运行中不能随便改分支、不能改循环次数,我们拿这张固定的图跑数据。
什么是动态图 :每次前向推理之前,才临时构建计算
more...Transformer模型
# 前言
学习大模型,首先得学习 Transformer。Transformer 由论文《Attention is All You Need》提出,现在已经是大模型的基础。本文介绍 Transformer 模型的结构。
Transformer 太火了,网上能够找到足够多的图和介绍文章,所以本文文章出现的图均来自论文和网络,非本人所画。
参考链接:Transformer 模型详解(图解最完整版) , Attention is All You Need,Pytorch 版本的 Transformer 实现、一文了解 Transformer 全貌(图解 Transformer)
# Transfor
more...【AI编译】LayerGroup Tiling Tile的疑惑和思考
# 前言
NPU 的设计相对封闭,从市面上先进的 NPU 芯片和其工具链,乃至开发文档中,我只能学习到大方向的设计思路。这远远不够:1. 资料有限,有可能在大方向理解上出现偏差,这导致整个流程相当多的地方走不通或难度过大; 2. 细节上需要经验来自行领悟,细节不通也无法下手。
一些开源的项目,如 TVM、NVDLA、和 MLIR,这些工程和现在 NPU 芯片的编译器的优化思路差异很大。 前者强调通用性、可移植性。为多种硬件后端提供统一的编译堆栈,通过自动化搜索等搜寻最优调度。而专用 NPU 的硬件已经固定(可拓展也是固定硬件资源的拓展),专家根据硬件特性直接编写最优或近似最优的优化策略(如 G
more...【AI编译】深度优先的Tile调度,万事大吉?
# 前言
本篇文章发现了单纯的 “深度优先的 Tile 调度” 存在的问题。先简单介绍一下单纯的深度优先调度,再指出其可能出现的问题。
错误在所难免,还望不吝赐教。
# 深度优先调度
请允许叫他深度优先调度。本人研究论文不多,我也不知道这种调度方式到底有没有一个官方的、或者大家默认的名称。但是从调度逻辑上,我把他叫做 ——“深度优先调度”。一来是为了指代简单,二来可以方便交流。
以下面这个两层卷积网络为例:
图中详细展示了输入输出 tensor,和两个卷积层的参数。
下图是这个例子的深度优先调度顺序。假设三个 Tensor 是这样切分的:第一个切成 20,20,20,4;第二个切成 10,1
more...












