Sticky Posts

3.3kwords3 mins.

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

Post List

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
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. 反派描写 发现描写反派有些困难,毕竟我们平时接触不到,纯凭想象。如何把反派写活确实不容易。 现实中的人都会相对中庸一点,而书中的人就要极端一点。 在达到这个水平之后,还可以给反派一些其他的特点,比如杀人如麻中也对某些事情怀有温情,不