Sticky Posts

3kwords3 mins.

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

Post List

5.7kwords5 mins.

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

# 前言 本篇是使用 llvm 编译自定义语言的第三篇。第一篇【编译器】使用 llvm 编译自定义语言【1】构建 AST 文章自顶向下介绍了抽象语法树 AST 的构建过程,第二篇【编译器】使用 llvm 编译自定义语言【2】转 llvm IR 文章介绍将抽象语法树 AST 转化为 llvm IR 的过程。本篇将简单介绍,如何将前述得到的 llvm IR 编译成 Object 。所使用代码例子来自 LLVM 官方教程 My First Language Frontend with LLVM Tutorial。 本篇介绍无法代替官方教程,感兴趣请参考 My First Language Front
7.1kwords6 mins.

# 前言 本篇是使用 llvm 编译自定义语言的第二篇。前一篇【编译器】使用 llvm 编译自定义语言【1】文章自顶向下介绍了抽象语法树 AST 的构建过程,本篇接续上一篇,介绍将抽象语法树 AST 转化为 llvm IR 的过程。所使用代码例子来自 LLVM 官方教程 My First Language Frontend with LLVM Tutorial。 代码请于 My First Language Frontend with LLVM Tutorial 下载。本篇介绍无法代替官方教程,感兴趣请参考 My First Language Frontend with LLVM Tutori
25kwords22 mins.

# 前言 本篇介绍如何使用 LLVM 编译自定义语言。使用的是 LLVM 官方例子 My First Language Frontend with LLVM Tutorial。官方例子采用自底向上的方式详细讲述了自定义万花筒语言通过 llvm 编译的过程,但是自底向上较难理解,过程较长。本篇将自上而下地、简要地介绍如何将自定义语言转换为 llvm IR,实现编译的。 尽管官方用例非常详细,笔者在阅读的时候仍然感到内容多,较 “散”,难以把握。每当这时候我会选择从上而下,整理归类,最后发现知识就具象化了。本篇介绍无法代替官方教程,感兴趣请参考 My First Language Frontend
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 的幂)