关于使用HAWQ量化框架执行训练前推理的性能崩溃问题

news2024/9/25 3:19:47

问题描述

今天debug量化模型遇到一个比较奇怪的问题,之前从来没有注意过:
现在量化模型的流程是:
1)加载预训练好的浮点数权重模型;
2)将模型架构替换成量化架构(逐模块替换),此时浮点权重会直接被fake quant;
3)训练fake quant后的模型权重(QAT)过程。

直接在第1)步后面验证浮点权重模型效果是完全没问题的:

validate(val_loader, model, criterion, args)

我现在希望在第2)步后面验证权重直接被fake quant后的模型效果,发现所有的sample上推理结果都是0%,即模型失败!
甚至只量化第一层的激活值,也会出现模型失败的情况。于是debug了很久量化函数,并没有发现任何问题。基本的代码思路就是如下图这样(没有act_range_momentum的简单版本):

在这里插入图片描述

问题分析

最后发现问题出在validate函数中,HAWQ框架的validate函数加上了一行freeze_model(model)函数,其作用是跑量化函数时不计算模型的self.min和self.max(默认为0),导致的后果是scale算出来非常非常小,量化值(x/scale)非常非常大,clamp后所有值都被截到了两个表示范围的边缘,变成了-128或127。因此模型就失败了。

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

于是模型过量化函数时不会进self.running_stat分之,所以也不会计算self.min和self.max,导致模型失败。

在这里插入图片描述

所以HAWQ中使用validate应该是针对在做/做过量化训练的模型而言的,因此此时就保存好了self.min和self.max值,推理没问题。而对于我们这种情况(也就是加载浮点模型,然后直接过量化验证效果),是没有初始self.min和self.max值的,导致出错。

解决方案

  1. 既然想训练前验证一下,最简单的方法是直接注释掉freeze_model(model),然后推理结果就正常了

  2. 当然也可以给模型一个warmp/初始化的阶段去算最初的self.min和self.max:参考 WinogradAwareNets

感谢和Tengyu、Chenqi共同的讨论和debug,一起总结出了一些宝贵的经验(我的知识漏洞)。

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

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

相关文章

Linux和C语言(Day11)

一、学习内容 讲解有参函数 形参 和 实参 形参——定义时的参数,形式上的参数,没有实际意义,语法上必须带有数据类型 void fun(int a,int b); void fun(int a[],int n); void fun(char *s); 可以是:变量、数组、指针 实参——调用…

【笔记】物理化学绪论

文章目录 1. 物理化学的目的和研究内容什么是物理化学?目的内容 2. 物理化学的学习方法3. 物理量的表示和运算(1)物理量的表示(2)量值计算 4. 课程安排 1. 物理化学的目的和研究内容 用物理变化 P、V、T热效应电效应…

【数据结构】排序算法系列——序言(附源码+图解)

作为基础算法的中流砥柱部分,排序算法一直都是计算机学习者们不可忽略的一部分。而其中的算法思想也蕴含着许多在今后的算法学习甚至是整个计算机技术的学习之中仍然熠熠生辉的算法思想,它们引领着我们不断探索算法的奥秘之处。所以,学习排序…

黑神话悟空大圣残躯怎么打 头目大圣残躯攻略

​面对《黑神话:悟空》中的终极挑战——大圣残躯,掌握其打法要点,是通往胜利的关键。下面,就让我们一步步解析如何战胜这位强大的最终BOSS吧。 一、BOSS位置 随主线流程必解锁。击败石猿后,齐天大圣的真身——大圣残躯…

IIC通信中设备的交互流程

本文主要叙述,当两个设备进行 IIC 通信时,两个设备的交互流程,即主机的动作和从机的动作。当通过软件编程的方式实现设备间的 IIC 通信时,我们就是按照主机的动作或从机的动作来编写对应的代码。实际上,主机和从机是按…

小怡分享之栈和队列

前言: 🌈✨前面小怡给大家分享了顺序表和链表,今天小怡给大家分享一下栈和队列。 1.栈 1.1 概念 栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶&#x…

聚焦:clicOH 借助 NVIDIA cuOpt 实现最后一英里交付速度 20 倍提升

受消费者行为转变和疫情影响,电子商务继续呈爆炸式增长和转型。因此,物流和运输公司发现自己处于包裹配送革命的前沿。这新的现实情况在最后一英里配送中尤为明显,而后者现在已经成为供应链物流中成本最高的要素,占从零售到制造等…

