大模型中的计算精度——FP32, FP16, bfp16之类的都是什么???

news2024/11/27 7:43:04

大模型中的计算精度——FP32, FP16, bfp16之类的都是什么???

  • 这些精度是用来干嘛的??
  • 混合精度 mixed precision training
    • 什么是混合精度?
    • 怎么转换呢?
  • 为什么大语言模型通常使用FP32精度训练
  • 量化
    • 与混合精度有啥区别?
    • 量化怎么用?
  • 参考博客:

这些精度是用来干嘛的??

省流:硬件不够,精度来凑。
举个例子:关于长度单位有各种各样的单位,高精度就是一个超级精细的测量长度的仪器,可以测量到非常小的单位。低精度就是类似我们手中的尺子,到毫米为止了,再往下就测量不到了。现在让你测量一根头发有多粗,用精密的仪器测量会比较麻烦,但很精确;用尺子就不会很准确,但很快就能得到结果。无论使用那种工具,总会得到一个结果的。

如果我们想要更高的精度,就需要更多的存储空间和计算资源,这可能会增加计算的复杂性和成本。所以精度是我们在使用计算机进行数值计算时必须考虑的一个重要因素。准确结果 or 节省计算资源?

在大模型的训练和推理中因为没有足够的硬件设施(mei qian),有些大模型就没办法享受到。因此就有了这种通过降低精度而加快模型训练速度、降低显存占用率的方法——混合精度

混合精度 mixed precision training

什么是混合精度?

这是一种加速深度学习训练的技术。其主要思想是在精度降低可忍受的范围内,使用较低精度的浮点数来表示神经网络中的权重和激活值,从而减少内存使用和计算开销,进而加速训练过程

FP32、FP16、BF16和FP8都是计算中使用的数字表示形式,特别是在浮点运算领域。这些格式主要通过它们使用的位数来区分,这影响了它们的精度、范围和内存要求。

在这里插入图片描述
详细的精度范围我就不说了,知道了也没啥用,了解每个精度用来干嘛的就行

精度应用性能
FP16深度学习、神经网络训练相对于FP32有更快的计算速度和更低的内存使用量
FP16深度学习、神经网络训练相对于FP32有更快的计算速度和更低的内存使用量
BF16混合精度训练、深度学习性能各异,但通常允许比FP16更快的训练和更宽的范围
FP16深度学习(DL)、神经网络训练相对于FP32有更快的计算速度和更低的内存使用量

怎么转换呢?

混合精度训练的流程如下:

  1. 将FP32的权重转换为FP16格式,然后进行前向计算,得到FP32的损失(loss)。
  2. 使用FP16计算梯度。
  3. 将梯度转换为FP32格式,并将其更新到权重上。

为什么大语言模型通常使用FP32精度训练

大型语言模型通常使用FP32(32位浮点)精度进行训练,因为其较高的数值精度可以带来更好的整体模型。以下是一些关键点:

  1. 较高的数值精度:FP32比如FP16(16位浮点)这样的低精度格式提供更高的数值精度。这种更高的精度可以在训练期间导致更准确的计算,从而产生更有效的模型。
  2. 稳定性:在像FP16这样的低精度格式中进行训练可能会引入数值稳定性问题。例如,梯度下溢或溢出的机会更高,优化器的计算精度较低,累加器超出数据类型的范围的风险更高。
  3. 兼容性:像PyTorch这样的深度学习框架带有内置的工具来处理FP16的限制,但即使有了这些安全检查,由于参数或梯度超出可用范围,大型训练工作常常失败。

然而,尽管有这些优势,FP32也带来了更大的内存和训练时间要求。为了缓解这些问题,经常使用混合精度训练。混合精度训练将一些训练操作放在FP16而不是FP32中。在FP16中进行的操作需要较少的内存,并且在现代GPU上的处理速度可以比FP32快达8倍。尽管精度较低,但大多数在FP16中训练的模型没有显示任何可测量的性能下降。

量化

与混合精度有啥区别?

