随笔分类 -  模型压缩与部署

分为两块内容:模型压缩(包括知识蒸馏、剪枝、量化等)和模型部署(包括神经网络编译器等)
摘要:转载:https://www.cnblogs.com/Matrix_Yao/p/9550967.html 深度学习等计算密集型任务很关注设备的峰值算力,落实到具体指标,就是大家都很关心**T(FL)OPS (Tera (FLoat) OPerations per Second)**。这里,**ope 阅读全文
posted @ 2023-07-29 11:22 牛犁heart 阅读(1626) 评论(0) 推荐(0) 编辑
摘要:###查看CPU相关信息 ![image](https://img2023.cnblogs.com/blog/1059417/202307/1059417-20230720230552535-1377656398.png) 执行结果举例: ![image](https://img2023.cnblo 阅读全文
posted @ 2023-07-27 20:48 牛犁heart 阅读(917) 评论(0) 推荐(0) 编辑
摘要:网络结构定义 import torch import torch.nn as nn import torch.nn.functional as F import torch_pruning as tp from torchvision.datasets import CIFAR10 from tor 阅读全文
posted @ 2022-12-04 21:56 牛犁heart 阅读(1235) 评论(0) 推荐(0) 编辑
摘要:Torch-Pruning 通道剪枝网络实现加速的工作。 Torch pruning是进行结构剪枝的pytorch工具箱,和pytorch官方提供的基于mask的非结构化剪枝不同,工具箱移除整个通道剪枝,自动发现层与层剪枝的依赖关系,可以处理Densenet、ResNet和DeepLab 特性 卷积 阅读全文
posted @ 2022-12-04 18:47 牛犁heart 阅读(2304) 评论(0) 推荐(0) 编辑
摘要:Pytorch中剪枝源码可参考: https://github.com/pytorch/pytorch/blob/master/torch/nn/utils/prune.py 可参考: pytorch中函数接口:https://runebook.dev/zh-CN/docs/pytorch/-ind 阅读全文
posted @ 2022-11-27 22:12 牛犁heart 阅读(599) 评论(0) 推荐(0) 编辑
摘要:深度学习技术依赖于过参数化模型,这是不利于部署的,相反,生物神经网络是使用高效的稀疏连接的。 通过减少模型中的参数数量来压缩模型的技术非常重要,为减少内存、电池和硬件的消耗,而牺牲准确性,实现在设备上部署轻量级模型。 在Pytorch中,主要通过torch.nn.utils.prune来进行剪枝,以 阅读全文
posted @ 2022-11-20 22:40 牛犁heart 阅读(1961) 评论(0) 推荐(0) 编辑
摘要:剪枝分类 从network pruning 的粒度来说,可以分为结构化剪枝(structured pruning) 和非结构化剪枝(Unstructured pruning) 两类 早期的一些方法是基于非结构化的, 它裁剪的粒度为单个神经元。 如果对kernel进行非结构化剪枝,则得到的kernel 阅读全文
posted @ 2022-11-11 00:20 牛犁heart 阅读(1689) 评论(0) 推荐(0) 编辑
摘要:知识蒸馏 还是先来简单回顾下知识蒸馏的基本知识。 知识蒸馏的核心思想就是:通过一个预训练的大的、复杂网络(教师网络)将其所学到的知识迁移到另一个小的、轻量的网络(学生网络)上,实现模型的轻量化。 目标: 以loss为标准,尽量的降低学生网络与教师网络之间的差异,实现学生网络学习教师网络所教授的知识。 阅读全文
posted @ 2022-11-06 23:08 牛犁heart 阅读(3706) 评论(0) 推荐(0) 编辑
摘要:定位蒸馏 定位蒸馏:Localization Distillation,简称LD 论文地址: Localization Distillation for Dense Object Detection 开源代码地址: https://github.com/HikariTJU/LD MMDetectio 阅读全文
posted @ 2022-11-06 00:42 牛犁heart 阅读(717) 评论(0) 推荐(0) 编辑
摘要:这编译的最后一步,也就是生成目标代码,则必须跟特定CPU架构相关。 这就是编译器的后端。不过,后端不只是简单地生成目标代码,它还要完成与机器相关的一些优化工作,确保生成的目标代码的性能最高。 本讲将从机器相关的优化入手,看看编译器如何通过指令选择/寄存器分配/指令排序和基于机器代码的优化等步骤,完成 阅读全文
posted @ 2022-09-25 00:41 牛犁heart 阅读(1143) 评论(0) 推荐(0) 编辑
摘要:常见的代码优化方法 对代码做优化的方法有很多,可按照下面两个维度进行分类: 第一个分类维度,是机器无关的优化与机器相关的优化。 机器无关的优化与硬件特征无关,比如把常数值在编译期计算出来(常数折叠)。而机器相关的优化则需要利用某种硬件特有的特征,比如SIMD指令可以在一条指令里完成多个数据的计算。 阅读全文
posted @ 2022-09-24 17:47 牛犁heart 阅读(1854) 评论(0) 推荐(3) 编辑
摘要:IR,中间代码(Intermediate Representation,有时也称为Intermediate Code,IC),它是编译器中很重要的一种数据结构。编译器在做完前端工作以后,首先就生成IR,并在此基础上执行各种优化算法,最后再生成目标代码。 IR的用途和层次 设计IR的目的, 是要满足编 阅读全文
posted @ 2022-09-24 14:49 牛犁heart 阅读(5399) 评论(0) 推荐(1) 编辑
摘要:在语义分析之后,编译过程就开始进入了中后端。 经过前端阶段的处理分析,编译器已经充分理解了源代码的含义,准备好把前端处理的结果(带有标注信息的 AST、符号表)翻译成目标代码了。 如果想做好翻译工作,编译器必须理解目标代码。而要理解目标代码,它就必须要理解目标代码是如何被执行的。通常情况下,程序有两 阅读全文
posted @ 2022-09-21 23:50 牛犁heart 阅读(784) 评论(0) 推荐(0) 编辑
摘要:python的运行时机制的核心 -- python对象机制的设计 理解字节码的执行过程 用 GDB 跟踪执行一个简单的示例程序,它只有一行:“a=1”。 对应的字节码如下。其中,前两行指令实现了"a = 1"的功能(后两行是根据Python的规定,在执行完一个模块之后,缺省返回一个None值) PS 阅读全文
posted @ 2022-09-18 15:42 牛犁heart 阅读(815) 评论(0) 推荐(0) 编辑
摘要:首先了解下从AST到生成字节码的整个过程: 编译过程 Python编译器把词法分析和语法分析叫做 "解析(Parse)", 并且放在Parser目录下。 从AST到生成 字节码的过程,才叫做 "编译(Compile)" Python编译工作的主干代码是在**Python/compile.c **, 阅读全文
posted @ 2022-09-16 00:09 牛犁heart 阅读(1384) 评论(0) 推荐(0) 编辑
摘要:Python编译器 GDB跟踪python编译器的执行过程,在tokenizer.c的tok_get()函数中打一个断点,通过GDB查看python的运行,使用bt命令打印输出,结果如下图所示 整理后可得到: 该过程就是运行python并执行到词法分析环节的一个执行路径: 1.首先是 python. 阅读全文
posted @ 2022-09-15 21:41 牛犁heart 阅读(598) 评论(0) 推荐(0) 编辑
摘要:编译原理概述 编译,就是一个把源代码变成目标代码的过程。 如果源代码编译后直接在操作系统上运行,那目标代码就是汇编代码,再通过汇编和链接的过程形成可执行文件,然后通过加载器加载到操作系统里执行 如果编译后在解释器中执行,那目标代码就可以不是汇编代码,而是一种解释器可以理解的中间形式的代码即可。 编译 阅读全文
posted @ 2022-09-02 23:30 牛犁heart 阅读(2209) 评论(0) 推荐(2) 编辑
摘要:元张量函数 上一节:机器学习编译 -- 什么是机器学习编译 和官方文档:概述介绍机器学习编译的过程可以被看作张量函数之间的变换。一个典型的机器学习的执行包含许多步将输入张量之间转化为最终预测的计算步骤,其中的每一步都被称为元张量函数(primitive tensor function) 元张量函数: 阅读全文
posted @ 2022-08-09 21:52 牛犁heart 阅读(197) 评论(0) 推荐(0) 编辑
摘要:在阅读TVM源码时,发现了*.pyi文件,里面的函数没有具体的实现,都诸如如下的形式,感到很疑惑。 @overload def getattr(__o: object, __name: str, __default: _T) -> Any | _T: ... def globals() -> dic 阅读全文
posted @ 2022-07-28 00:25 牛犁heart 阅读(3648) 评论(0) 推荐(1) 编辑
摘要:在阅读tvm 前端代码时发现了诸如from ... import nd as _nd/from .. import analysis之类的代码,因长时间未接触python,感到格外好奇 参考:PEP 328 – Imports: Multi-Line and Absolute/Relative 官方 阅读全文
posted @ 2022-07-27 00:41 牛犁heart 阅读(437) 评论(0) 推荐(0) 编辑