Learn ComputeShader 13 Adding a mesh to each particle

这次要给每个粒子加上网格。 添加的网格只是一个简单的四边形,它需要分成两个三角形。并且三角形的顶点必须按照顺时针排列,同时每个顶点都应该有UV信息。 所以接下来就要添加顶点结构体以及相关的compute buffer struct Vertex{public Vector3 positi…

大数据新视界 --大数据大厂之 Spark 性能优化秘籍:从配置到代码实践

💖💖💖亲爱的朋友们,热烈欢迎你们来到 青云交的博客!能与你们在此邂逅,我满心欢喜,深感无比荣幸。在这个瞬息万变的时代,我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

数据结构————栈的讲解(超详细!!!)

1 栈的概念和结构 1.1 栈的概念 栈是一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作,进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵循后进先出(先进后出)原则。特性与栈的…

杂七杂八-必备软件下载

必备软件下载 学术软件工作软件tips软件 仅个人笔记使用,后续持续更新,感谢点赞关注 学术软件 幕布:记录各种笔记,文本和思维导图快捷互换边界AIchat:集成了多个最新大模型工具,功能丰富,推荐使…

html加载页面

<!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><title>算数模一体化</title> </head><b…

GPT-4论文阅读

GPT-4 Technical Report论文阅读 文章目录 GPT-4 Technical Report论文阅读 Abstract训练的稳定性Training processPredictable scaling训练的稳定性多么难能可贵 Capabilities考试成绩传统的benchmark语言方面的能力Visual inputsSteerability LimitationsRisks & mitigat…

初识Linux · 进程(2)

目录 前言&#xff1a; 有关进程的相关理解 前言&#xff1a; 本文会开始慢慢切入进程了&#xff0c;当然&#xff0c;切入进程之前&#xff0c;我们需要再次复习一下操作系统&#xff0c;后面接着是介绍什么是进程&#xff0c;如何查看进程&#xff0c;在Linux中对应的文件…

你真的了解电阻吗

电阻通常有下面几种表示符号。 我们用的最多的还是定值电阻。 ESP32参考设计原理图用的是折线。 GD32中参考设计原理图用的是小方框。 包括我们画原理图的时候用的基本也是小方框。 折线符号属于ANSI&#xff08;美国标准&#xff09;矩形符号属于DIN标准&#xff08;德国工业…

Linux基本

一、安装 &#xff08;一&#xff09;bios basic input / output system cpu虚拟化技术需要开启 intel amd 不同品牌进入bios快捷键不一样 &#xff08;二&#xff09;vmware 新建 配置硬件 硬盘 建议单个虚拟硬盘文件&#xff0c;比较好管理 r如果有转移的需求&#xff…

freertos 任务调度—抢占式, 时间片

FreeRTOS 操作系统支持三种调度方式&#xff1a; 抢占式调度&#xff0c;时间片调度和合作式调度。 实际应用主要是抢占式调度和时间片调度&#xff0c;合作式调度用到的很少. 1,抢占式调度 每个任务都有不同的优先级&#xff0c; 任务会一直运行直到被高优先级任务抢占或者遇到…

使用 ShuffleNet 模型在 CIFAR-100 数据集上的图像分类

简介 在深度学习领域&#xff0c;图像分类任务是衡量算法性能的重要基准。本文将介绍我们如何使用一种高效的卷积神经网络架构——ShuffleNet&#xff0c;来处理 CIFAR-100 数据集上的图像分类问题。 CIFAR-100 数据集简介 CIFAR-100 数据集是一个广泛使用的图像分类数据集&…

使用了@Bean启动成功还能注入失败?秒级解决 定位分析

文章目录 Bean 断点跟不进去为什么需要多个同类型bean怎么友好处理同类型bean【任选一种】彩蛋 Bean 断点跟不进去 结论&#xff1a;你的其他代码 或者底层依赖&#xff0c;一定有改类型的自动注入代码&#xff0c;在Spring 机制中&#xff0c;默认拒绝Bean重写&#xff0c;你…

2024年一区SCI-极光优化算法 Polar Lights Optimization-附Matlab免费代码

引言 本期介绍了一种名为极光优化算法 Polar Lights Optimization (PLO)的元启发式算法。极光是一种独特的自然奇观&#xff0c;当来自太阳风的高能粒子在地磁场和地球大气层的影响下汇聚在地球两极时&#xff0c;就会发生极光。该成果于2024年8月最新发表在国际顶级JCR 1区、…