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

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

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

相关文章

深入探索Spring Boot的条件装配与条件注解

Spring Boot 的条件装配(Conditional装配)是一个强大的功能,它允许你根据特定的条件来决定哪些配置类、beans 或组件应该被加载到Spring应用上下文中。这有助于创建更灵活、更模块化的Spring Boot应用程序。 在Spring Boot中,条件…

ECharts 数据的视觉映射

ECharts 数据的视觉映射 ECharts 是一个由百度开源的,基于 JavaScript 的数据可视化库。它提供了丰富的图表类型和灵活的配置选项,使得用户能够轻松地将数据转换为直观的图表。在 ECharts 中,数据的视觉映射是一个核心功能,它允许…

关于element-plus中el-select自定义标签及样式的问题

关于element-plus中el-select自定义标签及样式的问题 我这天天的都遇到各种坑,关于自定义,我直接复制粘贴代码都实现不了,研究了一下午,骂骂咧咧了一下午,服气了。官网代码实现不了,就只能 “ 曲线救国 ”…

前端面经总结、学习【2023秋招】

目录 1、浏览器输入URL发生了什么?2、跨域是什么?如何解决跨域问题?3、cookie 是什么?4、cookie 能做什么? 1、浏览器输入URL发生了什么? URL解析:判断浏览器输入的是搜索内容还是URL&#xff…

昂科烧录器支持Prolific旺玖科技的电力监控芯片PL7413C1FIG

芯片烧录行业领导者-昂科技术近日发布最新的烧录软件更新及新增支持的芯片型号列表,其中Prolific旺玖科技的高度集成的电力监控芯片PL7413C1FIG已经被昂科的通用烧录平台AP8000所支持。 PL7413C1FIG是一款高度集成的电力监控芯片,用于测量电力使用情况的…

Mysql-题目02

下面列出的( DBMS )是数据库管理系统的简称。 A、DB(数据库) B、DBA C、DBMS(数据库管理系统) D、DBS(数据库系统) 以下选项中,( 概念模式 )面向数据库设计人员&…

MySQL-分组函数

041-分组函数 重点:所有的分组函数都是自动忽略NULL的 分组函数的执行原则:先分组,然后对每一组数据执行分组函数。如果没有分组语句group by的话,整张表的数据自成一组。 分组函数包括五个: max:最大值mi…

私人云盘(自动云同步)

一、项目简介 模仿小米的云服务,实现一个通过TCP实现的私人云盘,因为能力有限,所以只实现自动云同步这一个功能,具体可以分为三个小功能,即保持云端和终端数据一致、实现文件的上传与下载以及手动同步 二、涉及到的知…

编译器支持#pragma:深入解析与探讨

在编程世界中,编译器是不可或缺的工具,它负责将高级语言编写的源代码转换为机器语言,以便计算机能够执行。而在编译器的众多特性中,#pragma预处理指令(也称为pragmas)占据了重要的位置。本文将对编译器支持…

P4. 微服务: 匹配系统(上)

P4. 微服务: 匹配系统 上 Tips0 概述1 匹配系统流程2 游戏系统流程3 websocket 前后端通信的基础配置3.1 websocket 的需要的配置3.2 websocket 连接的建立3.3 为 websocket 连接添加 jwt 验证 4 实现匹配界面和对战界面的切换5 匹配系统的客户端和 websocket 后端交互部分5.1 …

助力知识博主,实现在家搞副业的FlowUs新策略

助力知识博主,实现在家副业的FlowUs新策略 我们设定了一个雄心勃勃的目标:帮助100位知识博主在FlowUs上实现副业成功。这个目标不仅得到了团队成员的广泛支持,甚至有人认为它过于保守,因为FlowUs的多功能性使其成为自媒体博主收入…

【电路笔记】-共集极放大器

共集极放大器 文章目录 共集极放大器1、概述2、等效电路3、电压增益4、偏置方法5、输入阻抗6、输出阻抗7、电流增益8、示例:共集电极放大器的电压、电流和功率增益9、达林顿对10、总结1、概述 本文介绍另一种用于放大信号的双极晶体管架构,通常称为共集电极放大器 (CCA)。 C…

JS读取目录下的所有图片/require动态加载图片/文字高亮

<template class"aa"><div class"demo-image__lazy container"><div class"head"><div class"left-bar"><div><span>综合</span></div><div><span>定位</span><…

东理咨询交流论坛系统

开头语&#xff1a;你好呀&#xff0c;我是计算机学长猫哥&#xff01;如果有相关需求&#xff0c;文末可以找到我的联系方式。 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;JSP技术、B/S架构 工具&#xff1a;MyEclipse 系统展示 首页 管理员功能…

C#-懒汉单例创建

文章速览 概述直上代码 坚持记录实属不易&#xff0c;希望友善多金的码友能够随手点一个赞。 共同创建氛围更加良好的开发者社区&#xff01; 谢谢~ 概述 懒汉单例的创建模式&#xff0c;需要创建的单例直接继承该类即可。 直上代码 public abstract class SingletonBase<…

C语言题目:排序问题1

题目描述 将四个整数进行从小到大的顺序排列, 输入格式 四个整数 输出格式 从小到大输出这四个数 样例输入 5 3 4 2样例输出 2 3 4 5 代码解析 1. 引入头文件 代码首先引入了stdio.h头文件&#xff0c;这是C语言标准输入输出库&#xff0c;用于处理输入输出函数。 2…

企业化运维(3)_PHP、nginx结合php-fpm、memcache、openresty、goaccess日志可视化

###1.PHP源码编译### 解压PHP压缩包&#xff0c;切入PHP目录&#xff0c;进行configure-->make-->make installd三部曲 [rootserver1 ~]# yum install -y bzip2 systemd-devel libxml2-devel sqlite-devel libpng-devel libcurl-devel ##依赖性 [rootserver1 ~]# yum…

Postman接口测试工具详解:揭秘API测试的终极利器

在现代软件开发中&#xff0c;API接口测试是确保应用程序质量和可靠性的重要环节。Postman&#xff0c;作为一款功能强大且用户友好的API测试工具&#xff0c;受到了广大开发者和测试人员的青睐。本文将详细解析Postman的功能和优势&#xff0c;带你领略这款工具的魅力。 一、…

服务器远程桌面经常连接不上,造成远程桌面连接不上的原因都有哪些

服务器远程桌面连接不稳定或经常连接不上是一个较为常见的技术问题&#xff0c;其可能的原因涉及多个层面&#xff0c;包括网络设置、服务器配置、系统安全等方面。下面将详细探讨一些可能造成远程桌面连接问题的主要原因&#xff1a; 首先&#xff0c;网络连接不稳定是导致远…

vite-plugin-mock前端自行模拟接口返回数据的插件

vite-plugin-mock前端自行模拟接口返回数据的插件 安装导入、配置&#xff08;vite.config.js&#xff09;使用目录结构/mock/user.js具体在页面请求中的使用 注意事项 中文文档&#xff1a;[https://gitcode.com/vbenjs/vite-plugin-mock/blob/main/README.zh_CN.md) 参考其他…