首页 > 其他分享 >MegEngine 使用小技巧:量化

MegEngine 使用小技巧:量化

时间:2023-04-25 18:01:48浏览次数:39  
标签:技巧 训练 模型 Float MegEngine 量化 QFloat

常见神经网络模型所用的 Tensor 数据类型 一般是 float32 类型, 而工业界出于对特定场景的需求(极少的计算资源,极致的推理速度),需要把模型的权重和或激活值转换为位数更少的数值类型(比 int8, float16) —— 整个过程被称为量化(Quantization)。

MegEngine 使用小技巧:量化_浮点

通常以浮点模型为起点,经过中间的量化处理后最终变成量化模型,在这个过程中一般会导致模型掉点。

目前业界缓解模型掉点的问题的技术主要有两种,在 MegEngine 中都进行了支持:

  • 训练后量化(Post-Training Quantization, PTQ);
  • 量化感知训练(Quantization-Aware Training, QAT)。

更多量化基本流程:量化基本流程介绍

整体流程

以量化感知训练为例,一般以一个训练完毕的浮点模型为起点,称为 Float 模型。 包含假量化算子的用浮点操作来模拟量化过程的新模型,我们称之为 Quantized-Float 模型,或者 QFloat 模型。 可以直接在终端设备上运行的模型,称之为 Quantized 模型,简称 Q 模型。

而三者的精度一般是 Float > QFloat > Q ,故而一般量化算法也就分为两步:

  • 拉近 QFloat 和 Q,这样训练阶段的精度可以作为最终 Q 精度的代理指标,这一阶段偏工程;
  • 拔高 QFloat 逼近 Float,这样就可以将量化模型性能尽可能恢复到 Float 的精度,这一阶段偏算法。

典型的三种模型在三个阶段的精度变化如下:

MegEngine 使用小技巧:量化_浮点_02

对应到具体的 MegEngine 接口中,三阶段如下:

  1. 基于 Module 搭建网络模型,并按照正常的浮点模型方式进行训练;
  2. 使用 quantize_qat 将浮点模型转换为 QFloat 模型, 其中可被量化的关键 Module 会被转换为 QATModule , 并基于量化配置 QConfig 设置好假量化算子和数值统计方式;
  3. 使用 quantize 将 QFloat 模型转换为 Q 模型, 对应的 QATModule 则会被转换为 QuantizedModule , 此时网络无法再进行训练,网络中的算子都会转换为低比特计算方式,即可用于部署了。

MegEngine 使用小技巧:量化_浮点_03

此处为标准量化流程,实际使用时也可有灵活的变化。

ResNet 实例讲解 下面我们以 ResNet18 为例来讲解量化的完整流程。主要分为以下几步:

  1. 修改网络结构,使用已经融合好的 ConvBn2d、ConvBnRelu2d、ElementWise 代替原先的 Module. 在正常模式下预训练模型,并在每轮迭代保存网络检查点;
  2. 调用 quantize_qat 转换模型,并进行量化感知训练微调(或校准,取决于 QConfig);
  3. 调用 quantize 转换为量化模型,导出模型用于后续模型部署。

详细操作指南文档见:ResNet 实例讲解

附:

「MegEngine 使用小技巧」系列文章,重点输出 MegEngine 及周边工具的使用技巧,如有催更或投稿,欢迎联系我们哦~

标签:技巧,训练,模型,Float,MegEngine,量化,QFloat
From: https://blog.51cto.com/u_15847528/6224806

相关文章

  • MegEngine 使用小技巧:量化
    常见神经网络模型所用的Tensor数据类型一般是float32类型,而工业界出于对特定场景的需求(极少的计算资源,极致的推理速度),需要把模型的权重和或激活值转换为位数更少的数值类型(比int8,float16)——整个过程被称为量化(Quantization)。通常以浮点模型为起点,经过中间的量化处理......
  • 小技巧:如何让 Windows 应用程序在 Parallels Desktop 中启动得更快
    经过十多年的发展,ParallelsDesktop在性能方面得到了突飞猛进的提升。但俗话说,“没有最快只有更快。”因此,在这篇文章中,小编将分享您一个小技巧:如何使您的Windows应用程序启动得更快。PD最新版虚拟机永久激活版下载下图显示了视频中的同一台M1MacBookPro和在InteliM......
  • 牛气冲天的量化交易,程序员的救星?
    本文首发自「慕课网」,想了解更多IT干货内容,程序员圈内热闻,欢迎关注"慕课网"!原作者:袁霄|慕课网讲师近来“量化交易”这个词听得越来越频繁,多数人对量化交易的第一印象是“高大上的技术”、“可以躺着赚钱的工具”……可是,你是否真正思考过量化交易到底是什么,能帮助我们做些什么?笔者......
  • Linux常用技巧(十三)
    1、点亮指定硬盘:定位,磁盘闪灯/opt/MegaRAID/MegaCli/MegaCli64-PdLocate-start-physdrv[E:S]-a0/opt/MegaRAID/MegaCli/MegaCli64-PdLocate-stop-physdrv[E:S]-a02、查看证书过期时间echo|openssls_client-servername${domain}-connect${domain}:4432>/dev/null|......
  • k8s技巧完全版
    效率篇自动补全不想写那么长的命令每次都要打命名空间,太累了?调试篇这些好用的工具,你怎么能没有?日志你在哪!监控资源限制执行命令格式化输出Kubectl详细输出和调试集群来回copy文件网络篇修改Pod内部的/etc/hosts为什么我Ping不通svc?可以让我直接访问你吗......
  • Java文件操作必备技能,10个小技巧让你快速掌握!
    前言  在我们日常的开发中,文件操作是一个非常重要的主题。文件读写、文件复制、任意位置读写、缓存等技巧都是我们必须要掌握的。在这篇文章中,我将给你们介绍10个实用的文件操作技巧。使用try-with-resources语句处理文件IO流,确保在使用完毕后自动关闭流。使用java.n......
  • 模型轻量化-网络剪枝专栏(一)网络剪枝概述
    前言 近年来,深度神经网络在许多计算机视觉和自然语言处理任务中取得了很大的成功。然而,这些网络通常具有非常高的计算和存储成本,限制了它们在嵌入式设备和移动设备上的部署。为了解决这个问题,网络剪枝技术被广泛应用于深度神经网络中,以减少其计算和存储需求,成为模型压缩领域流行......
  • 轻量化3D文件格式转换HOOPS Exchange新特性
    BIM与AEC市场发展现状近年来BIM(建筑信息模型)和AEC(建筑、工程和施工)市场一直保持着持续增长。2014年全球BIM软件市场价值27.6亿美元,而到2022年,预期到达115.4亿美元,复合年增长率保持在19.1%,并且对未来十年BIM增长率的保守估计为10%。世界各地的许多政府现在也在强制要求遵守......
  • PowerDesigner 12小技巧-pd修改外键命名规则-pd添加外键
    PowerDesigner12小技巧-pd小技巧-pd工具栏不见了-pd修改外键命名规则-pd添加外键1.附加:工具栏不见了调色板(Palette)快捷工具栏不见了PowerDesigner 快捷工具栏palette不见了,怎么重新打开,找回来呢上网搜索了一下”powerdesigner图形工具栏”,找到了找回PowerDesigner工具......
  • Python partition使用技巧
    partition()方法用来根据指定的分隔符将字符串进行分割。如果字符串包含指定的分隔符,则返回一个3元的元组,第一个为分隔符左边的子串,第二个为分隔符本身,第三个为分隔符右边的子串。flask源代码的run模块中,出现的代码当做示例defrun():......_host='127.0.0.1'......