Datawhale组队学习】模型减肥秘籍:模型压缩技术3——模型量化

news2024/11/19 22:39:17

模型量化的目的是通过将浮点运算转换为定点运算,以减少模型大小、内存和存储需求,同时加快推理速度,降低计算功耗,使得模型在低算力设备上运行更加高效,特别适用于嵌入式设备或移动端场景。

不同数据类型(FP32、BF16、FP16、INT8)在动态范围和精度上的差异。FP32具有最广的动态范围,同时精度最高。图中两个相邻值之间的距离较小,意味着它能够在很大范围内精确地表示数值,是深度学习模型的常见选择,尤其在精度要求高的场景中。

BF16保持了与FP32类似的动态范围,但牺牲了一部分精度。虽然它能够处理与FP32相同范围的数值,但相邻值之间的距离较大,因此精度较低。这种格式在需要节省内存的情况下仍然能提供足够大的动态范围,常用于加速模型训练而不显著影响性能。

FP16的动态范围比BF16略小,数值范围从 -65504 到 65504,精度也比FP32低,相邻值之间的距离比FP32和BF16更大。FP16常用于在精度损失可接受的情况下减少模型的计算和存储资源。

INT8是一种8位整数类型,具有非常有限的动态范围。由于它只能表示离散的整数值,其动态范围和精度都明显低于浮点数类型。但由于其低存储需求和高计算效率,INT8非常适合于资源受限设备的模型推理,特别是在内存和功耗有限的场景中。

在这里插入图片描述
把普通图片用8位颜色表示:在这里插入图片描述

实际操作

在这里插入图片描述
以下是一段简单的代码表示张量 x 从 fp32 量化到 int8 整型,再反量化回 fp32 的示例:

x->x{int}->x_hat 的过程的一个示例如下:
在这里插入图片描述
量化前 x:
在这里插入图片描述

量化后 x_hat:
在这里插入图片描述

工业界的应用

大型语言模型的量化也能让模型“瘦身”,让它能更高效地运行。原本这些模型用的是很高精度的数据类型来保存参数,这样虽然精确,但代价就是占用大量内存,而且运算也非常耗费资源。一台普通的设备根本跑不动这样的庞然大物,用量化技术把这些参数从高精度的格式变成低精度的格式,比如把32位的浮点数变成8位的整数,这样不仅减少了模型的大小,也加快了计算速度。特别是在手机或者嵌入式设备上,量化能让模型跑得又快又省电。量化就成了大型语言模型落地应用的重要一步,让它们不再只是实验室里的庞然大物,而是可以实际用起来,服务更多场景。

在这里插入图片描述
GPTQ 是最早被工程化部署所接受的量化方案,W8A16 或 W4A16 的量化效果在多数场景中都有与原模型较为接近的表现,而且其量化过程非常快。
在这里插入图片描述

参考文献

  1. https://tech.dewu.com/article?id=112
  2. https://www.datawhale.cn/learn/content/68/963
  3. https://blog.csdn.net/penriver/article/details/136411485
  4. https://piprogramming.org/articles/Simple-and-Foolproof-ways-to-Shrink-Compress-and-Accelerate-your-Deep-Learning-Neural-Network-etc-Artificial-Intelligence-Models-0000000015.html
  5. https://newsletter.maartengrootendorst.com/p/a-visual-guide-to-quantization
  6. https://xie.infoq.cn/article/01daa1c8fdd58f2d07af448ab?utm_campaign=geektime_search&utm_content=geektime_search&utm_medium=geektime_search&utm_source=geektime_search&utm_term=geektime_search

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

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

相关文章

【MongoDB】MongoDB的集群,部署架构,OptLog,集群优化等详解

文章目录 一、引入复制集的原因二、复制集成员(一)基本成员(二)主节点(Primary)细化成员 三、复制集常见部署架构(一)基础三节点(二)跨数据中心 四、复制集保…

