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

大模型中的计算精度——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的区别以及相互转换逻辑

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

调试了一下午,终于把tailwindcss搞进Blazor了

在Vue和Uniapp项目中使用tailwindcss后,实在是太香了,非常符合我这从XAML走过来的老程序员的手感,所以老想着在Blazor项目中引入。看了几个老外大佬的视频,调试了一下午,终于是捣鼓成功了。由于咱们Blazor项目不在node…

【c语言】文件操作,解开你的疑惑

文件操作 为什么使用文件什么是文件文件的分类文件名 二进制文件和文本文件文件的打开与关闭流与标准流流标准流 文件指针文件的打开与关闭 文件的顺序读写文件的随机读写文件读取结束的判定文件缓冲区 为什么使用文件 我们程序运行的数据是运行在内存中的,当成程序…

链表经典题目:环形链表问题(LeetCode141.环形链表、LeetCode142.环形链表Ⅱ)

📇文章目录 📜 LeetCode141. 环形链表🔶题目描述🔷思路分析✔️代码实现 📜 LeetCode142.环形链表Ⅱ🔶题目描述🔷思路①✔️代码实现🔷思路② 📒总结 📜 Leet…

神经网络学习2

张量(Tensor)是深度学习和科学计算中的基本数据结构,用于表示多维数组。张量可以看作是一个更广义的概念,涵盖了标量、向量、矩阵以及更高维度的数据结构。具体来说,张量的维度可以是以下几种形式: 标量&am…

RabbitMQ实践——利用一致性Hash交换器做负载均衡

大纲 开启一致性Hash交换器创建交换器创建绑定关系测试参考资料 在《RabbitMQ实践——交换器(Exchange)和绑定(Banding)》中,我们熟悉了Direct、Fanout、Topic和Header这4种系统默认支持的交换器。这些交换器基本可以满…

Django REST framework关联序列化器详解:掌握复杂关系的序列化与反序列化艺术

系列文章目录 Django入门全攻略:从零搭建你的第一个Web项目Django ORM入门指南:从概念到实践,掌握模型创建、迁移与视图操作Django ORM实战:模型字段与元选项配置,以及链式过滤与QF查询详解Django ORM深度游&#xff…

军事武器3D数字化交互展示创作平台大大降低成本

军事力量和装备是一个国家国防安全的重要支柱,这在全球范围内得到广泛认同,为了让入伍的新兵能快速熟悉和掌握武器装备操作流程,基于创新型的华锐3D云展平台工具,搭建的3D军事武器展示搭建编辑器,让部队的军事武器展示…

Golang——gRPC gateway网关

前言 etcd3 API全面升级为gRPC后,同时要提供REST API服务,维护两个版本的服务显然不大合理,所以gRPC-gateway诞生了。通过protobuf的自定义option实现了一个网关。服务端同时开启gRPC和HTTP服务,HTTP服务接收客户端请求后转换为gr…

Javaweb8 数据库Mybatis+JDBC

Mybatis Dao层,用于简化JDBC开发 1步中的实体类 int类型一般用Integer :如果用int类型 默认值为0,会影响数据的判断,用Integer默认值是null,不会给数据的判断造成干扰 2.在application .properties里配置数据库的链接信息-四要素 #驱动类名称 #URL #用…

Elasticsearch 认证模拟题 - 21

一、题目 写一个查询,要求查询 kibana_sample_data_ecommerce 索引,且 day_of_week、customer_gender、currency、type 这 4 个字段中至少两个以上。 1.1 考点 Boolean 1.2 答案 GET kibana_sample_data_ecommerce/_search {"query": {&q…

C-冒泡排序的循环条件应该怎么写

目录 一、冒泡排序的原理 二、代码实现 三、代码解读 1. 第一层循环条件怎么来的 2.第二层循环条件怎么来的 四、优化代码 我发现,好像还是有一部分同志,没有很清楚冒泡排序的两层循环条件为什么这么写? 感到有些模糊,但又可…

光照药物稳定性试验箱百科

概念与作用 - 药品稳定性试验箱:一种精密设备,用于模拟药品在不同环境条件下的存储情况。 - 环境模拟:通过控制温度、湿度等参数,复制各种实际储存条件,以测试药品稳定性。 - 保障药品质量:通过试验&…

Mybatis做批量操作

动态标签foreach,做过批量操作,但是foreach只能处理记录数不多的批量操作,数据量大了后,先不说效率,能不能成功操作都是问题,所以这里讲一讲Mybatis正确的批量操作方法: 在获取opensession对象…

conda安装pytorch使用清华源

原命令,例: # CUDA 11.3 conda install pytorch1.11.0 torchvision0.12.0 torchaudio0.11.0 cudatoolkit11.3 -c pytorch使用清华源,例: # CUDA 11.3 conda install pytorch1.11.0 torchvision0.12.0 torchaudio0.11.0 cudatool…

Win11 问题集

文章目录 一、Win11 选择其他应用打开无反应1、新建 1.reg 文件2、新建 2.reg 文件3、运行 reg 文件 二、Win11 账户怎么改名 一、Win11 选择其他应用打开无反应 Win11选择打开方式卡死怎么办? 选择打开方式没有反应的解决办法 1、新建 1.reg 文件 1.reg Windows Registry…

技术转管理,是灾难还是奇迹?

深耕技术or转战管理?this is a question! 如果你还没有想好,那请继续往下看! 技术专家:技术前瞻者、方案构建者、难题破解者、团队聚核者 管理专家:战略规划者、高效组织者、变革引领者、团队建设者 特点和重心都不在…

RN6752V1 高性能AHD转MIPIDVPBT656BT601芯片方案,目前适用于车载方案居多

RN6752V1描述: RN6752V1是一种模拟高清晰度(模拟高清)视频解码器IC,专为汽车应用而设计。它集成了所有必要的功能块: AFE,PLL,解码逻辑,MIPI和I2C接口等,在一个小的5mm …

三、网络服务协议

目录 一、FTP:文件传输协议 二、Telnet:远程登录协议 三、AAA认证 四、DHCP 五、DNS 六、PPP协议 七、ISIS协议 一、FTP:文件传输协议 C/S架构,现多用于企业内部的资料共享和网络设备的文件传输,企业内部搭建一…

windows10或者windows11怎么查看自己电脑显卡型号

win10系统: 右键单击任务栏后弹出菜单选择任务管理器 打开任务管理器后,点击性能查看左侧GPU0或者GPU1 如果有nvidia字样表示自己电脑有nvidia显卡,如果是AMD或者intel字样表示没有nvidia显卡。注意如果你有GPU0或者GPU1说明你电脑是双显卡&…

2.2 利用MyBatis实现CRUD操作

MyBatis 是一个半自动的持久层框架,它简化了数据库操作,允许开发者通过 XML 或注解的方式来配置 SQL 语句,实现数据的增删改查(CRUD)操作。 1. 环境搭建 引入依赖:在项目中添加 MyBatis 以及数据库驱动的…