本课程旨在建立一个完整的se5算法试验盒应用的流程以及介绍相关背景知识,通过学习这门课程,可以了解如何使用se5完成一些检测相关的任务。
TPU-MLIR是专注于AI芯片的TPU编译器,该编译器工程提供了一套完整的工具链,可以实现将多种不同的深度学习框架(PyTorch、ONNX、TFLite和Caffe)下预训练的神经网络模型,通过编译和转换实现转化为可以在算能TPU上高效运算的模型文件bmodel/cvimodel,通过量化为不同精度的bmodel/cvimodel实现在算能硬件TPU上的加速和模型性能的优化,从而实现将各种目标检测、语义分割和目标跟踪等相关模型部署到底层硬件上进行加速。
本节课程主要分为三大部分:
一、实现本地开发环境的搭建和配置,并完成相关Sophon SDK、TPU-MLIR编译器核心理论及相关加速接口的学习。
二、完成ONNX、TFLite、Caffe和PyTorch四种深度学习模型样例的转换与量化,以及其他深度学习框架转换中间格式ONNX的方法。
三、带领大家进行实战化移植四个实例算法(检测、识别和跟踪等方向算法)进行编译转换和量化,最终部署到算能1684x张量处理器的TPU芯片上进行性能测试。
本课程将通过实战演示作为驱动,带领大家全面、直观地了解TPU-MLIR编译器的使用,实现快速上手转换和量化不同深度学习模型算法并能够在移植到算能AI芯片TPU上进行部署测试。目前TPU-MLIR的使用已被应用在算能研发的最新一代人工智能芯片BM168X及CV18XX上,搭配上芯片本身的高性能ARM内核以及相应的SDK,能够实现深度学习算法的快速部署。
本课程的学习在模型移植部署上具备以下优势:
1、支持多种深度学习框架
目前直接支持的框架有PyTorch、ONNX、TFLite和Caffe。其他框架的模型需要转换成ONNX模型。如何将其他深度学习架构的网络模型转换成ONNX, 可以参考ONNX官网: https://github.com/onnx/tutorials。
2、易操作
通过阅读开发手册及相关部署案例,了解TPU-MLIR的原理和操作步骤,实现模型从零到部署,掌握相关Linux操作命令和模型编译量化命令即可上手实操。
3、量化部署步骤简便
模型转换需要在算能提供的docker内执行, 主要分两步, 一是通过 model_transform.py 将原始模型 转换成mlir文件, 二是通过 model_deploy.py 将mlir文件转换成bmodel格式。bmodel便是可以在算能TPU硬件上运行加速的模型文件格式。
4、适配多架构多模式硬件
量化好的bmodel模型可以运行在PCIe和SOC两种模式上的TPU上进行性能测试
5、资料手册齐全
丰富的教学视频,包含详细的理论讲解与实战操作,充分的实操指导和规范化的代码脚本均开源至课程中,供所有用户进行学习。
SOPHON-SDK开发指南:https://doc.sophgo.com/sdk-docs/v23.05.01/docs_latest_release/docs/SophonSDK_doc/zh/html/index.html
TPU-MLIR快速入门手册:https://doc.sophgo.com/sdk-docs/v23.05.01/docs_latest_release/docs/tpu-mlir/quick_start/html/index.html
示例模型仓库地址:https://github.com/sophon-ai-algo/examples
TPU-MLIR官方仓库地址:https://github.com/sophgo/tpu-mlir
SOPHON-SAIL开发手册:https://doc.sophgo.com/sdk-docs/v23.05.01/docs_latest_release/docs/sophon-sail/docs/zh/html/
AI编译器作为框架与硬件之间的桥梁,可实现一次代码开发、各种算力芯片复用的目标。近日,算能也对外开源了其自研的 TPU 编译工具— TPU-MLIR(Multi-Level Intermediate Representation)。TPU-MLIR 是一款主打 AI 芯片的 TPU 编译器开源工程。工程提供了完整的工具链,将预先训练好的各类框架下的神经网络,在其中进行转化,最终转化为能在 TPU 中高效运算的 二进制文件bmodel,以实现更高效的推理。本课程以实战为驱动,带领大家直观地了解、实战、掌握算能智能 AI 芯片的 TPU 编译器框架。
目前TPU-MLIR工程已被应用在算能研发的最新一代人工智能芯片BM1684X 上,搭配上芯片本身的高性能ARM内核以及相应的SDK,能够实现深度学习算法的快速部署。课程内容会涵盖 MLIR 基本语法以及编译器中各类优化操作的实现细节,如图优化,int8 量化,算子切分和地址分配等。
TPU-MLIR相对其他编译工具,有以下几个优势
1、简单、便捷
通过阅读开发手册与工程中已包含的样例,用户可以了解模型转化流程与原理,快速上手。并且,TPU-MLIR基于当前主流的编译器工具库MLIR进行设计,用户也可以通过它来学习MLIR的应用。 该工程已经提供了一套完备的工具链,用户可以直接通过现有接口快速地完成模型的转化工作,不用自己适配不同的网络
2、通用
目前TPU-MLIR已经支持TFLite以及onnx格式,这两种格式的模型可以直接转化为TPU可用的bmodel。如果不是这两种格式呢?实际上onnx提供了一套转换工具,可以将现在市面上主流深度学习框架编写的模型转为onnx格式,然后就能继续转为bmodel了
3、精度与效率并存
模型转换的过程中有时会产生精度损失,TPU-MLIR支持INT8对称和非对称量化,在大幅提高性能的同时又结合原始开发企业的Calibration与Tune等技术保证了模型的高精度。不仅如此,TPU- MLIR中还运用了大量图优化和算子切分优化技术,以保证模型的高效运行。
4、实现极致性价比,打造下一代AI编译器
为了支持 GPU 计算,神经网络模型里面的算子需要开发一个GPU版本;为适配 TPU ,每个算子都应该开发一个 TPU 版本。此外,有些场景需要适配同种算力芯片的不同型号的产品,每次都要手动编译,这将是非常耗时的。AI 编译器旨在解决上述问题。TPU- MLIR 的一系列自动优化工具可以节省大量手动优化时间,使在 CPU 上开发的模型能够顺利、免费地移植到 TPU 中,以获得最佳性能和价格比。
5、资料齐全
课程包括中英文视频教学、文档指导、代码脚本等,详尽丰富 丰富的视频资料 详尽的应用指导 清晰的代码脚本 TPU-MLIR站在MLIR巨人的肩膀上打造,现在整个工程的所有代码都已开源,向所有用户免费开放。
代码下载链接:https://github.com/sophgo/tpu-mlir
TPU-MLIR开发参考手册:https://tpumlir.org/docs/developer_manual/01_introduction.html
介绍整体设计思路的论文:https://arxiv.org/abs/2210.15016
视频教程:https://space.bilibili.com/1829795304/channel/collectiondetail?sid=734875
课程目录
序号 | 课程名 | 课程分类 | 课程资料 | ||
视频 | 文档 | 代码 | |||
1.1 | AI编译器基础 | TPU_MLIR基础 | √ | √ | √ |
1.2 | MLIR基础 | TPU_MLIR基础 | √ | √ | √ |
1.3 | MLIR基本结构 | TPU_MLIR基础 | √ | √ | √ |
1.4 | MLIR之op定义 | TPU_MLIR基础 | √ | √ | √ |
1.5 | TPU_MLIR介绍(一) | TPU_MLIR基础 | √ | √ | √ |
1.6 | TPU_MLIR介绍(二) | TPU_MLIR基础 | √ | √ | √ |
1.7 | TPU_MLIR介绍(三) | TPU_MLIR基础 | √ | √ | √ |
1.8 | 量化概述 | TPU_MLIR基础 | √ | √ | √ |
1.9 | 量化推导 | TPU_MLIR基础 | √ | √ | √ |
1.10 | 量化校准 | TPU_MLIR基础 | √ | √ | √ |
1.11 | 量化感知训练(一) | TPU_MLIR基础 | √ | √ | √ |
1.12 | 量化感知训练(二) | TPU_MLIR基础 | √ | √ | √ |
2.1 | Pattern Rewriting | TPU_MLIR实战 | √ | √ | √ |
2.2 | Dialect Conversion | TPU_MLIR实战 | √ | √ | √ |
2.3 | 前端转换 | TPU_MLIR实战 | √ | √ | √ |
2.4 | Lowering in TPU_MLIR | TPU_MLIR实战 | √ | √ | √ |
2.5 | 添加新算子 | TPU_MLIR实战 | √ | √ | √ |
2.6 | TPU_MLIR图优化 | TPU_MLIR实战 | √ | √ | √ |
2.7 | TPU_MLIR常用操作 | TPU_MLIR实战 | √ | √ | √ |
2.8 | TPU原理(一) | TPU_MLIR实战 | √ | √ | √ |
2.9 | TPU原理(二) | TPU_MLIR实战 | √ | √ | √ |
2.10 | 后端算子实现 | TPU_MLIR实战 | √ | √ | √ |
2.11 | TPU层优化 | TPU_MLIR实战 | √ | √ | √ |
2.12 | bmodel生成 | TPU_MLIR实战 | √ | √ | √ |
2.13 | To ONNX format | TPU_MLIR实战 | √ | √ | √ |
2.14 | Add a New Operator | TPU_MLIR实战 | √ | √ | √ |
2.15 | TPU_MLIR模型适配 | TPU_MLIR实战 | √ | √ | √ |
2.16 | Fuse Preprocess | TPU_MLIR实战 | √ | √ | √ |
2.17 | 精度验证 | TPU_MLIR实战 | √ | √ | √ |