tvm_mlir_learn
我也维护了一个cuda学习仓库 https://github.com/BBuf/how-to-optim-algorithm-in-cuda 以及一个如何学习深度学习框架(PyTorch和OneFlow)的学习仓库,https://github.com/BBuf/how-to-learn-deep-learning-framework , 有需要的小伙伴可以点一点star
项目结构介绍
scheduler
TVM 中 scheduler 详细举例,这里将 https://zhuanlan.zhihu.com/p/94846767 这篇文章的例子用TVM 0.8.0.dev 重写。dataflow_controlflow
数据流和控制流的区别示例,这里是Pytorch为例子。paper_reading
编译器方面的一些论文阅读,如 PET / Ansor/ MLIR 等。relay
TVM 中一些 Relay 相关的示例,比如如何自定义 Pass,如何在 Jetson Nano 中运行DarkNet的YOLO模型等。codegen
TVM 中 Codegen 相关示例,基于张量表达式和Relay IR。torchscript
Pytorch的TorchScript的用法。- compile_tvm_in_docker.md 。在Docker中编译TVM。
tvm_pytorch_resnet18_inference.py
使用 TVM 在 X86 CPU 上运行 Pytorch 的 ResNet18 模型。tvm_onnx_resnet18_inferentaicce.py
TVM 加载 ResNet18 的 ONNX 模型进行推理。pytorch_resnet18_export_onnx.py
Pytorch 导出 ResNet18 的 ONNX 模型示例。optimize_gemm
让深度学习编译器来指导我们写代码,以GEMM为例。
AI编译器/LLVM相关学习资料整理
视频收集
GiantPandaCV 翻译的视频
- What Is MLIR && What Is TVM?
- TVM Conf 2020 - An Introduction to TVM Part1
- TVM Conf 2020 - An Introduction to TVM Part2
- Torch MLIR公开会议翻译视频(自制中英双字完整版)
- TVM命令行驱动程序 视频教程
- 基于 MLIR 完成对 GEMM 的编译优化 中英视频上,中部分
- TVM TensorIR 视频讲解(熟肉)
- What Is LLVM?
- How To Install LLVM?
- Running the LLVM Tools
- LLVM IR介绍
LLVM 系列视频对应的源码在:https://github.com/lac-dcc/llvm-course
国内其它up主的编译器视频(包含LLVM/MLIR/TVM)
LLVM相关视频
LLVM相关的视频比较少,youtube上比较多,上面 GiantPandaCV 翻译的几期 LLVM 入门视频也是来源于 youtube,大家可以自行查找学习。
MLIR相关视频
- 人工智能编译器MLIR-官方入门教程讲解
- MLIR Toy Tutorial概述
- MLIR & python binding简介
- [MLIR] 使用MLIR完成一个端到端的编译流程
- TPU-MLIR系列讲解(一):AI编译器是啥?
- TPU-MLIR系列讲解(二):TPU-MLIR简介
- TPU-MLIR系列讲解(三):MLIR语法介绍(上)
- TPU-MLIR系列讲解(四):MLIR语法介绍(中)
- TPU-MLIR系列讲解(五):MLIR语法介绍(下)
- TPU-MLIR系列讲解(六):前端转换
- TPU-MLIR系列讲解(七):MLIR- Dialect Conversion
- TPU-MLIR系列讲解(八):Lowering in TPU-MLIR
- TPU-MLIR系列讲解(九):量化概述
- TPU-MLIR系列讲解(十):量化推导
- TPU-MLIR系列讲解(十一):量化校准
- TPU-MLIR系列讲解(十二):量化感知训练
- TPU-MLIR系列讲解(十三):精度验证
- TPU-MLIR系列讲解(十四):Pattern Rewriting
- TPU-MLIR系列讲解(十五):模型适配
- TPU-MLIR系列讲解(十六):图优化
- ep17 | TPU-MLIR Introduction :To ONNX Format
- Ep18 TPU Memory
- Ep19 TPU Memory (2)
- Ep20 Add a New Operator
- Ep21 fuse prepocess 【AI编译器】
- ep1|TPU-MLIR Introduction AI Compiler
- TPU-MLIR Ep2 TPU-MLIR Overview
- TPU-MLIR Ep3 MLIR Brief Intro
- AI框架源码走读:tpu-mlir(一)
- AI框架源码走读:tpu-mlir(二)
- AI框架源码走读:tpu-mlir(三)
- TPU-MLIR线上分享会(一):论文讲解
- MegCC 用模型编译的方式实现超轻量端上高性能推理
- 动态shape深度学习编译器论文分享:DISC
TVM相关视频
- 陈天奇 机器学习课程
- AI-Compiler科普——TVM的使用讲解
- TVM流程梳理
- TVM-Realy流程梳理
- AI编译器后端优化介绍
- 算子的计算和调度
- 算子优化的手工方式
- 算子循环优化
- 指令和存储优化
- Auto Tuning原理
- TVM简介
- TVM自动调度算法AutoTVM
- ANSOR:为深度学习生成高性能张量程序
- TVM 编译流程与中间表示分析(一)
- TVM 编译流程与中间表示分析(二)
GiantPandaCV原创的学习笔记
- TVM 学习指南(个人版)
- 白杨:TVM源语-Compute篇
- MLSys 15-884: Course Introduction
- OSDI 2021 PET 论文解读(代码生成相关工作)
- Buddy-MLIR 项目详解(入门 MLIR 极佳选择)
- 【社区实践】为 TVM 新增 OneFlow 前端
- 【TVM 三代优化巡礼】在X86上将普通的矩阵乘法算子提速90倍
- 【论文解读】基于MLIR生成矩阵乘法的高性能GPU代码,性能持平cuBLAS
- 【从零开始学深度学习编译器】二十,MLIR的Pattern Rewrite机制
- 【从零开始学深度学习编译器】十九,MLIR的Pass机制实践
- MLIR:摩尔定律终结的编译器基础结构 论文解读
- 【从零开始学深度学习编译器】十八,MLIR中的Interfaces
- 【用沐神的方法阅读PyTorch FX论文】
- 【以OneFlow为例探索MLIR的实际开发流程】
- 【从零开始学深度学习编译器】十七,MLIR ODS要点总结下篇
- 【从零开始学深度学习编译器】十六,MLIR ODS要点总结上篇
- 【从零开始学深度学习编译器】十五,MLIR Toy Tutorials学习笔记之Lowering到LLVM IR
- 【从零开始学深度学习编译器】十四,MLIR Toy Tutorials学习笔记之部分Lowering
- 【从零开始学深度学习编译器】十三,如何在MLIR里面写Pass?
- 【从零开始学深度学习编译器】十二,MLIR Toy Tutorials学习笔记一
- 【从零开始学深度学习编译器】十一,初识MLIR
- 可以让深度学习编译器来指导算子优化吗
- 【从零开始学深度学习编译器】十,TVM的整体把握
- Ansor论文阅读笔记&&论文翻译
- 【从零开始学深度学习编译器】九,TVM的CodeGen流程
- 【从零开始学深度学习编译器】番外二,在Jetson Nano上玩TVM
- 【从零开始学深度学习编译器】八,TVM的算符融合以及如何使用TVM Pass Infra自定义Pass
- 【从零开始学深度学习编译器】七,万字长文入门TVM Pass
- 【从零开始学深度学习编译器】六,TVM的编译流程详解
- 【从零开始学深度学习编译器】五,TVM Relay以及Pass简介
- 【从零开始学深度学习编译器】番外一,Data Flow和Control Flow
- 【从零开始学深度学习编译器】四,解析TVM算子
- 【从零开始学TVM】三,基于ONNX模型结构了解TVM的前端
- 【从零开始学深度学习编译器】二,TVM中的scheduler
- 【从零开始学深度学习编译器】一,深度学习编译器及TVM 介绍
- ChatGPT和Claude 对比测试(以Review MLIR Codegen代码为例)更新官方ChatGPT的结果
- GPT4 VS Claude In MLIR
- OpenAI/Triton MLIR 第零章: 源码编译
- OpenAI/Triton MLIR 第一章: Triton DSL
- 深度学习编译器之Layerout Transform优化
其它博客和网站精选(TVM&MLIR&LLVM 相关)
LLVM精选
- LLVM Tutorial
- miniSysY 编译实验课程,学习LLVM的中文入门资料
- 中科院 LLVM每日谈专栏
- 使用LLVM实现一门语言(一)Lexer
- 使用LLVM实现一门语言(二)Parser
- 使用LLVM实现一门语言(三)Code Generation to LLVM IR
- 使用LLVM实现一门语言(四)Optimizer
- 使用LLVM实现一门语言(五)Adding a JIT Compiler
- 使用LLVM实现一门语言(六)SSA
- 使用LLVM实现一门语言(七)Control Flow
- 使用LLVM实现一门语言(八)User-defined Operators
- 使用LLVM实现一门语言(九)Mutable Variables
- LLVM编译器之Pass添加
- CUDA 编译与 NVVM IR 笔记
- LLVM 中的循环: Loop
TVM精选
- 深度学习编译器 TVM 代码串讲
- TVM编译流程与中间表示分析
- TVM Overview
- TVM - Relay IR计算图可视化
- TVM - 代码生成流程
- TVM/VTA代码生成流程
- tvm算子优化schedule(一)--CPU篇
- tvm算子优化schedule(二)--GPU篇
- TVM Runtime System 概述
- TVM PackedFunc实现机制
- 深入理解TVM:Python/C++互调(上)
- Round-tripping objects through the FFI
- TVM 自底向上(一):基本框架和概念
- TVM 自底向上(二):TIR 的概念和编译原理
- TVM 自底向上(三):TE 的概念和编译原理
- TVM 自底向上(四):TE/TIR Schedule 的原理
- 深入理解TVM专栏,主要是对部分codebase的解读
- tvm schedule详细举例
- TVM - 代码生成流程
- Relax: TVM 的下一代图层级 IR
- TVM之Tensor数据结构解读
- TVM之设计模式解读(一)--visitor模式
- TVM之设计模式解读(二)--责任链模式
- TVM之TIR相关数据结构
- TVM之设计模式解读(三)-单例模式,模板方法模式
- TVM之tir 转换成llvm ir
- TVM之graph_runtime
- TVM之relay.build流程解读
- TVM学习(一)
- TVM学习(二):算符融合
- TVM学习(三)编译流程
- TVM学习(四)codegen
- TVM学习(五)schedule
- TVM学习(六)细读前端
- TVM学习(七)算子
- TVM学习(八)pass总结
- TVM学习(九)codegen中的内存申请
- TVM学习(十)从relay到TOPI
- TVM TensorIR 浅析
- TVM图编译器NNVM简单探究
- TVM图编译器Relay简单探究
- 基于TensorIR生成mma指令并实现16x16x4矩阵乘
- 基于TVM的PTX Tensor Core汇编代码生成
- 一个tvm(te)实现的cutlass efficient gemm
- TIR Script CUTLASS Efficient Gemm
- TVM系列「一」TVM概览
- TVM系列「二」TVM学习资源
- TVM系列「三」TVM官方文档的结构
- TVM系列「四」TVM的使用:compute+schedule双剑合璧
- TVM系列「五」TVM整体架构及其代码生成
- TVM系列「六」Relay IR与Relay Pass
- TVM系列「七」AutoTVM(AutoTune)
- TVM系列「八」AutoScheduler「Ansor」
- SparseTIR: TVM的稀疏算子编译抽象
- Web-LLM:机器学习编译纯浏览器运行大模型
- MLC-LLM: 在任何设备上编译运行大语言模型
- TVM和BLIS对GEMM计算/优化方式的对比
- TVM Tir 到 VTA Simulator 指令仿真的过程
- 【我与TVM二三事 中篇(5)】tvm tensorrt
- TVM Relax如何支持dynamic shape
MLIR精选
- 机器学习编译器代码生成相关 MLIR Dialect
- 编译器与中间表示: LLVM IR, SPIR-V, 以及 MLIR
- MLIR Vector Dialect 以及 Patterns
- MLIR Linalg Dialect 以及 Patterns
- 向外借力:Pluto助力MLIR编译器的多面体优化
- IREE编译流程解析
- IREE编译流程解析(一)
- IREE编译流程解析(二)
- IREE编译流程解析(三)
- IREE编译流程解析(四)
- IREE编译流程解析(五)
- IREE编译流程解析(六)
- megcc 开箱评测
- 阿里 BladeDISC 深度学习编译器正式开源
- 全面支持 PyTorch 2.0:BladeDISC 5月~11月新功能发布
- 【GTC 22】通过 PAI-Blade 更方便、更鲁棒地使用 TensorRT
- LLVM后端:TableGen简易入门
其它编译器&&论文阅读
开拓眼界...
- Glenside : 如何自动发现im2col布局转换?
- 基于Halide自动生成Kernel Fusion & Tiling
- AKG: 使用post-tiling fusion策略完成无副作用的内存优化
- [教程翻译] Polyhedral Tutorials
- 带宽受限下的DSA后端优化
- Equality Saturation优化在AI编译器中遇到的挑战
- DSA后端Compute Schedule与Buffer Schedule
- ASPLOS,我的初体验
- 读You and Your Research笔记
- [阅读笔记] AStitch @ASPLOS 2022
- [阅读笔记] RAKE @ASPLOS 2022
- [阅读笔记] NASA @ISCA 2021
- [阅读笔记] BOLT @MLSys 2022
- [阅读笔记] Alpa/Parax @OSDI 2022
- [阅读笔记] SIMD^2 ISCA 2022
- AMOS ISCA 2022
- [阅读笔记] PCCS MICRO 2021
- [阅读笔记] Planaria@MICRO 2020
- Chimera HPCA 2023
- 在MacBook Pro 2019上优化GEMM
- OSDI '20 | RAMMER (NNFusion) 如何进一步压榨加速器性能
- 算子调度优化论文分享:Rammer
- 【AI编译器】 论文阅读(二)Rammer
- TorchDynamo 初探:Python ByteCode 的动态修改
- PyTorch 2.0 Dynamo 字节码详解!自顶向下,由浅入深
- Paper阅读笔记: Welder: Scheduling Deep Learning Memory Access via Tile-graph
- [Hands-On Polyhedral] C CodeGen
- 【论文阅读】DISTAL: 分布式张量代数编译器 (DISTAL: The Distributed Tensor Algebra Compiler)