Vitis AI - 量化流程详解

目录

1. 简介

2. 具体流程

2.1 校准激活

2.2 量化感知训练

2.3 量化校准配置

2.4 quantization 函数

3. 总结


1. 简介

想象一下,你有一个非常聪明的机器人朋友,它可以帮你做很多事情,比如预测天气。但是,这个机器人的大脑(我们可以把它想象成一个神经网络模型)需要很多能量和空间来思考(也就是进行计算和存储数据)。现在,如果我们想让这个机器人更小巧,更省电,还能快速做出预测,我们就需要采用一些特殂的技巧。

这时,Vitis AI 量化器就像一个魔法工具,它可以帮助机器人的大脑变得更高效。原来,机器人的大脑用一种非常详细(32位浮点)的方式来记住信息,这种方式虽然精确,但是需要很多空间和能量。Vitis AI 量化器通过一种叫做“量化”的魔法,把这些详细的信息转换成更简单(8位整数)的形式。这样做虽然会让信息变得不那么精确,但是我们可以通过一些技巧,让机器人的预测能力几乎不受影响。

这个魔法包括几个步骤:

  • 自定义操作检查:先检查一下机器人的大脑里是否有些特殊的思考方式是我们需要特别注意的。
  • 量化:用魔法把复杂的信息变成简单的形式。
  • 校准:调整一下这个简化后的大脑,确保它还能准确地做出预测。
  • 微调:进一步调整和优化,让机器人的大脑运行得更顺畅。
  • 模型转换:最后,把这个优化后的大脑转换成一种特殊的格式,这样它就可以更容易地被部署到不同的地方,比如小巧的设备上。

通过这个过程,机器人的大脑变得更小,更省电,而且还能快速做出准确的预测。这样,我们就可以把这个聪明的机器人带到更多的地方去,让它帮助更多的人。

2. 具体流程

2.1 校准激活

当我们谈论“校准激活”这个过程时,我们实际上在讨论的是一个将神经网络模型调整为更高效版本的关键步骤,这一步骤是在所谓的后训练量化过程中进行的。让我们一步一步地详细解释这个过程:

  • 选择数据样本

首先,我们需要从原始的训练数据中挑选出一个子集。这个子集不需要很大,通常包含100到1000个样本,而且不需要样本的标签(即我们不需要知道这些数据的正确答案是什么)。这个子集的目的是帮助我们理解模型在处理不同数据时的行为模式。

  • 前向传播

接下来,我们将这个数据子集通过神经网络进行前向传播。前向传播简单来说,就是让数据通过网络的每一层,从输入层开始,一直到输出层。在这个过程中,网络的每一层都会对数据进行一些计算和转换,这些转换是由该层的权重(即该层学习到的参数)和激活函数(一种特定的数学函数,用于决定神经元是否应该被激活)控制的。

  • 分析激活分布

当数据通过网络前向传播时,我们会分析网络中每一层的“激活分布”。激活分布基本上是指,在数据通过网络层时,神经元输出值的分布情况。这是非常重要的信息,因为它可以帮助我们了解数据是如何在网络中流动的,以及每一层是如何对数据进行处理的。

  • 量化权重和激活

一旦我们有了关于激活分布的信息,我们就可以开始将权重和激活值从32位浮点数转换为8位整数值。这个过程称为量化。通过量化,我们可以显著减小模型的大小和计算需求,同时尽量保持模型的预测准确性不变。

2.2 量化感知训练

QAT(Quantization-Aware Training,量化感知训练)是一种特殊的神经网络训练方法,它在训练过程中就考虑到了模型最终会被量化(即权重和激活值会被转换成较低精度格式,如8位整数)的事实。通过这种方式,QAT旨在训练出一个在量化后仍能保持高性能的模型。

