一步一步理解大模型:模型量化技术1-简介_大模型量化等级是什么意思-程序员宅基地

技术标签: 深度学习  人工智能  

模型量化(Quantization)是一种用来减少模型大小和提高模型运行速度的技术。

默认情况下,模型使用32位浮点数进行所有预测计算,这也使得模型变得非常大。我们可以通过进行一些舍入操作,基本上达到接近正确的答案,这样可以在不损失太多精度的情况下,使模型变得更小。

具体而言,假设我们的模型参数都是从0到1的之间的数,如果用一个比特来储存,你只能储存两个数0和1, 如果增加一个比特,你就有4种方法来表示从0到1之间的范围:

比特 代表的值
00 0
01 0.33
10 0.66
11 1

值的间隔为0.33. 

再增加一个比特,你就有8种方法来表示这个范围:

比特 代表的值
000 0
001 0.125
010 0.25
011 0.375
100 0.5
101 0.625
110 0.875
111 1

值的间隔为0.125

依此类推,你有2的n次方种方法来表示这个范围,这里的n就是比特的位数。值的间隔就是

1 / pow(2,n)

现在,我们把这个0到1之间的范围称为一个权重,看成一片连续的水面,上面表中的值看成一个一个的“落脚点”。

 假设我们有一个特定的值,该权重在某个“落脚点”处"激活"。简单的说,激活的意思就是如果这个靠近的某个落脚点,就把它算成某个落脚点的值. 在训练模型的时候,机器会调整这些权重,这些权重会用某个落脚点的值来表示。

比如,我们有一个权重,它被训练成在0.12的时候时激活。如果是8位比特来表示,阈值的间隔为 1 / pow(2,8) = 0.00390625

那么权重会在哪里激活呢,会在0.12109375的地方激活,如下表所示:

阀门 权重
。。。
0.12109375 0.12
0.125
。。。

如果用4位比特来表示,权重会在0.125的的地方激活:

阀门 权重
。。。
0.625
0.125 0.12
。。。

那么二者的精度相差多少呢?

我们先比较两者的绝对精度,用8位比特表示0.12时候,精度为

0.12 / 0.12109375 = 0.9909677419354839

用4位比特表示的时候,精度为:

0.12 / 0.125 = 0.96,

二者的比值为:

0.96 / 0.9909677419354839 = 0.96875 约为97%,也可以说损失的精度大约为3%

就是说,你仅用少量的精度损失的代价节省了大量的存储空间,是非常划算的。

当然对于不同的数字,损失的精度是不同的。总的来看,模型量化的精度损失取决于多种因素,包括所使用的量化策略、模型的特性,以及实际应用中的需求等。以下是一些常见的量化方法有:

16-bit量化,也叫半精度浮点数,也叫做FP16量化,精度损失通常非常小,很多情况下几乎可以忽略不计。这使得FP16成为许多深度学习任务中的优选量化策略,特别是在需要在GPU上进行大规模计算时。

8-bit量化:8-bit(INT8)量化可能会导致一些精度损失,但通常能够控制在可接受的范围内。在许多任务中,INT8量化后的模型精度与原始模型相比,精度下降往往在1%以内。

4-bit量化:对模型进行4-bit(INT4)量化,精度损失可能会相对更大。一些先进的量化策略已经能够将精度损失控制在个位数百分点范围内。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/chattyfish/article/details/131846541

智能推荐

cocos内存管理机制_cocos内存是怎么管理的-程序员宅基地

文章浏览阅读1.5k次,点赞2次,收藏7次。在cocos2dx-3.8中的自动内存管理机制是借助引用计数来实现的。对于老版本的cocos引用计数使用的是CCObject,但是这个类在后面就被弃用了,使用Ref来代替,cocos内几乎所有的类都是继承自Ref。 Ref基本的原理就是其内部存在一个引用计数_referenceCount,当这个引用计数为0的时候,就会被释放。引用计数通过retain,release来操作。Ref从创建到销毁的过_cocos内存是怎么管理的

使用LeanCloud服务做一站式Chrome插件开发——Favorite Image-程序员宅基地

文章浏览阅读68次。0. 目录要开发的是什么项目1.1 想法开端1.2 应该有什么功能?开发需要解决的核心问题具体解决方案3.1 帐号系统3.2 存储服务3.3 使用`LeanEngine`做反防盗链中转接口3.4 Chrome 插件实现对去后端化的看法1. 要开发的是什么项目?一个Chrome插件,用来保存浏览网页时看到...

为什么5000+企业放弃Sonatype,选择JFrog Artifactory_sonartype nexus jfrog-程序员宅基地