Javaweb梳理17——HTMLCSS简介

Javaweb梳理17——HTML&CSS简介 17 HTML&CSS简介17.1 HTML介绍17.2 快速入门17.3 基础标签17.3 .1 标题标签17.3.2 hr标签17.3.3 字体标签17.3.4 换行17.3.8 案例17.3.9 图片、音频、视频标签17.3.10 超链接标签17.3.11 列表标签17.3.12 表格标签17.3.11 布局标签17.3.…

远程管理不再难!树莓派5安装Raspberry Pi OS并实现使用VNC异地连接

前言:大家好!今天我要教你们如何在树莓派5上安装Raspberry Pi OS,并配置SSH和VNC权限。通过这些步骤,你将能够在Windows电脑上使用VNC Viewer,结合Cpolar内网穿透工具,实现长期的公网远程访问管理本地树莓派…

力扣 LeetCode 94. 二叉树的中序遍历(Day6:二叉树)

解题思路&#xff1a; 方法一&#xff1a;递归&#xff08;左中右&#xff09; class Solution {List<Integer> res new ArrayList<>();public List<Integer> inorderTraversal(TreeNode root) {recur(root);return res;}public void recur(TreeNode root…

MySQL查询执行(七):临时表

临时表重名 思考&#xff1a;临时表和内存表的区别? 内存表&#xff0c; 指的是使用Memory引擎的表&#xff0c; 建表语法是create table …enginememory。 这种表的数据都保存在内存里&#xff0c; 系统重启的时候会被清空&#xff0c; 但是表结构还在。 除了这两个特性看上…

自己动手写Qt Creator插件

文章目录 前言一、环境准备1.先看自己的Qt Creator IDE的版本2.下载源码 二、使用步骤1.参考原本的插件2.编写自定义插件1.cmakelist增加一个模块2.同理&#xff0c;qbs文件也增加一个3.插件源码 三、效果总结 前言 就目前而言&#xff0c;Qt Creator这个IDE&#xff0c;插件比…

【星海随笔】ZooKeeper-Mesos

开源的由 Twitter 与 伯克利分校的 Mesos 项目组共同研发设计。 两极调度架构 支持高可用集群&#xff0c;通过ZooKeeper进行选举。 Mesos master 管理着所有的 Mesos slave 守护进程 每个slave运行具体的任务或者服务。 Franework 包括的调度器和执行机两部分 执行器运行在Me…

集群聊天服务器(12)nginx负载均衡器

目录 负载均衡器nginx负载均衡器优势 如何解决集群聊天服务器跨服务器通信问题&#xff1f;nginx的TCP负载均衡配置nginx配置 负载均衡器 目前最多只能支持2w台客户机进行同时聊天 所以要引入集群&#xff0c;多服务器。 但是客户连哪一台服务器呢&#xff1f;客户并不知道哪一…

集群聊天服务器(3)muduo网络库

目录 基于muduo的客户端服务器编程 muduo只能装在linux中&#xff0c;依赖boost库 客户端并不需要高并发 基于muduo的客户端服务器编程 支持epoll线程池&#xff0c;muduo封装了线程池 而且还有完善的日志系统 使用muduo库代码非常固定&#xff0c;基本就只有chatserver的类名…

深入内核讲明白Android Binder【一】

深入内核讲明白Android Binder【一】 前言一、Android Binder应用编写概述二、基于C语言编写Android Binder跨进程通信Demo0. Demo简介1. 服务的管理者server_manager.c2. Binder服务端代码实现 test_service.c2.1 实现思路2.2 完整实现代码 3. Binder客户端代码实现 test_clie…

NIST 发布后量子密码学转型战略草案

美国国家标准与技术研究所 (NIST) 发布了其初步战略草案&#xff0c;即内部报告 (IR) 8547&#xff0c;标题为“向后量子密码标准过渡”。 该草案概述了 NIST 从当前易受量子计算攻击的加密算法迁移到抗量子替代算法的战略。该草案于 2024 年 11 月 12 日发布&#xff0c;开放…