QAT的工作原理

  1. 在传统的训练过程中,模型通常在浮点数(如32位浮点数)环境下进行训练和优化。然而,当模型被量化(为了部署在资源受限的设备上)时,模型的性能可能会因为精度损失而下降。为了缓解这个问题,QAT采用了一种在训练过程中就模拟量化效果的方法。
  2. 模拟量化:在训练过程中,QAT通过在前向传播和反向传播时模拟权重和激活值的量化效果,使模型“意识到”其将在低精度环境中运行。这意味着模型的训练不仅要考虑如何最小化误差,还要学会在量化带来的限制条件下保持性能。
  3. 微调和优化:通过这种训练方式,模型可以在量化的约束下学习到更鲁棒的特征表示。此外,训练过程中还可以对量化操作进行微调和优化,比如调整量化参数(比如量化的比例因子),以进一步减小量化带来的误差。
  4. 减少性能损失:最终,通过QAT训练的模型在被量化到低精度格式后,其性能损失会比传统训练后直接量化的模型小很多。这意味着可以在保持较高预测精度的同时,享受量化带来的好处(如模型尺寸更小,推理速度更快,功耗更低)。

QAT的优势

  1. 高效的模型部署:通过QAT,可以更有效地将深度学习模型部署到资源受限的硬件上,如移动设备、嵌入式系统等。
  2. 性能和精度的平衡:QAT提供了一种有效的方法来平衡模型的性能和精度,使得在量化后的模型仍能保持接近其原始浮点数模型的预测精度。
  3. 加速推理过程:由于量化后的模型有更小的模型尺寸和更快的推理速度,QAT有助于加速模型的推理过程,使其更适合实时应用场景。

2.3 量化校准配置

量化校准配置文件的目录在 config_file = "./configs/mix_precision_config.json"

配置名解释选项
convert_relu6_to_relu是否将ReLU6转换为ReLUtrue、false
include_cle是否使用跨层均衡(cross layer equalization)true、false
include_bias_corr是否使用偏差校正true、false
keep_first_last_layer_accuracy是否跳过对第一层和最后一层进行量化(未启用)FALSE
keep_add_layer_accuracy是否跳过对"add"层进行量化(未启用)FALSE
target_device部署量化模型的设备DPU、CPU、GPU
quantizable_data_type模型中要进行量化的张量类型 
datatype用于量化的数据类型int、bfloat16、float16、float32
   
bit_width用于量化的比特宽度 
method用于校准量化的方法maxmin、percentile、entropy、mse、diffs
round_mode量化过程中的舍入方法half_even、half_up、half_down、std_round
symmetry是否使用对称量化true、false
per_channel是否使用通道级别的量化true、false
signed是否使用有符号量化true、false
narrow_range是否对有符号量化使用对称整数范围true、false
scale_type量化过程中使用的尺度类型float、poweroftwo
calib_statistic_method如果使用多批次数据获得不同的尺度,用于选择一个最优尺度的方法modal、max、mean、median

2.4 quantization 函数

使用PyTorch框架和Xilinx Vitis AI量化工具(通过pytorch_nndct模块)的一个示例:

# 创建量化器对象,并获取量化模型
from pytorch_nndct.apis import torch_quantizer
quantizer = torch_quantizer(quant_mode, model, (dummy_input), device=device, quant_config_file=config_file, target=target)
quant_model = quantizer.quant_modelloss_fn = torch.nn.CrossEntropyLoss().to(device)
val_loader, _ = load_data(…)if finetune == True:ft_loader, _ = load_data(…)if quant_mode == 'calib':quantizer.fast_finetune(evaluate, (quant_model, ft_loader, loss_fn))elif quant_mode == 'test':quantizer.load_ft_param()acc1_gen, acc5_gen, loss_gen = evaluate(quant_model, val_loader, loss_fn)if quant_mode == 'calib':quantizer.export_quant_config()
if deploy:quantizer.export_torch_script()quantizer.export_onnx_model()quantizer.export_xmodel()

 代码的主要功能和步骤包括:

  1. 创建量化器对象:使用torch_quantizer函数创建一个量化器对象,这个对象用于管理模型的量化过程。这里需要指定量化模式(quant_mode),可以是calib(校函量化模式)或test(测试量化模型性能模式),模型本身,一个虚拟输入(dummy_input)用于模型推理,以及其他配置如设备(device),量化配置文件(quant_config_file)和目标平台(target)。
  2. 获取量化模型:通过量化器对象的quant_model属性获取量化后的模型。这个模型将用于后续的校准、微调和评估。
  3. 加载数据:加载验证数据集(val_loader),如果需要微调(finetune为True),也会加载微调数据集(ft_loader)。
  4. 微调和校准:如果设置了微调,根据量化模式执行相应的操作。在calib模式下,使用fast_finetune方法进行快速微调,以优化模型的量化参数;在test模式下,使用load_ft_param方法加载已经微调过的参数。
  5. 评估量化模型性能:使用evaluate函数评估量化模型在验证数据集上的性能,包括准确率(acc1_gen和acc5_gen)和损失(loss_gen)。
  6. 导出量化配置和模型:如果是calib模式,使用export_quant_config方法导出量化配置。此外,如果设置了部署(deploy为True),则会导出用于部署的模型,包括Torch Script(export_torch_script)、ONNX模型(export_onnx_model)和Xilinx特定的xmodel(export_xmodel)。

