如何成为深度学习编译器研发工程师?
7 个回答
1、先熟悉一下深度学习和机器学习,教材就不推荐了,很多,一定要动手实践,CV/NLP跑几个小模型,了解一下深度学习模型的怎么回事,有什么样的算子
你说没有GPU,这个不是问题,用CPU也可以。
2、深度学习编译器主要用于两个场景,AI框架或者AI芯片的配套编译器,可以先了解一下AI框架和深度学习编译器的全景知识,比如,深度学习编译器与传统编译器的区别
3、熟悉并实践业界常用的开源AI编译器,推荐TVM,先了解一下原理,然后看一下TVM中不同类型算子的实现,比如element-wise类、reduce类、matmul类、conv类等,最后自己可以实现几个简单的,把端到端的流程和原理摸清楚,包括compute、schedule、codegen等等。
4、如果是做后端的AI编译器,需要了解一些硬件的编程知识,如GPU和NPU,GPU这一块有条件的话,推荐学习和实践一下cuda编程,NPU可以参考一下华为的昇腾
5、最后,也是最重要的,试着参与业界的开源框架社区或者到相关的公司去实习,重点了解实际场景下AI编译器的情况以及技能要求,并具备参与特性开发的能力,可以关注一下MindSpore社区(也算是打个广告),原因是:
- AI编译器做的比较全,包括图编译器(前端的硬件无关的,比如自动微分/自动并行;后端的硬件相关的优化)、算子编译器、端侧推理相关的编译器等等。
- 有大量的社区活动可以参加,比如模型和算子众筹、bug fix、MSG活动等等。
- 目前正在找实习生
我之前维护了一个仓库
用来记录mlsys相关的学习博客或者视频,主要是 llvm/tvm/mlir 相关的,最近又整理并更新了一些资料。对于想入门mlsys或者想深入学习某种编译器的开发者来说,希望这个仓库可以成为不错的起点。下面的内容是这个仓库的README预览,欢迎star和分享。
更加重要的是,欢迎大家一起维护这个mlsys资料整理的仓库,让入门llvm/tvm/mlir的国内小伙伴可以找到一手并且集中的资源。直接提pr修改readme即可,或者联系我让我加一下资料链接。
持续更新中...
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系列讲解(十六):图优化
- ep1|TPU-MLIR Introduction AI Compiler
- TPU-MLIR Ep2 TPU-MLIR Overview
- TPU-MLIR Ep3 MLIR Brief Intro
- ep17 | TPU-MLIR Introduction :To ONNX Format
- TPU-MLIR线上分享会(一):论文讲解
- MegCC 用模型编译的方式实现超轻量端上高性能推理
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 介绍
其它博客和网站精选(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
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」
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 开箱评测
其它编译器&&论文阅读
开拓眼界...
- 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