省流:量化精度是整形的,不再是浮点数了。
这是通过整型数值表示浮点的计算方式,减少数字表示的位数来减小模型存储量和计算量的方法。因为精度可能会导致计算和存储的开销非常高,因此量化使用更短的整数表示权重和激活值,从而减少内存和计算开销

量化怎么用?

这里使用load_in_8bit来举例
使用load_in_8bit方法可以实现模型的量化。该方法可以将模型权重和激活值量化为8位整数,从而减少内存和计算开销。具体实现方法如下:

from transformers import AutoTokenizer, AutoModel 
model = AutoModel.from_pretrained("THUDM/chatglm3-6b",
                                      revision='v0.1.0',
                                      load_in_8bit=True,
                                      trust_remote_code=True,
                                      device_map="auto")

需要注意的是,使用load_in_8bit方法量化模型可能会导致模型精确度下降。另外,不是所有的模型都可以被量化,只有支持动态量化的模型才可以使用该方法进行量化。

参考博客:

GPT实战系列-Baichuan2等大模型的计算精度与量化

大模型(LLM)的量化技术Quantization原理学习

关于LLM你或许不知道的事情-为什么大语言模型的训练和推理要求比较高的精度,如FP32、FP16?浮点运算的精度概念详解//(转载)

GPT实战系列-Baichuan2等大模型的计算精度与量化

bf16 和fp16 ,fp32的区别以及相互转换逻辑

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

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

相关文章

房地产房型展示信息小程序的内容是什么

地产业规模之大且品牌众多,还有房屋租赁、中介等,无论开发商公司还是衍生行业商家都需要多渠道宣传品牌和客户触达沟通转化,除了线下各种传单,线上也是主要场景,通过各种连接来达到相应目标。 也因此需符合平台生态开…

基于cortex-M3的rtos原理(上)

一、RTOS是什么? 下面是网上搜索到的定义: 看到系统一般会想到window,linux这种,但是rtos区别于它们的是占用资源小,实时性强,可以运行在资源受限的mcu上。一些soc厂商编写的sdk里带有添加“任务”的功能&…