3. 总结

在当今技术快速发展的时代,我们追求的不仅是智能设备的高性能,同时也强调其能效和便携性。Vitis AI量化器便是在这样的背景下应运而生的一个工具,它通过将神经网络模型的数据精度从32位浮点数降低到8位整数,极大地缩减了模型的体积和计算需求,而通过精心设计的校准和微调过程,又能确保模型的预测准确性基本不受影响。这一过程不仅包括了校准激活、量化感知训练等关键步骤,还提供了详细的量化校准配置和实用的量化函数,以适应不同的部署需求。通过这种方式,Vitis AI量化器使得深度学习模型能够更加轻松地被部署到资源受限的设备上,无论是在移动设备、嵌入式系统还是其他平台,都能够实现快速、高效的智能计算,为用户带来更加丰富和流畅的体验。

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

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

相关文章

01 数据采集层 流量分发第一步规范采集海量数据

《易经》:“初九:潜龙勿用”。潜龙的意思是隐藏,阳气潜藏,阳爻位于最下方称为“初九”,龙潜于渊,是学而未成的阶段,此时需要打好基础。 而模块一我们就是讲解推荐系统有关的概念、基础数据体系…

基于SpringBoot+Vue商户点评管理与数据分析系统设计和实现(源码+LW+调试文档+讲解等)

💗博主介绍:✌全网粉丝10W,CSDN作者、博客专家、全栈领域优质创作者,博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌💗 Java精品实战案例《1000套》 2025-2026年最值得选择的Java毕业设计选题大全&#xff…

使用 Vanna 生成准确的 SQL 查询:工作原理和性能分析

Vanna工作原理 从本质上讲,Vanna 是一个 Python 包,它使用检索增强功能来帮助您使用 LLM 为数据库生成准确的 SQL 查询。 Vanna 的工作分为两个简单的步骤 - 在您的数据上训练 RAG“模型”,然后提出问题,这些问题将返回可设置为在您的数据库上自动运行的 SQL 查询。 vn.t…

【后端面试题】【中间件】【NoSQL】MongoDB提高可用性的方案(主从结构、仲裁节点、分片、写入语义)

主从结构 MongoDB的高可用和别的中间件的高可用方案基本类似。比如在MySQL里,接触了分库分表和主从同步;在Redis里,Redis也有主从结构;在Kafka里,分区也是有主从结构的。 所以先介绍启用了主从同步 我们的系统有一个关…

你想活出怎样的人生?

hi~好久不见,距离上次发文隔了有段时间了,这段时间,我是裸辞去感受了一下前端市场的水深火热,那么这次咱们不聊技术,就说一说最近这段时间的经历和一些感触吧。 先说一下自己的个人情况,目前做前端四年&am…

深圳技术大学oj C : 生成r子集

Description 输出给定序列按字典序的 � 组合,按照所有 � 个元素出现与否的 01 标记串 ����−1,...,�1 的字典序输出. 此处01串的字典序指:先输入的数字对应低位&#x…

移动智能终端数据安全管理方案

随着信息技术的飞速发展,移动设备已成为企业日常运营不可或缺的工具。特别是随着智能手机和平板电脑等移动设备的普及,这些设备存储了大量的个人和敏感数据,如银行信息、电子邮件等。员工通过智能手机和平板电脑访问企业资源,提高…

【机器学习】Datawhale-AI夏令营分子性质AI预测挑战赛

参赛链接:零基础入门 Ai 数据挖掘竞赛-速通 Baseline - 飞桨AI Studio星河社区 一、赛事背景 在当今科技日新月异的时代,人工智能(AI)技术正以前所未有的深度和广度渗透到科研领域,特别是在化学及药物研发中展现出了巨…

SpringBoot+Vue集成AOP系统日志

