Mixed-precision计算原理(FP32+FP16)

news2024/9/25 20:38:01

原文:

https://lightning.ai/pages/community/tutorial/accelerating-large-language-models-with-mixed-precision-techniques/

This approach allows for efficient training while maintaining the accuracy and stability of the neural network.

In more detail, the steps are as follows.

  1. Convert weights to FP16: In this step, the weights (or parameters) of the neural network, which are initially in FP32 format, are converted to lower-precision FP16 format. This reduces the memory footprint and allows for faster computation, as FP16 operations require less memory and can be processed more quickly by the hardware.
  2. Compute gradients: The forward and backward passes of the neural network are performed using the lower-precision FP16 weights. This step calculates the gradients (partial derivatives) of the loss function with respect to the network’s weights, which are used to update the weights during the optimization process.
  3. Convert gradients to FP32: After computing the gradients in FP16, they are converted back to the higher-precision FP32 format. This conversion is essential for maintaining numerical stability and avoiding issues such as vanishing or exploding gradients that can occur when using lower-precision arithmetic.
  4. Multiply by learning rate and update weights: Now in FP32 format, the gradients are multiplied by a learning rate (a scalar value that determines the step size during optimization).
  5. The product from step 4 is then used to update the original FP32 neural network weights. The learning rate helps control the convergence of the optimization process and is crucial for achieving good performance.

简而言之:

g * lr + w老 --> w新,这里的g、w老、w新,都是FP32的;

其余计算梯度中的w、activation、gradient等,全部都是FP16的;

训练效果:

耗时缩减为FP32的1/2 ~ 1/3

显存变化不大(因为,增加显存:weight多专一份FP16,减少显存:forward时保存的activation变成FP16了,二者基本抵消)

推理效果:

显存减少一半;耗时缩减为FP32的1/2;

使用FP16后的test accuracy反而上升,解释:(正则效应,带来噪音,帮助模型泛化得更好,减少过拟合)

A likely explanation is that this is due to regularizing effects of using a lower precision. Lower precision may introduce some level of noise in the training process, which can help the model generalize better and reduce overfitting, potentially leading to higher accuracy on the validation and test sets.

bf16,指数位增加,所以能覆盖更大的数值范围,所以能使训练过程更鲁棒,减少overflow和underflow的出现概率;

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

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

相关文章

C++第二十弹---深入理解STL中vector的使用

✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】【C详解】 目录 1、vector的介绍 2、vector的使用 2.1、构造函数和赋值重载 2.1.1、构造函数的介绍 2.1.2、代码演示 2.2、容量操作 2.3、遍历 2.4、增删…

RH850F1KM-S4-100Pin_ R7F7016453AFP MCAL PWM 配置

1、PWM组件包含的子配置项 PwmGeneralPwmDemEventParameterRefsPwmConfigurationOfOptApiServicesPwmChannelConfigSet2、PwmGeneral 2.1、PwmPowerStateConfig 2.1.1、PwmPowerState 该参数的每个实例描述PWM HW支持的不同功率状态。它应该由硬件供应商定义,并由PWMDriver用…

HoneyTrap蜜罐系统实践操作@FreeBSD

HoneyTrap介绍 HoneyTrap是一个可扩展的开源系统,用于运行、监控和管理蜜罐。 HoneyTrap蜜罐系统通过在网络中部署感应节点,实时感知周边网络环境,并将感应节点的日志进行实时存储和可视化分析,从而实现对网络环境中威胁情况的感…

BUUCTF-WEB3

[极客大挑战 2019]Knife1 1.打开附件链接 一句话木马eval($_POST["Syc"]); 2.中国蚁剑 用中国蚁剑连接 在根目录下找到一个名为flag的文件 3.得到flag [极客大挑战 2019]Upload1

STM32Cubemx HAL库 移植FreeRTOS源码

本篇文章主要是使用STM32Cubemx生成Keil工程,然后在移植FreeRTOS源码,最后测试使用。 一、FreeRTOS简介 Free 和 RTOS,Free 就是免费的、自由的、不受约束的意思,RTOS 全称是 Real Time Operating System,中文名就是实…

大数据开发面试题【Spark篇】

115、Spark的任务执行流程 driver和executor,结构式一主多从模式, driver:spark的驱动节点,用于执行spark任务中的main方法,负责实际代码的执行工作;主要负责:将代码逻辑转换为任务、在executo…