SAP RFC 输入一张表(C# 使用 SapNwRfc 二)

SapNwRfc中的配置参数,记录日志关闭 Trace0,可以得到很好的性能。 有网友在问,SAP RFC返回多张表(C# 使用 SapNwRfc 一)中如何输入一张表的数据,正好博主也遇到了这个场景,今天做了一个DEMO&…

【Java】类与类的关系及其总结

类和类的关系 代码 总结: 【1】面向对象的思维:找参与者,找女孩类,找男孩类 【2】体会了什么叫方法的性擦,什么叫方法的实参: 具体传入的内容 实参: 【3】类和类可以产生关系: …

python基础面试题(其二)

十一, 常用的字符串处理 常见操作——查找 string.find(str, beg0,endlen(string)) 检测str是否包含在string中,如果beg和end指定范围,则检查是否在指定范围内,如果是返回开始的索引值,则返回-1 string.rfind(str, be…

python-求f(x,n)

[题目描述] 输入: 输入 𝑥和 𝑛。输出: 函数值,保留两位小数。样例输入1 4.2 10 样例输出1 3.68 来源/分类(难度系数:一星) 完整代码如下: x,nmap(eval,input().split(…

Internet Download Manager ( 极速下载器 ) 序列号注册码 IDM下载器注册机中文激活破解版

IDM下载器(Internet Download Manager)是一款专业的下载管理软件,它通过多线程技术和智能文件分段技术,有效提升下载速度,并支持断点续传,还具有计划下载功能,用户可以设置特定的下载时间,非常适合需要在特…

推荐一款可以下载B站视频和音频的工具

cobalt是一个免费的下载网站,主要是用于载视频和音频。只要你把相应的网址复制下来,然后打开cobalt网站,黏贴网址,选择要下载的格式,就可以下载相应的音频或者视频了。 该网站非常简洁,使用也很简单。目前只…

RK3568平台(触摸篇)触摸屏基本原理

一.触摸屏概述 触摸屏作为一种新的输入设备,它是目前最简单、方便、自然的一种人机交互方式。 触摸屏又称为“触控屏”、“触控面板”,是一种可接收触头等输入讯号的感应式液晶显示装置;当接触了屏幕上的图形按钮时,屏幕上的触觉…

大话C语言:第24篇 预处理

1 C语言编译流程 C语言的编译流程包括: 预编译:将.c 中的头文件展开、宏展开,生成的文件是.i 文件。gcc指令:gcc -E file.c -o file.i 编译:将预处理之后的.i 文件生成 .s 汇编文件。gcc指令:gcc -S file…

编译一个叫:未来的IDE-Zed编辑器(Windows平台)

一、前言 截止到2024-6-15,Zed官方并未给出Windows的二进制安装包,如果想在Windows平台使用的话需要自己编译,我是如何编译的请随我道来,有兴趣的码友可以尝试下,在下可不敢保证各位码友按我这方法能100%编译出来&…

流量卡怎么办理的攻略

一、确定需求 在办理流量卡之前,你需要明确自己的需求。根据不同的使用场景,你可能需要考虑以下几个方面: 月租费用:不同运营商提供的流量卡套餐价格各异,从低至19元到高达199元不等。 流量大小:从30GB到3…

CompletableFuture.runAsync的多线程下异步操作

CompletableFuture.runAsync的多线程下异步操作 🧰业务使用场景 ​CompletableFuture.runAsync()​方法是Java中用于创建异步任务的工具,它可以在后台线程中执行指定的任务,并且可以在任务完成后返回结果或执行后续操作。这种方式可以实现多…

Elixir学习笔记——别名、需要、导入和使用

为了便于软件重用,Elixir 提供了三个指令(alias、require 和 import)以及一个名为 use 的宏,总结如下: # 为模块添加别名,以便可以将其称为 Bar 而不是 Foo.Bar alias Foo.Bar, as: Bar # 需要模块才能使…

数字化校园:打造未来教育新风尚

在21世纪的教育蓝图中,"数字化校园"正逐渐从愿景走向现实,它不仅是科技进步与教育创新深度融合的产物,更是重塑教育生态、引领未来学习风尚的关键力量。随着云计算、大数据、人工智能等前沿技术的蓬勃发展,传统的教育模…

基于RandLA-Net深度学习模型的激光点云语义分割

一、场景要素语义分割部分的文献阅读笔记 RandLA-Net是一种高效、轻量级的神经网络,其可直接逐点推理大规模点云的语义标签。RandLA-Net基于随机点采样获得了显著的计算和内存效率,并采用新的局部特征聚合模块有效地保留了几何细节,弥补了随机…

warning LNK4017: DESCRIPTION 语句不支持目标平台;已忽略

文章目录 warning LNK4017: DESCRIPTION 语句不支持目标平台;已忽略概述笔记备注END warning LNK4017: DESCRIPTION 语句不支持目标平台;已忽略 概述 基于ATL的COM DLL导出函数,无法用__declspec(dllexport)直接在函数上标记为导出函数。 只…

Linux crontabs定时执行任务

文章目录 前言一、安装二、服务1. 启动crond服务2. 关闭crond服务3. 重启crond服务4. 设置crond开机启动5. 禁用crond开机启动6. 查看crond是否开机启动7. 重新载入配置8. 查看crond运行状态 三、使用1. 查看当前用户的crontab2. 编辑用户的crontab3. 删除用户的crontab的内容 …

Linux基础命令[29]-chown

文章目录 1. chown 命令说明2. chown 命令语法3. chown 命令示例3.1 修改属主3.2 修改属组3.3 修改属主和属组3.4 修改文件夹所属 4. 总结 1. chown 命令说明 chown:更改文件的用户或用户组,需要 root 用户或 sudo 权限的用户执行该命令。基本信息如下&…

Elixir学习笔记——模块属性

Elixir 中的模块属性有三个用途: 1.作为模块和函数注释 2.作为编译期间使用的临时模块存储 3.作为编译时常量 让我们检查一下这些示例。 作为注释 Elixir 引入了 Erlang 中的模块属性概念。例如: 在上面的例子中,我们使用模块属性语法定义…