当前位置: 首页 > news >正文

Autocasting和GradScaler

Autocasting和GradScaler是什么

  • torch.autocast 是一个上下文管理器,它可以将数据类型从 float32 自动转换为 float16。这可以提高性能,因为 float16 比 float32 更小,因此可以更快地处理。
  • torch.cuda.amp.GradScaler 是一个类,它可以自动缩放梯度,以便在使用混合精度时保持准确性。这很重要,因为使用混合精度时,梯度可能会被缩小,从而导致准确性下降。

bfloat16是什么

BFloat16 (Brain Floating Point)是一种16bit的浮点数格式,动态表达范围和float32是一样的,但是精度低。

动态表达范围是指浮点数可以表示的数值范围。

BFloat16 的精度降低是因为它使用 16 位来存储数据,而 float32 使用 32 位来存储数据。

BFloat16 的名称来自它的开发者,Google Brain。

Autocasting

Autocast 实例可以作为上下文管理器或装饰器,允许您的脚本的部分在混合精度下运行。

autocast 应该只包装您的网络的前向传递,包括损失计算。不推荐在自动转换下进行反向传递。反向操作在与相应的正向操作相同的类型下运行。

# Creates model and optimizer in default precision
model = Net().cuda()
optimizer = optim.SGD(model.parameters(), ...)for input, target in data:optimizer.zero_grad()# Enables autocasting for the forward pass (model + loss)with autocast():output = model(input)loss = loss_fn(output, target)# Exits the context manager before backward()loss.backward()optimizer.step()

在自动转换启用区域中生成的浮点张量可能为 float16

# Creates some tensors in default dtype (here assumed to be float32)
a_float32 = torch.rand((8, 8), device="cuda")
b_float32 = torch.rand((8, 8), device="cuda")
c_float32 = torch.rand((8, 8), device="cuda")
d_float32 = torch.rand((8, 8), device="cuda")with autocast():# torch.mm is on autocast's list of ops that should run in float16.# Inputs are float32, but the op runs in float16 and produces float16 output.# No manual casts are required.e_float16 = torch.mm(a_float32, b_float32)# Also handles mixed input typesf_float16 = torch.mm(d_float32, e_float16)# After exiting autocast, calls f_float16.float() to use with d_float32
g_float32 = torch.mm(d_float32, f_float16.float())

autocast(enabled=False)

# Creates some tensors in default dtype (here assumed to be float32)
a_float32 = torch.rand((8, 8), device="cuda")
b_float32 = torch.rand((8, 8), device="cuda")
c_float32 = torch.rand((8, 8), device="cuda")
d_float32 = torch.rand((8, 8), device="cuda")with autocast():e_float16 = torch.mm(a_float32, b_float32)with autocast(enabled=False):# Calls e_float16.float() to ensure float32 execution# (necessary because e_float16 was created in an autocasted region)f_float32 = torch.mm(c_float32, e_float16.float())# No manual casts are required when re-entering the autocast-enabled region.# torch.mm again runs in float16 and produces float16 output, regardless of input types.g_float16 = torch.mm(d_float32, f_float32)

GradScaler

如果特定操作的前向传递具有 float16 输入,则该操作的反向传递将生成 float16 梯度。

小幅度梯度值可能无法表示为 float16。这些值将刷新为零(“下溢”),因此相应参数的更新将丢失。

为了防止下溢,梯度缩放会将网络的损失乘以一个缩放因子,并在缩放的损失上调用反向传递。然后,通过网络流回的梯度将按相同的因子进行缩放。换句话说,梯度值具有更大的幅度,因此不会刷新为零。

在优化器更新参数之前,应先unscaled每个参数的梯度,以便缩放因子不会干扰学习率。

import torch
from torch import nn, optim# Creates model and optimizer in default precision
model = Net().cuda()
optimizer = optim.SGD(model.parameters(), ...)# Creates a gradient scale object
scale = torch.cuda.amp.GradScaler()for input, target in data:optimizer.zero_grad()# Enables autocasting for the forward pass (model + loss)with autocast():output = model(input)loss = loss_fn(output, target)# Scales the loss before backward()scale.scale(loss).backward()# Unscales the gradients after backward()scale.step(optimizer)scale.update()

相关文章:

Autocasting和GradScaler

Autocasting和GradScaler是什么 torch.autocast 是一个上下文管理器,它可以将数据类型从 float32 自动转换为 float16。这可以提高性能,因为 float16 比 float32 更小,因此可以更快地处理。torch.cuda.amp.GradScaler 是一个类,它…...

头条移动端项目Day03 —— 自媒体素材管理、自媒体文章管理、自媒体文章发布

❤ 作者主页:欢迎来到我的技术博客😎 ❀ 个人介绍:大家好,本人热衷于Java后端开发,欢迎来交流学习哦!( ̄▽ ̄)~* 🍊 如果文章对您有帮助,记得关注、点赞、收藏、…...

【ARM 嵌入式 编译系列 9-- GCC 编译符号表(Symbol Table)的详细介绍】