Java对象不再使用时,为什么要赋值为 null ?

在Java中,将不再使用的对象赋值为null的目的主要是为了帮助垃圾收集器(更快地释放内存。我这里有一套编程入门教程,不仅包含了详细的视频讲解,项目实战。如果你渴望学习编程,不妨点个关注,给个评论222&…

短剧平台开发中的常见误区及避坑指南,别再走弯路

1. 误区一:只注重外观,忽视技术基础 在短剧平台开发中,一个常见的误区是过于注重产品的外观设计,而忽视了技术基础的重要性。团队往往会投入大量精力和资源来打造吸引人的UI和炫酷的特效,但忽略了系统架构、性能优化和…

不能错过的AI知识学习神器「Mo卡片」

1. 「Mo卡片」——知识点的另一种承载方式 1.1 产品特点 📱一款专为渴望理解和掌握人工智能知识的小伙伴量身打造的轻量级 App。 🏷AI 知识卡片集 Mo卡片内置了 26 套卡片集,总计 1387 张卡片,每张卡片都能获得 1 个核心知识。…

领导让我调研CI/CD,我给他看了这个

一、概念解释 CI/CD是指持续集成(Continuous Integration)和持续交付/持续部署(Continuous Delivery/Continuous Deployment)的缩写,是现代软件开发中的重要实践。它们旨在通过自动化和持续化的方式改善软件开发、测试…

​你见过哪些不过度设计的优秀APP?​

优联前端https://ufrontend.com/ 提供一站式企业前端解决方案 “每日故宫”是一款以故宫博物院丰富的藏品为基础,结合日历形式展示每日精选藏品的移动应用。通过这款应用,用户可以随时随地欣赏到故宫的珍贵藏品,感受中华五千年文化的魅力。…

Solidity 教程01 Remix IDE 初次见面

访问链接地址: https://remix.ethereum.org/ 文件管理器 文件资源管理器用于管理工作区和文件。此插件还包含许多快捷方式和命令。要快速浏览,请右键单击文件以获取弹出菜单,并检查插件右上角的汉堡菜单。 要找到文件资源管理器模块 - 单…

如何用 Redis 统计海量 UV?

引言:在当今数字化时代,对于网站和应用程序的运营者而言,了解其用户的行为和习惯是至关重要的。其中,衡量页面的独立访客数量(UV)是评估网站流量和用户参与度的重要指标之一。然而,当面对海量访…

2024-BurpSuite快速配置Jython插件环境

文章目录 前言一、下载Jython二、配置Python environment 前言 很多插件需要python环境,Burpsuite本身是支持java的,Jython就是java和python的结合。 提示:以下是本篇文章正文内容,下面案例可供参考 一、下载Jython https://ww…

基于Spring+Struts2+Hibernate+MySQL的个人网上银行

## 系统概述该系统采用SpringHibernateStruts2框架搭建,实现了登录、退出功能。不同账号之间进行转账功能,查询转账记录功能,修改登录密码功能。## 使用方法* 将项目导入idea,修改hibernate.cfg.xml中的数据库用户名、密码等信息…

Go 语言简介 -- 高效、简洁与现代化编程的完美结合

在现代软件开发领域,选择合适的编程语言对于项目的成功至关重要。Go 语言(又称 Golang )自 2009 年由Google发布以来,以其简洁的语法、高效的并发模型以及强大的性能,迅速成为开发者们的新宠。Go语言不仅融合了传统编译…

水滴式粉碎机:让破碎多样化

水滴式粉碎机以其新的粉碎技术和卓越的性能,引领着粉碎技术的新革命。它采用了高速旋转技术,通过转子对物料进行撞击和摩擦,实现了对物料的精细粉碎,制备出了高品质、高附加值的产品。 水滴式粉碎机在多个行业中都有着广泛的应用…

让大模型变得更聪明:人工智能的未来发展之路

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

搞到了阿里云大佬的docker笔记,实战总结一步到位,建议收藏

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。 Docker在今天已经算是明星…

git 检查用户是否是gitlab用户

背景: 公司代码要从老的git库迁到新的git库,老git库上部分提交用户在新git库上没有,解决方法: 让gitlab不再检查提交用户是否是gitlab用户。具体操作: 去掉下面的勾选,保存配置即可。