3kwords3 mins.

# 前言 本篇讲解笔者实现 tiling 算法的一些经验。 前述文章 《如何进行 layer-group》讲解了 layer group 的内容。《Tiling 操作能优化哪些时间》提到 Tiling 的概念和作用。感兴趣的话可以阅读。 本篇文章参考过 《超强干货!地平线编译器大牛的编译优化实践总结》,《Arm 周易编译器工程》,《算能 TPU layer group 讲解》,《算能 TPU 视频讲解》 等文章和工程,欢迎大家参考。 作为初学者,错误在所难免,还望不吝赐教。 # 回顾 如图所示,AI 编译优化的基本流程是 1. 图优化 (算子融合,常量折叠等) 2. 拆分 (layer gr
2.3kwords2 mins.

# 前言 本篇介绍 AI 编译领域 layer-group 算法。 本篇文章参考过 《超强干货!地平线编译器大牛的编译优化实践总结》,《Arm 周易编译器工程》,《算能 TPU layer group 讲解》,《算能 TPU 视频讲解》 等文章和工程,欢迎大家参考。 作为初学者,错误在所难免,还望不吝赐教。 # Layer group 如图所示,AI 编译优化的基本流程是 1. 图优化 (算子融合,常量折叠等) 2. 拆分 (layer group 和 tiling) 3. 并行和调度。最后得到当前编译的时间消耗。 在 AI 编译领域,LayerGroup 指的是将神经网络中的多个层(lay
9.4kwords9 mins.

# 前言 本篇文章探讨一下连续卷积层首尾量化的可行性。连续卷积指的是神经网络模型中接连出现若干个卷积 layer,中间没有 pooling、FC 等其他 layer;首尾量化指的是只在首端量化,仅在尾端反量化,中间不添加量化反量化操作。探索连续卷积层首尾量化的可行性,目的是试图降低每一层都进行繁杂的量化反量化运算的时间消耗。在上一篇文章【推理引擎】NCNN 和 Tengine 量化推理逻辑对比 中提到了这个想法,本篇文章将通过公式演算和代码仿真的方式探索其可行性。 作为初学者,错误在所难免,还望不吝赐教。 # 连续卷积层首尾量化 借用上一篇文章【推理引擎】NCNN 和 Tengine 量化推理
8.5kwords8 mins.

# 前言 本篇文章梳理内存对齐的相关概念和知识,并借上一篇文章《【Gemm】Gemm 计算加速》 来简单探讨一下内存排布对计算加速的重要作用。 本篇文章参考和引用了 《nihui 大佬的 ncnn 工程》,《ncnn 初探二:图解 ncnn::Mat 的内存排布》,关于 mat 中 data 的内存排列问题,《Linux 内核:内存管理 —— 内存对齐》等,并询问过大语言模型通义千问、文心一言等。如有不清楚的地方可以点击链接查阅。 作为初学者,错误在所难免,还望不吝赐教。 # 处理器的对齐访问 对齐访问的定义:对齐访问是指处理器在访问内存时,要求访问的起始地址是某个特定数值(通常是 2 的幂)
23kwords21 mins.

# 前言 本篇文章简单介绍矩阵乘的加速方法,以学习算子加速需要注意的方面。想要学习更多内容可以参考《OpenBLAS gemm 从零入门》,《BLISlab: A Sandbox for Optimizing GEMM》,道阻且长_再探矩阵乘法优化,《How To Optimize GEMM》等项目或文章。 作为初学者,错误在所难免,还望不吝赐教。 # 1. 基准算法 矩阵乘运算的基准算法,未经过任何优化。矩阵以行主序进行排布, 针对 X86 平台。矩阵 C= A * B,A 矩阵为 (M,K), B 矩阵为 (K,N)。 #include <stdio.h>#defi
14kwords13 mins.

# 前言 本系列文章将从代码和流程图入手,详细介绍 TVM AI 编译器的编译流程。本文章为第五篇,对应的 TVM 版本为当前最新版本 1.7。 网络上有不少 TVM 工程的教程资源,如果本博客也是其他教程的简单重复的话,则网络的角落里又多了一份纯粹的空间占用者。所以我在想,本文章有什么特点才值得一看呢?我觉得有两个优点: 1、本文从代码出发,不会泛泛而谈,能够从细节了解 TVM;2、自认为结构流程图画的不错,能够从整体上把握 TVM 的脉络。所以,也许值得一看呢。 本篇文章介绍 TVM FuseOps 算子融合 Pass。文章 《【TVM】通过代码学习编译流程【4】BuildRelay》 已
17kwords15 mins.

# 前言 本系列文章将从代码和流程图入手,详细介绍 TVM AI 编译器的编译流程。本文章为第六篇,对应的 TVM 版本为当前最新版本 1.7。 网络上有不少 TVM 工程的教程资源,如果本博客也是其他教程的简单重复的话,则网络的角落里又多了一份纯粹的空间占用者。所以我在想,本文章有什么特点才值得一看呢?我觉得有两个优点: 1、本文从代码出发,不会泛泛而谈,能够从细节了解 TVM;2、自认为结构流程图画的不错,能够从整体上把握 TVM 的脉络。所以,也许值得一看呢。 本篇文章介绍 TVM CodeGen 函数。文章 《【TVM】通过代码学习编译流程【4】BuildRelay》 已经介绍了 Bu
9.2kwords8 mins.

# 前言 文章 《【TVM】通过代码学习编译流程》系列 主要介绍 TVM 在模型编译过程的流程,有时候感觉缺少了对类及其属性和方法的介绍。所以决定在系列文章的中间插入一些 “类的结构及其属性方法” 的介绍。 本篇文章主要介绍 Pass 及其相关类。 作为初学者,错误在所难免,还望不吝赐教。 # Pass 可以再回顾一下在《【TVM】通过代码学习编译流程【4】》中讲到的本体、桥梁、指针的关系。 先看一看 Pass 的基类, 位于 include/tvm/ir/transform.h 。 Pass 本体 PassNode 。内容很少,主要就是 Pass 的执行函
16kwords15 mins.

# 前言 本系列文章将从代码和流程图入手,详细介绍 TVM AI 编译器的编译流程。本文章为第四篇,对应的 TVM 版本为当前最新版本 1.7。 网络上有不少 TVM 工程的教程资源,如果本博客也是其他教程的简单重复的话,则网络的角落里又多了一份纯粹的空间占用者。所以我在想,本文章有什么特点才值得一看呢?我觉得有两个优点: 1、本文从代码出发,不会泛泛而谈,能够从细节了解 TVM;2、自认为结构流程图画的不错,能够从整体上把握 TVM 的脉络。所以,也许值得一看呢。 本篇文章介绍 TVM BuildRelay 函数。文章 《【TVM】通过代码学习编译流程【3】模型编译》 已经介绍了 Relay
3.3kwords3 mins.

# 前言 本篇讲解 Tiling 操作为什么能够优化神经网络推理。 也可以参考 《Ascend C 算子优化实用技巧 04——Tiling 优化》 作为初学者,错误在所难免,还望不吝赐教。 # 什么是 tiling 无法完整的容纳算子的输入与输出,需要每次搬运一部分输入进行计算然后搬出,再搬运下一部分输入进行计算,直到得到完整的最终结果,这个数据切分、分块计算的过程称之为 Tiling,切分数据的算法称为 Tiling 算法或者 Tiling 策略。 # tile 算子和 tiling 的区别 我们先问一问语言大模型两者的区别: # 神经网络推理中的 Tile 算子 在神经网络中,会发现 ti