文章目录 什么是符号表符号表的作用是什么如何生成符号表符号表中的数据类型有哪些?符号表与map文件什么关系? 上篇文章:ARM 嵌入式 番外篇 编译系列 8 – RT-Thread 编译命令 Scons 详细讲解 什么是符号表 在 ARM GCC 中,符号表…...

Apache Doris 入门教程27:BITMAP精准去重和HLL近似去重

BITMAP 精准去重 背景​ Doris原有的Bitmap聚合函数设计比较通用,但对亿级别以上bitmap大基数的交并集计算性能较差。排查后端be的bitmap聚合函数逻辑,发现主要有两个原因。一是当bitmap基数较大时,如bitmap大小超过1g,网络/磁盘…...

bug总结

bug总是意外的出现,对于语法问题导致的bug是容易排查的,对于逻辑的bug和环境的bug往往令人头疼。在这里,将这些收集起来。、 【1-8来自对博客认输了!这些Bug让我目瞪口呆!_电脑放青藏高原共振是真的?_Truda.的博客-C…...

DC电源模块的高转换率

BOSHIDA DC电源模块的高转换率 DC电源模块是将交流电转换为直流电供应设备使用的装置,是现代工业制造和电子产品中不可或缺的组件之一。高转换率是DC电源模块最重要的性能之一,它直接影响着电源的效率、功耗和发热等方面,因此也深受设计师的关…...

用于网页抓取的最佳 Python 库

探索一系列用于网页抓取的强大 Python 库,包括用于 HTTP 请求、解析 HTML/XML 和自动浏览的库。 网络抓取已成为当今数据驱动世界中不可或缺的工具。Python 是最流行的抓取语言之一,拥有一个由强大的库和框架组成的庞大生态系统。在本文中,我…...

异步回调中axios,ajax,promise,cors详解区分

Ajax、Promise和Axios之间的关系是,它们都是用于在Web应用程序中发送异步HTTP请求的JavaScript库,但它们有不同的实现方式和用法。 Ajax是一种旧的技术,使用XMLHttpRequest对象来向服务器发送异步请求并获取响应。它通常需要手动编写回调函数…...

IoTDB原理剖析

一、介绍 IoTDB(物联网数据库)是一体化收集、存储、管理与分析物联网时序数据的软件系统。 Apache IoTDB采用轻量式架构,具有高性能和丰富的功能。 IoTDB从存储上对时间序列进行排序,索引和chunk块存储,大大的提升时序…...

中国1990-2021连续30年土地利用数据CLCD介绍及下载

CLCD数据介绍 CLCD(China Land Cover Dataset)数据集由武汉大学黄昕老师公布,黄昕老师基于Google Earth Engine上335,709景Landsat数据,制作中国年度土地覆盖数据集(annual China Land Cover Dataset, CLCD),包含1985+1990—2020中国逐年土地覆盖信息。 为此,黄昕老师…...

Tubi 前端测试:迁移 Enzyme 到 React Testing Library

前端技术发展迅速,即便不说是日新月异,每年也都推出新框架和新技术。Tubi 的产品前端代码仓库始建于 2015 年,至今 8 年有余。可喜的是,多年来紧随 React 社区的发展,Tubi 绝大多数的基础框架选型都遵循了社区流行的最…...

Chrome

Chrome 简介下载 简介 Chrome 是由 Google 开发的一款流行的网络浏览器。它以其快速的性能、强大的功能和用户友好的界面而闻名,并且在全球范围内被广泛使用。Chrome 支持多种操作系统,包括 Windows、macOS、Linux 和移动平台。 Chrome官网: https://ww…...

零代码编程:用ChatGPT批量删除Excel文件中的行

文件夹中有上百个Excel文件,每个文件中都有如下所示的两行,要进行批量删除。 在ChatGPT中输入提示词: 你是一个Python编程专家,要完成一个处理Excel文件内容的任务,具体步骤如下: 打开F盘的文件夹&#x…...

GaussDB数据库SQL系列-UNION UNION ALL

目录 一、前言 二、GaussDB UNION/UNION ALL 1、GaussDB UNION 操作符 2、语法定义 三、GaussDB实验示例 1、创建实验表 2、合并且除重(UNION) 3、合并不除重(UNION ALL) 4、合并带有WHERE子句SQL结果集(UNION ALL) 5、…...

Azure创建第一个虚拟机

