深度学习系列55:深度学习加速技术概述

news2024/11/26 0:30:32

总体有两个方向:模型优化 / 框架优化

1. 模型优化

1.1 量化

最常见的量化方法为线性量化,权重从float32量化为int8,将输入数据映射在[-128,127]的范围内。在 nvdia gpu,x86、arm 和 部分 AI 芯片平台上,均支持 8bit 的计算。
在这里插入图片描述
当然还有简单的二值化。对比从 nvdia gpu 到 x86 平台,1bit 计算分别有 5 到128倍的理论性能提升。
此外还有对数量化,一种比较特殊的量化方法。两个同底的幂指数进行相乘,那么等价于其指数相加。目前 nvdia gpu,x86、arm 三大平台上没有实现对数量化的加速库,但是目前已知海思 351X 系列芯片上使用了对数量化。

根据量化的粒度(共享量化参数的范围)可以分为逐层量化、逐组量化和逐通道量化。TensorRT 框架中就使用了逐层量化的方法,每一层采用同一个阈值来进行量化。

权重量化完后,我们还要对激活层进行量化,这时需要进行calibration,通过校准数据集来确定激活层的比例因子和偏差。
此外,pytorch还可以进行训练后的动态量化(torch.quantization.quantize_dynamic)和训练时的量化(torch.quantization.FakeQuantize)。

1.2 剪枝

下图是第一种剪枝方法(移除边),非规则的形状对硬件不友好,只能在专用硬件上加速。
在这里插入图片描述
第二种是移除点(找到零神经元)
在这里插入图片描述
我们可以使用distiller工具来查看模型的稀疏度:

# 显示网络的稀疏度
python3 compress_classifier.py -a=resnet20_cifar ../../../data.cifar10 --summary=sparsity

在这里插入图片描述
在这里插入图片描述

1.3 融合

将一些近邻的层合并成一个层,减少计算量

1.4 知识蒸馏

知识蒸馏是一种与模型无关的压缩方法,它从大型、昂贵的教师模型中获取知识,并将其转移到较小的学生模型中。知识蒸馏模型采用软目标来获得比庞大的教师模型更高的准确性和更少的推理时间。
在这里插入图片描述

2. 压缩工具

2.1 pocketflow

该工具中所包含的压缩方法主要包括3大类:裁剪、权重稀疏和量化。

# 对网络进行裁剪操作
./scripts/run_seven.sh nets/resnet_at_cifar10_run.py \
    --learner channel \
    --cp_prune_option uniform \
    --cp_uniform_preserve_ratio 0.5
# 对网络进行权重稀疏操作
./scripts/run_local.sh nets/resnet_at_cifar10_run.py \
    --learner weight-sparse \
    --ws_prune_ratio_prtl uniform \
    --data_disk hdfs
# 对网络进行量化操作
./scripts/run_local.sh nets/resnet_at_cifar10_run.py \
    --learner uniform \
    --uql_use_buckets \
    --uql_bucket_type channel \
    --data_disk hdfs

2.2 TVM

通过LLCM来支持Intel和ARM CPU等一些设备;通过Opencl来支持ARM的MailGPU;通过CUDA来支持NVIDIA的设备;通过Metal来支持苹果的设备;通过VTA来很好的支持FPGA和ASCI

2.3 openvino/tensorRT

分别是针对intel和nvidia家的硬件,可参考以前的文章。

2.4 手机端加速

MNN/ARMNN/ncnn/TNN等。

2.5 pytorch相关

model-compression以及pytorch自带的压缩工具

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1433564.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vue中keep-alive的作用、原理及应用场景

在进行Vue开发的过程中,我们经常会遇到需要进行组件缓存的场景,这时候Vue提供的keep-alive组件就派上了用场。keep-alive组件是Vue内置的一个抽象组件,它可以将其包裹的组件进行缓存,提高组件的性能,同时也可以节省服务…

docker-学习-3

docker 学习第三天 docker 学习第三天1. 回顾一下1.1. 对比图1.2. docker和虚拟机的区别1.3. 在容器化部署中,为什么有些场景更适合选择Docker而非虚拟机?1.4. 有哪些场景适合选择虚拟机而不是Docker进行部署?1.5. 虚拟机和Docker在性能和资源…

Python 数据分析(PYDA)第三版(二)

原文:wesmckinney.com/book/ 译者:飞龙 协议:CC BY-NC-SA 4.0 四、NumPy 基础知识:数组和向量化计算 原文:wesmckinney.com/book/numpy-basics 译者:飞龙 协议:CC BY-NC-SA 4.0 此开放访问网络版…

Java tomcat 使用spring-task,实现定时任务功能

前言 今天接触到一个需求,需要添加一个定时任务功能,第一反应是启动类EnableScheduling、定时任务方法使用Scheduled实现,导入项目后才发现,这个项目是ssm整合框架的tomcat项目,没有启动类, 于是改变了思路…

protoc结合go完成protocol buffers协议的序列化与反序列化

下载protoc编译器 下载 https://github.com/protocolbuffers/protobuf/releases ps: 根据平台选择需要的编译器,这里选择windows 解压 加入环境变量 安装go专用protoc生成器 https://blog.csdn.net/qq_36940806/article/details/135017748?spm1001.2014.3001.…