文章浏览阅读1.2k次。一、背景制品,artifact,也称为工件,是指在构建或持续集成过程中从源码创建而成的二进制包,而这些二进制包通常是通过赋予其的版本号来唯一定位和管理的。制品仓库,artifact repository,则是存储和管理这些版本化的二进制包,并对外提供检索和访问方法的应用程序。制品仓库通常分为中央仓库、企业仓库和本地仓库。中央仓库面向公众开放,存储和管理预先构建好的二进制包,通常提供软件开发..._sonartype nexus jfrog

米利型和摩尔型状态机-程序员宅基地

文章浏览阅读5.8k次,点赞3次,收藏7次。2019独角兽企业重金招聘Python工程师标准>>> ..._摩尔机和米利机

书籍《Python股票量化交易从入门到实践》学习进阶路线-程序员宅基地

文章浏览阅读2.1w次,点赞35次,收藏181次。#Python高阶# && #数据处理# #数据库# ------主题目录-------1 数据处理篇【含数据库、爬虫相关】:提取搭建系统过程中,出现的各种数据处理场景,讲解对应的解决方法。主题内容如下:【1-1 除权与复权走势的对比】【1-2 解决warning:A value is trying to be set on a copy of a slice from a DataFrame】【1-3 difference方法找出不重复的Dataframe】【1-4 使用pd.m_python股票量化交易从入门到实践

zookeeper没有对节点设置删除权限,如何删除节点_zookeeper deleteall 没权限-程序员宅基地

文章浏览阅读2.6k次。设置超级管理员 当对节点设置权限时,没有设置删除权限,那么如果想删除该节点,只能通过超级管理员来删除。 运行代码: String s = DigestAuthenticationProvider.generateDigest("super:admin"); System.out.println(s); 将打印出来的s 放到: "-Dzookeeper.Diges..._zookeeper deleteall 没权限

随便推点

mybaties处理mysql删除(子查询结果集报错)_mysql delete没法删除子查询-程序员宅基地

文章浏览阅读931次。错误:delete from table1 a WHERE a.table2_id in( select b.id from table2 b where b.name = '-1' )执行以上语句总是报错,原因是mysql在删除的时候,不支持别名定义,把别名去掉即可正常执行。正确:delete from table1 WHERE table2_id in( select _mysql delete没法删除子查询

开源网关【转】_美团网关开源-程序员宅基地

文章浏览阅读2.6k次。转自https://gitbook.cn/books/5bbb3d2a61d11c2d996be26b/index.html百亿流量 API 网关设计与实践kimmking向作者提问秦金卫,现某公司高级技术总监/Apache Dubbo Committer,前阿里架构师/某商业银行北京研发中心负责人。关注于互联网电商,金融,支付等系统领域,10多年研发管理和架构经验,对于中间件..._美团网关开源

集成学习-Bagging-Boosting-AdaBoost_集成模型的期望错误大于等于所有模型的平均期望错误的-程序员宅基地

文章浏览阅读580次。集成学习1.导言一个形象的比喻:“三个臭皮匠赛过诸葛亮!”假设输入x\boldsymbol{{x}}x和输出y\boldsymbol{{y}}y之间的真实关系为:y=h(x)\boldsymbol{{y}}=h(\boldsymbol{{x}})y=h(x).对于M\boldsymbol{{M}}M个不同的模型f1(x),⋯ ,fM(x)f_1(\boldsymbol{{x}}),\cdot..._集成模型的期望错误大于等于所有模型的平均期望错误的

CF71A——Way Too Long Words_cf a. way too long words python写法-程序员宅基地

文章浏览阅读251次。import java.util.Scanner;public class CF71A { public static void main(String[] args) { // Scanner封装system.in输入流 Scanner sc = new Scanner(System.in); // 总单词个数 int n = sc.nextInt(); for(int i = 0; i < n; i++._cf a. way too long words python写法

Retrofit 和 Rxjava 网络封装_retrofit rxjava-程序员宅基地

文章浏览阅读136次。Retrofit 和 Rxjava 网络封装首先第一步就是导依赖api 'io.reactivex.rxjava2:rxjava:2.2.8'api 'io.reactivex.rxjava2:rxandroid:2.1.1'api 'com.squareup.okhttp3:okhttp:3.12.1'//日志拦截器api 'com.squareup.okhttp3:logging-interceptor:3.11.0'//网络请求封装框架api 'com.squareup.retr_retrofit rxjava

liblas1.8.1 最全最简单编译安装(VS2015+Win10 64)_liblas编译-程序员宅基地

文章浏览阅读3.3k次。前言首先,了解一下liblas库的依赖库,Cmake的时候,会显示工程路径和依赖库的选项,我们会设置其中的一些选项。先放这张图的目的,是要明白编译liblas需要哪些依赖库。如果你的电脑上没有某个依赖库,需要先去官网找到这个依赖库的压缩包,编译安装好。总共六个依赖库(不要慌,这些库编译都很简单的):Boost: 如果你之前编译过PCL库,那么你电脑上就已经有Boost库,只要找到它的路径..._liblas编译

推荐文章

热门文章

相关标签