首先,登录到 Azure 门户 (https://portal.azure.com/)。在 Azure 门户右上角,点击“虚拟机”按钮,并点击创建,创建Azure虚拟机。 在虚拟机创建页面中,选择所需的基本配置,包括虚拟机名称、操作系统类型和版…...

Redis 之 缓存预热 缓存雪崩 缓存击穿 缓存穿透

目录 一、缓存预热 1.1 缓存预热是什么? 1.2 解决方案: 二、缓存雪崩 2.1 缓存雪崩是什么?怎么发生的? 2.2 怎么解决 三、缓存穿透 3.1 是什么?怎么产生的呢? 3.2 解决方案 3.2.1、采用回写增强&a…...

Golang 程序性能优化利器 PGO 详解(二):收集样本数据和编译

在软件开发过程中,性能优化是不可或缺的一部分。无论是在Web服务、数据处理系统还是实时通信中,良好的性能都是至关重要的。Golang 从1.20版版本开始引入的 Profile Guided Optimization(PGO)机制能够帮助更好地优化 Go 程序的性能…...

《格斗之王AI》使用指南

目录 一、说明 二、步骤 1. 下载 2.配置环境 3.替换 4.测试 5.训练 一、说明 该项目是 针对B站UP主 林亦LYi 的作品 格斗之王!AI写出来的AI竟然这么强!的使用指南,目的是在帮助更多小白轻松入门,一起感受AI的魅力。 林亦LYi…...

创新引领城市进化:人工智能和大数据塑造智慧城市新面貌

人工智能和大数据等前沿技术正以惊人的速度融入智慧城市的方方面面,为城市的发展注入了强大的智慧和活力。这些技术的应用不仅令城市管理更高效、居民生活更便捷,还为可持续发展和创新奠定了坚实的基础。 在智慧城市中,人工智能技术正成为城市…...

iOS开发-处理UIControl触摸事件TrackingWithEvent

IOS BUG记录 之 处理UIControl的点击事件。 UIControl的触摸事件的方法是beginTrackingWithTouch:withEvent:,continueTrackingWithTouch:withEvent:,endTrackingWithTouch:withEvent:,cancelTrackingWithEvent: ##下面简单的介绍一下 beg…...

Ultimate ASI Loader终极指南:如何为任何Windows游戏注入无限创意

Ultimate ASI Loader终极指南:如何为任何Windows游戏注入无限创意 【免费下载链接】Ultimate-ASI-Loader The Ultimate ASI Loader is a proxy DLL that loads custom .asi libraries into any game process. 项目地址: https://gitcode.com/gh_mirrors/ul/Ultima…...

8大网盘直链下载助手技术解析:JavaScript驱动的下载体验革新

8大网盘直链下载助手技术解析:JavaScript驱动的下载体验革新 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 …...

大模型位置编码进化史:从Sinusoidal到RoPE的5个关键突破

大模型位置编码进化史:从Sinusoidal到RoPE的5个关键突破 在自然语言处理领域,位置编码技术如同给模型装上了"空间感知"系统,让原本对序列顺序"视而不见"的Transformer架构获得了理解词序关系的能力。本文将带您深入探索这…...

工业五官:11 老鸟血泪Tips + 新手避坑清单

11 老鸟血泪Tips + 新手避坑清单 卷一“工业生命的诞生——从大脑到五官”第三篇终于来了!工业五官——传感器的超级感知世界!PLC是大脑,机器人是舞伴,伺服是肌肉,那这些传感器就是“眼睛、耳朵、鼻子、手”啊!没它们,机器就是瞎子聋子,啤酒瓶来了也不知道推,哈哈。以…...

动手学深度学习——锚框(带代码详解)

1. 前言在前面的内容中,我们已经知道:物体检测不仅要识别“是什么”,还要定位“在哪里”边界框用于表示目标位置数据集中的标签需要同时包含类别和边界框信息但新的问题马上就出现了:一张图片中目标的位置、大小、形状都不固定&am…...

Granite TimeSeries FlowState R1 在JavaScript前端的数据可视化应用

Granite TimeSeries FlowState R1 在JavaScript前端的数据可视化应用 1. 引言 如果你正在开发一个需要预测未来趋势的业务系统,比如销量预测、服务器负载监控或者用户增长分析,那么你很可能遇到过这样的问题:后端模型预测得挺准&#xff0c…...

麦橘超然Flux图像生成控制台:从环境准备到生成测试的完整流程

麦橘超然Flux图像生成控制台:从环境准备到生成测试的完整流程 1. 引言 1.1 项目概述 麦橘超然Flux图像生成控制台是一款基于DiffSynth-Studio框架构建的AI绘画工具,集成了majicflus_v1模型,通过float8量化技术显著降低了显存需求。这个解决…...

软件测试面试宝典:Phi-4-mini-reasoning模拟面试官与测试用例设计

软件测试面试宝典:Phi-4-mini-reasoning模拟面试官与测试用例设计 1. 为什么需要AI模拟面试官 面试是每个软件测试工程师职业生涯中必须面对的挑战。传统准备方式往往面临几个痛点:找不到合适的练习伙伴、问题类型单一、无法获得即时反馈。而AI模拟面试…...

不要让接口过早失去可选项蔷

这&#xff0c;是一个采用C精灵库编写的程序&#xff0c;它画了一幅漂亮的图形&#xff1a; 复制代码 #include "sprites.h" //包含C精灵库 Sprite turtle; //建立角色叫turtle void draw(int d){for(int i0;i<5;i)turtle.fd(d).left(72); } int main(){ …...

DeOldify图像上色服务案例展示:黑白照片秒变彩色艺术照

DeOldify图像上色服务案例展示&#xff1a;黑白照片秒变彩色艺术照 1. 惊艳效果展示 想象一下&#xff0c;当你翻开泛黄的老相册&#xff0c;那些黑白照片里的场景突然变得鲜活起来——蓝天白云、红砖绿瓦、色彩鲜艳的服饰&#xff0c;仿佛穿越时空回到了那个年代。这就是DeO…...