Sticky Posts

3.5kwords3 mins.

# 暮冬 Z 羡慕 的博客 文章汇总 # 卷积加速算法 【Im2Col】卷积加速算法【1】 NCHW 【Im2Col】卷积加速算法【2】NHWC 【im2col】AScend conv accelerate 【Winograd】卷积加速算法原理及实现 【gemm】Gemm 计算加速 【gemm】内存对齐 【conv 加速】NVDLA 卷积加速算法 # AI 推理引擎 【推理引擎】常见推理引擎 【推理引擎】NCNN 和 Tengine 量化推理逻辑对比 【量化】连续卷积层首尾量化的可行性 【NCNN】学习 ncnn 模型转换 【Tengine

Post List

4.8kwords4 mins.

# 前言 本篇文章总结【张量生命周期优化】算法。 作为初学者,错误在所难免,还望不吝赐教。 # 介绍 AI 编译器设计中用于神经网络模型推理的内存管理模块, 通常被称为内存分配规划 或 张量生命周期优化。 为了减少内存占用,提高内存利用率,对 Tensor 的内存分配和生命周期的管理必不可少。 内存分配就像是个拼图游戏,在二维坐标中,横轴是时间,纵轴是内容空间,然后将神经网络模型推理过程中需要用到的内存块, 拼到这个二维坐标中。 神经网络模型推理主要涉及三部分 Tensor 内存占用:输入输出 tensor、权重 tensor、临时中间 tensor。将这些 tensor 拼接到如下的坐标轴中
5.3kwords5 mins.

本文为 SystemC 实现寄存器来同步的建模方法。 # 应用场景 仿真时可能有类似这样的需求: 将一系列的指令发送到三个模块 A、B、C,三个模块相互独立地执行这些指令。 为了进行同步控制,这些指令中含有 sync 类型的指令,并借助寄存器来实现模块之间的同步。 比如我创建 20 个寄存器,A 模块的 Sync 指令是往寄存器 0 号位写入 1,B 收到的 sync 指令是读寄存器 0 号位,读到 1 才能执行后续指令;然后 B 往寄存器 1 号位写入 10,C 在寄存器 1 号位读到 10,才能够执行后续指令。以此实现执行同步。 # 初步尝试 依据上述需求,我非常直接地创建了 sc_si
819words1 mins.

# 前言 本篇文章简单总结脉动阵列加速矩阵运算的类型。 网上相关资料较多,可以自行搜索。 作为初学者,错误在所难免,还望不吝赐教。 # 脉动阵列类型 使用脉动阵列实现卷积的数据流类型。 使用脉动阵列实现卷积时,往往先将卷积转化为矩阵预算,然后再补零和分块矩阵乘。 脉动阵列设计中有 3 种典型的数据流: 输出固定 (Output Stationary, OS) 数据流、 权重固定 (Weight Stationary, WS) 数据流和输入固定 ( Input Stationary, IS) 数据流。 以下面这个 5*5 的矩阵乘为例:假设 M 是输入、N 是权重,Z 是结果。 以下是 输出固
8.2kwords7 mins.

# 前置信息 (1)本文讲解使用的例子 以如下的卷积为例,进行昇腾 Im2Col 卷积过程: Input 输入维度为 NHWC :【2,25,25,17】 外圈蓝色代表 pad Kernal 维度为 CCHkWk :【34,17,3,3】 操作为 3*3 卷积 pad=1, Group=1, Stride=1, 2D 卷积 得到输出的维度 为 NHWC : 【22,25,25,18】 从图上可以轻易看出相关信息。 现在想起来,光是遇到你这个家伙,就感觉自己赚到了。 ------ 大家好啊 我是 暮冬 Z 羡慕 (2)矩阵乘运算单元 昇腾
773words1 mins.

# 进度 小说字数已经超过 16 万! 不知不觉已经超过预期中一半内容了。 我感觉故事情节大概能够写到 22 万字,之后回头修改、增补情节、增加描述、查缺补漏,总计内容能够达到 26 万。 写小说之前,只写过字数要求 800 到 1000 的作文,突然写一部长篇小说,也是个不小的挑战。 我基本不看小说,可能有几个原因: 1. 小说信息密度较低,很难短时间全部看完,现在又缺乏那种连续几天空闲可以看书的时间(相比之下视频密度更高,节奏更快,更不用说 “一口气看完” 之类的视频) 2. 不知道哪些是优秀小说,小时候只看点名著,而小说质量参差不齐,不愿意花时间去辨别 3. 耳濡目染中听到,火的小说往
12kwords11 mins.