知识融合前沿技术:构建多模态、公平高效的大规模知识表示

目录 前言1 无监督对齐:构建智能实体关联2 多视角嵌入:提高数据利用效率3 嵌入表示增强:挑战节点相似性,对抗训练解决4 大规模实体对齐:克服模糊性和异构性结论 前言 在信息时代,知识融合成为推动人工智能…

AI新工具(20240204)pot-desktop - 为用户提供便捷的文字翻译和识别功能;ChatALL - 能够同时向多个AI机器人发送提示

pot-desktop - 为用户提供便捷的文字翻译和识别功能 pot-desktop pot-desktop是一款备受欢迎的跨平台划词翻译和OCR软件,为用户提供便捷的文字翻译和识别功能。 功能点: 划词翻译:用户只需将鼠标光标悬停在需要翻译的文字上,po…

Docker 可视化工具

1、Portainer 概念介绍 Portainer是一款轻量级的应用,它提供了图形化界面,用于方便地管理Docker环境,包括单机环境和集群环境。 Portainer分为开源社区版(CE版)和商用版(BE版/EE版)。 Porta…

Python实现加密

目录 一:哈希加密 二:aes加密 三:rsa加密 Python中,你可以使用多种方法来实现加密。下面我们介绍下常用的加密方法。 一:哈希加密 下面是一个使用Python内置的hashlib库实现SHA256哈希加密的例子: im…

在vscode上传项目到gitee

一、在Gitee上新建一个仓库 Tip:若已经创建过了,直接跳到第二部分看VsCode如何上传代码到Gitee 创建仓库比较简单,下面两张图就是整个过程,这里不在赘述,具体如下: 二、VsCode连接Gitee上创建的仓…

DevExpress ASP.NET Web Forms v23.2最新版本系统环境配置要求

本文档包含有关安装和使用 DevExpress ASP.NET Web Forms控件的系统要求的信息。 点击获取DevExpress v23.2正式版(Q技术交流:909157416) .NET Framework DevExpress ASP.NET Web Forms控件和MVC扩展支持以下.NET Framework 版本。 如果您需要 DevExp…

电脑如何录制屏幕视频?超简单的教程来了!

在当今信息化的时代,电脑已经成为了我们日常生活和工作中不可或缺的工具。除了常规的文字处理、数据分析等功能外,电脑还为我们提供了许多实用的小工具,其中屏幕录制便是其中的一项。本文将介绍电脑如何录制屏幕视频,并推荐两种常…

Python基础知识:Python数据行列处理

我们在应用Python开展机器学习或统计分析时,经常需要对数据行列进行处理,下面介绍几种常用的Python数据行列处理操作。 我们结合数据2.2文件,以示例的方式讲解删除变量列、样本行的操作。输入以下代码并逐行运行: datapd.read_c…

计算机网络-差错控制(奇偶校验码 CRC循环冗余码)

文章目录 差错从何而来从传感器层面提高信道比来减少线路本身的随机噪声的一个例子热噪声和冲击噪声 数据链路层的差错控制检错编码-奇偶校验码检错编码-CRC循环冗余码例子注意 差错从何而来 噪声通常指的是任何未预期的、随机的信号干扰,这些干扰可能源自多种物理…

【iOS ARKit】3D 人体姿态估计

与基于屏幕空间的 2D人体姿态估计不同,3D人体姿态估计是尝试还原人体在三维世界中的形状与姿态,包括深度信息。绝大多数的现有3D人体姿态估计方法依赖2D人体姿态估计,通过获取 2D人体姿态后再构建神经网络算法,实现从 2D 到 3D人体…

上线GPT应用的流程

上线一个应用是一个逐步迭代的过程,不断根据用户反馈和市场需求进行改进和优化。上线一个基于GPT的应用通常需要以下步骤,希望对大家有所帮助。北京木奇移动技术有限公司,专业的软件外包开发公司,欢迎交流合作。 1.明确目标和用途…

神经网络 | 基于 CNN 模型实现土壤湿度预测

Hi,大家好,我是半亩花海。在现代农业和环境监测中,了解土壤湿度的变化对于作物生长和水资源管理至关重要。通过深度学习技术,特别是卷积神经网络,我们可以利用过去的土壤湿度数据来预测未来的湿度趋势。本文将使用 Pad…

音频二维码怎么制作出来的?支持多种格式音频生码的方法

怎么把一个音频的文件做成二维码图片呢?在日常工作和生活中,有很多的场景会需要使用音频类型的文件来展示内容,比如常见的英语听力、课程、听书等类型的内容,现在都可以用二维码展示。而且现在生成音频二维码的方法也很简单&#…

JavaWeb后端——控制反转IOC/依赖注入DI

控制反转:why,目标是要做到控制反转 依赖注入:how,如何实现控制反转,控制反转有很多方法,依赖注入是其中一种方法 控制反转(Inversion of Control, IoC)和依赖注入(Depe…

es6中标签模板

之所以写这篇文章,是因为标签模板是一个很容易让人忽略的知识点 首先我们已经非常熟悉模板字符串的使用方法 const name "诸葛亮" const templateString hello, My name is ${name}标签模板介绍 这里的标签模板其实不是模板,而是函数调用…