探索大规模语言模型(LLM)在心理健康护理领域中的应用与潜力

概述 心理健康是公共卫生最重要的领域之一。根据美国国家精神卫生研究所&#xff08;NIMH&#xff09;的数据&#xff0c;到 2021 年&#xff0c;22.8% 的美国成年人将患上某种形式的精神疾病。在全球范围内&#xff0c;精神疾病占非致命性疾病负担的 30%&#xff0c;并被世界…

排序(C语言实现)

排序 文章目录 排序插入排序直接插入排序折半查找插入排序希尔排序 选择排序简单选择排序堆排序一、构建堆**堆有以下性质**&#xff1a;**堆的存储方式**&#xff1a;**设计堆**数据结构堆的维护堆的初始化创建堆插入一个元素删除一个元素返回有效元素的个数获得优先级最高的元…

i春秋-EXEC(命令执行、nc传输文件、带外通道传输数据)

练习平台地址 竞赛中心 题目描述 题目内容 小猫旁边有一个no sign F12检查页面 没有提示 检查源代码 发现使用了vim编辑器 进而联想到vim编辑器的临时交换文件.xxx.swp 访问.index.php.swp&#xff0c;成功下载文件 使用vim -r 查看文件内容 vim -r index.php.swp <?p…

移情别恋c++ ദ്ദി˶ー̀֊ー́ ) ——14.哈希(2)(模拟实现)

1.概念介绍 1.1开散列 开散列&#xff08;Open Hashing&#xff09;&#xff0c;也叫链地址法&#xff0c;是一种解决哈希冲突的方法。每个哈希表槽位保存一个链表&#xff0c;所有散列到同一位置的元素都存储在该链表中。当插入元素发生冲突时&#xff0c;将新元素添加到相应…

使用Web Speech API实现语音识别与合成技术

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 使用Web Speech API实现语音识别与合成技术 使用Web Speech API实现语音识别与合成技术 使用Web Speech API实现语音识别与合成技…

自动驾驶系列—面向自动驾驶的模型迭代:工具、平台与最佳实践

&#x1f31f;&#x1f31f; 欢迎来到我的技术小筑&#xff0c;一个专为技术探索者打造的交流空间。在这里&#xff0c;我们不仅分享代码的智慧&#xff0c;还探讨技术的深度与广度。无论您是资深开发者还是技术新手&#xff0c;这里都有一片属于您的天空。让我们在知识的海洋中…

【Golang】——Gin 框架中的模板渲染详解

Gin 框架支持动态网页开发&#xff0c;能够通过模板渲染结合数据生成动态页面。在这篇文章中&#xff0c;我们将一步步学习如何在 Gin 框架中配置模板、渲染动态数据&#xff0c;并结合静态资源文件创建一个功能完整的动态网站。 文章目录 1. 什么是模板渲染&#xff1f;1.1 概…

网络基础 - NAT 篇

一、全局 IP 地址(公网 IP 地址)和私有 IP 地址 RFC 1918 规定了用于组建局域网的私有 IP 地址&#xff1a; 10.0.0.0 ~ 10.255.255.255172.16.0.0 ~ 172.31.255.255192.168.0.0 ~ 192.168.255.255 包含在以上范围内的 IP 地址都属于私有 IP 地址&#xff0c;而在此之外的 I…

ClickHouse的介绍、安装、数据类型

1、介绍和安装 1.1、简介 ClickHouse是俄罗斯的Yandex于2016年开源的列式存储数据库&#xff08;DBMS&#xff09;&#xff0c;使用C语言编写&#xff0c;主要用于在线分析处理查询&#xff08;OLAP&#xff09;&#xff0c;能够使用SQL查询实时生成分析数据报告。 OLAP&…