# 前言 本篇介绍外部编译器:C 语言编译器 ccompiler 是什么。 一些拓展链接。如果想多了解一些编译相关的内容,提高对 relay IR 的理解,可以学习 《【编译器】使用 llvm 编译自定义语言【1】构建 AST》,《【TVM】通过代码学习编译流程【2】模型转换》,《【编译器】使用 llvm 编译自定义语言【3】编译 object》,《My First Language Frontend with LLVM Tutorial》 等。想了解更多 TVM,可以阅读《深度学习编译器 TVM 代码串讲》。 作为初学者,错误在所难免,还望不吝赐教。 # 例子 如何编译 TVM,可以参考文章
539words1 mins.

# 进度 小说字数已经超过 12 万。 预计第一部写到 30 万,但是第一部规划的内容,仅主线内容大概率没法写这么多字。不过不要紧,写完主线内容,我会回来补充一些描写和细节,丰富整个故事。 随着故事情节的推进,当前世界观体系基本完善。第一部中的主线也清晰明了。需要考虑的是如何将主线中的节点一步步有节奏地展示出来,这些东西是需要在实际写到那一步的时候才确定的。 小说的规划挺有意思。 我的野心很大,一口气规划了四部。 第一部制定好了几乎 100% 的节点。后续几部的安排大幅下降。第二部设计了 50% 的主线节点,第三部可能就只有 10% 的主线节点,到了第四部,我只规划了写哪些方面,没有主线,甚至
3.7kwords3 mins.

# 前言 本篇通流程脑图和代码介绍 Tengine 推理引擎的推理流程。本篇是第二篇。第一篇地址。Tengine 工程地址。 作为初学者,错误在所难免,还望不吝赐教。 # 介绍 Tengine 由 OPEN AI LAB 主导开发,该项目实现了深度学习神经网络模型在嵌入式设备上的快速、高效部署需求。为实现在众多 AIoT 应用中的跨平台部署,该项目使用 C 语言进行核心模块开发,针对嵌入式设备资源有限的特点进行了深度框架裁剪。同时采用了完全分离的前后端设计,有利于 CPU、GPU、NPU 等异构计算单元的快速移植和部署,降低评估、迁移成本。 # 总流程图 总流程图: init_tengin
4.9kwords4 mins.

# 前言 本篇通过流程脑图和代码介绍 Tengine 推理引擎的推理流程。本篇是第一部分。Tengine 工程地址。 作为初学者,错误在所难免,还望不吝赐教。 # 介绍 Tengine 由 OPEN AI LAB 主导开发,该项目实现了深度学习神经网络模型在嵌入式设备上的快速、高效部署需求。为实现在众多 AIoT 应用中的跨平台部署,该项目使用 C 语言进行核心模块开发,针对嵌入式设备资源有限的特点进行了深度框架裁剪。同时采用了完全分离的前后端设计,有利于 CPU、GPU、NPU 等异构计算单元的快速移植和部署,降低评估、迁移成本。 # 推理流程 不了解 AI 推理引擎的人,可能难以理解推理
5.7kwords5 mins.

# 前言 本篇通过代码介绍 NCNN 的模型转换过程。模型转换过程逻辑简单,所以本篇文章只对关键节点进行介绍。NCNN 工程地址。 作为初学者,错误在所难免,还望不吝赐教。 # 介绍 NCNN 是由 腾讯优图实验室 开发的 开源神经网络推理框架,专注于为 移动端和嵌入式设备 提供高效、轻量的深度学习模型部署解决方案。自 2017 年开源(基于 BSD 3-Clause 协议)以来,因其高性能、低功耗和跨平台特性,成为移动端 AI 推理的主流框架之一。 # 使用 ncnn 编译部署方法,网络上很多,也可以参考工程中的 :docs/how-to-build/how-to-bui