新建logs表 添加aop依赖 <!-- aop依赖--> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId> </dependency> 新建获取ip地址工具类 import javax.servlet.http.H…

React Native V0.74 — 稳定版已发布

嗨,React Native开发者们, React Native 世界中令人兴奋的消息是,V0.74刚刚在几天前发布,有超过 1600 次提交。亮点如下: Yoga 3.0New Architecture: Bridgeless by DefaultNew Architecture: Batched onLayout UpdatesYarn 3 for New Projects让我们深入了解每一个新亮点…

Docker精华篇 - 常用命令大全,入门到精通!

大家好,我是CodeQi! 我们都知道 Docker 的重要性,以及 Docker 如何在软件开发生命周期中发挥重要作用 。 说实话,学习 Docker 很有趣,至少在我看来是这样。 一旦掌握了基础知识,这并不难。 困难的是记住所有这些命令。 因此,在这篇文章中,我收集了所有命令,或者更…

四十篇:内存巨擘对决:Redis与Memcached的深度剖析与多维对比

内存巨擘对决&#xff1a;Redis与Memcached的深度剖析与多维对比 1. 引言 在现代的系统架构中&#xff0c;内存数据库已经成为了信息处理的核心技术之一。这类数据库系统的高效性主要来源于其对数据的即时访问能力&#xff0c;这是因为数据直接存储在RAM中&#xff0c;而非传统…

js学习--制作选项卡

选项卡制作 <!DOCTYPE html> <html lang"zh"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><style>.text_one {width: 11.4%;height: 200px…

身边的故事(十三):阿文的故事:出现

如果他知道一件事情如果违背正常的市场规律就是骗局或者存在巨大的风险&#xff0c;比如市场正常投资回报率在5-6%已经算高回报&#xff0c;像股神巴菲特的投资回报率应该不会超过10%吧。那些说20-30%甚至更高回报率肯定是骗局。如果...哪有那么多如果&#xff0c;人生每一秒都…

在Linux操作环境下搭建内网源

在修改配置文件之前都应该有备份。 比如在/目录下专门创建一个目录用来储存文件的备份。 1.安装vsftpd软件 首先使用命令yum search ftpd 来查看当前Linux操作系统下是否有ftpd软件。 随后使用yum install vsftpd&#xff0c;来安装vsftpd软件 2.修改vsftpd的配置文件&…

H5漂流瓶交友源码_社交漂流瓶H5源码

简介&#xff1a; 一种流行的娱乐性社交新潮流&#xff0c;年轻人玩得比较多。和盲盒有点类似 社交漂流瓶搭建教程 环境&#xff1a;Nginx 1.20.1-MySQL 5.6.50-PHP-7.3 上传源码至网站根目录&#xff0c;创建并导入数据库 数据库信息修改&#xff1a;/config/database.ph…

Zabbix 配置WEB监控

Zabbix WEB监控介绍 在Zabbix中配置Web监控&#xff0c;可以监控网站的可用性和响应时间。Zabbix提供了内置的Web监控功能&#xff0c;通过配置Web场景&#xff08;Web Scenario&#xff09;&#xff0c;可以监控HTTP/HTTPS协议下的Web服务。 通过Zabbix的WEB监控可以监控网站…

TI电池电量计应用指导

前言&#xff1a; 电池电量计应用指导,来源:TI,因PDF有200页&#xff0c;在文尾附有目录&#xff1b;上传提示资源重复&#xff0c;请自行下载&#xff0c;找不到的可私信。 电池充电曲线&#xff0c;红色为电压&#xff0c;蓝色为电流 图2.10 匹配化学 ID 所需要的电压电流曲…

html + css 快速实现订单详情的布局demo

突然安排让速写这样的一个布局&#xff0c;重点就是CSS画一条虚线,并且还要灵活设置虚线的宽度和虚线之间的间隔和虚线的颜色。 注&#xff1a;订单里面的金额都是随意写的 <!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8&…

信息安全体系架构设计

对信息系统的安全需求是任何单一安全技术都无法解决的&#xff0c;要设计一个信息安全体系架构&#xff0c;应当选择合适的安全体系结构模型。信息系统安全设计重点考虑两个方面&#xff1b;其一是系统安全保障体系&#xff1b;其二是信息安全体系架构。 1.系统安全保障体系 安…