Sticky Posts

2.6kwords2 mins.

# 暮冬 Z 羡慕 的博客 文章汇总 # 卷积加速算法 【Im2Col】卷积加速算法【1】 NCHW 【Im2Col】卷积加速算法【2】NHWC 【im2col】昇腾卷积加速算法 【Winograd】卷积加速算法原理及实现 【gemm】Gemm 计算加速 【gemm】内存对齐 [【conv 加速】NVDLA 卷积加速算法] # AI 推理引擎 【推理引擎】常见推理引擎 【推理引擎】NCNN 和 Tengine 量化推理逻辑对比 【量化】连续卷积层首尾量化的可行性 [【推理引擎】Tengine 框架结构介绍] # AI 编译器 【TVM】

Post List

2.3kwords2 mins.

# 前言 本文讲解神经网络推理过程中的内存分配相关内容。 作为初学者,错误在所难免,还望不吝赐教。 # Tensor 类型 不同的 tensor 有着不同的生命周期,神经网络推理过程中主要有三种 Tensor 类型: 1. 输入输出 tensor 输出 tensor 是下一节点的输入 tensor,它们一体两面,这种类型的 tensor 生命周期起于 “生产节点”,终于最后一个 “消费节点”。 2. 权重 tensor 权重 tensor 和算子绑定在一起,生命周期随着算子开始,也随算子结束。但也可能存在共享权重的情况,例如 tiling 操作产生的并行算子共享 Weight,算能 TPU
1kwords1 mins.

# 进度 小说文字数量已经超过 8 万,如果第一部的目标是 40 万字的话,那么现在已经完成了 1/5,可喜可贺。 当世界观一点点建立完成之后,书里的人物就活了,他该如何行动,产生怎样的情况与冲突,都是自然而然的。这时候写故事发展,不是写他应该怎么去做,而是在那种情景中他会怎么去做。这么想想,作者仿佛变成一个观察这个微缩世界的旁观者。 # 需要改进 1. 反派描写 发现描写反派有些困难,毕竟我们平时接触不到,纯凭想象。如何把反派写活确实不容易。 现实中的人都会相对中庸一点,而书中的人就要极端一点。 在达到这个水平之后,还可以给反派一些其他的特点,比如杀人如麻中也对某些事情怀有温情,不
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 的执行函