使用AMP和Tensor Cores得到更快速,更节省内存的PyTorch模型

NVIDIA Tesla GPU系列P40参数性能——不支持半精度(FP16)模型训练 Tesla GPU系列P40不支持半精度(FP16)模型训练。因为它没有Tensor core。 训练bert非常慢,想要加速,了解到半精度混合训练,能提速一倍,研究了下混合精度,以及其对设备的要求。发现当前设备不能使用半精度混合训练。 NVIDIA Tesla系列GPU适用于高性能计算(HPC)、深度学习等超大规模数据计算,Tesla系列GPU能够处理解析PB级的数据,速度比使用传统CPU快几个数量级,NVIDIA Tesla GPU系列P4、T4、P40以及V100是Tesla GPU系列的明. 阅读详情

点击上方“AI派”,关注公众号,选择加“星标“或“置顶”

导读

只需要添加几行代码,就可以得到更快速,更省显存的PyTorch模型。

你知道吗,在1986年Geoffrey Hinton就在Nature论文中给出了反向传播算法?

此外,卷积网络最早是由Yann le cun在1998年提出的,用于数字分类,他使用了一个卷积层。但是直到2012年晚些时候,Alexnet才通过使用多个卷积层来实现最先进的imagenet。

那么,是什么让他们现在如此出名,而不是之前呢?

只有在我们拥有大量计算资源的情况下,我们才能够在最近的过去试验和充分利用深度学习的潜力。

但是,我们是否已经足够好地使用了我们的计算资源呢?我们能做得更好吗?

这篇文章的主要内容是关于如何利用Tensor Cores和自动混合精度更快地训练深度学习网络。

什么是Tensor Cores?

根据NVIDIA的网站:

NVIDIA Turing和Volta GPUs都是由Tensor Cores驱动的,这是一项革命性的技术,提供了突破性的AI性能。Tensor Cores可以加速AI核心的大矩阵运算,在一次运算中就可以完成混合精度的矩阵乘法和累加运算。在一个NVIDIA GPU上有数百个Tensor Cores并行运行,这大大提高了吞吐量和效率。

简单地说,它们是专门的cores,非常适合特定类型的矩阵操作。

我们可以将两个FP16矩阵相乘,并将其添加到一个FP16/FP32矩阵中,从而得到一个FP16/FP32矩阵。Tensor cores支持混合精度数学,即以半精度(FP16)进行输入,以全精度(FP32)进行输出。上述类型的操作对许多深度学习任务具有内在价值,而Tensor cores为这种操作提供了专门的硬件。

现在,使用FP16和FP32主要有两个好处。

  1. FP16需要更少的内存,因此更容易训练和部署大型神经网络。它还只需要较少的数据移动。

  2. 数学运算在降低精度的Tensor cores运行得更快。NVIDIA给出的Volta GPU的确切数字是:FP16的125 TFlops vs FP32的15.7 TFlops(8倍加速)。

但也有缺点。当我们从FP32转到FP16时,我们需要降低精度。

FP32 vs FP16: FP32 有8个指数位和23个分数位,而FP16有5个指数位和10个分数位。

但是FP32真的有必要吗?

实际上,FP16可以很好地表示大多数权重和梯度。所以存储和使用FP32是很浪费的。

那么,我们如何使用Tensor Cores?

我检查了一下我的Titan RTX GPU有576个tensor cores和4608个NVIDIA CUDA核心。但是我如何使用这些tensor cores呢?

坦白地说,NVIDIA用几行代码就能提供自动混合精度,因此使用tensor cores很简单。我们需要在代码中做两件事:

  1. 需要用到FP32的运算比如Softmax之类的就分配用FP32,而Conv之类的操作可以用FP16的则被自动分配用FP16。

  1. 使用损失缩放 为了保留小的梯度值。梯度值可能落在FP16的范围之外。在这种情况下,梯度值被缩放,使它们落在FP16范围内。

如果你还不了解背景细节也没关系,代码实现相对简单。

使用PyTorch进行混合精度训练:

让我们从PyTorch中的一个基本网络开始。

N, D_in, D_out = 64, 1024, 512
x = torch.randn(N, D_in, device="cuda")
y = torch.randn(N, D_out, device="cuda")
model = torch.nn.Linear(D_in, D_out).cuda()
optimizer = torch.optim.SGD(model.parameters(), lr=1e-3)

for to in range(500):
   y_pred = model(x)
   loss = torch.nn.functional.mse_loss(y_pred, y)
   optimizer.zero_grad()
   loss.backward()
   optimizer.step()

为了充分利用自动混合精度训练的优势,我们首先需要安装apex库。只需在终端中运行以下命令。

$ git clone https://github.com/NVIDIA/apex
$ cd apex
$ pip install -v --no-cache-dir --global-option="--cpp_ext" --global-option="--cuda_ext" ./

然后,我们只需向神经网络代码中添加几行代码,就可以利用自动混合精度(AMP)。

from apex import amp
N, D_in, D_out = 64, 1024, 512
x = torch.randn(N, D_in, device="cuda")
y = torch.randn(N, D_out, device="cuda")
model = torch.nn.Linear(D_in, D_out).cuda()
optimizer = torch.optim.SGD(model.parameters(), lr=1e-3)
model, optimizer = amp.initialize(model, optimizer, opt_level="O1")
for to in range(500):
   y_pred = model(x)
   loss = torch.nn.functional.mse_loss(y_pred, y)
   optimizer.zero_grad()
   with amp.scale_loss(loss, optimizer) as scaled_loss:
      scaled_loss.backward()
   optimizer.step()

在这里你可以看到我们用amp.initialize初始化了我们的模型。我们还使用amp.scale_loss来指定损失缩放。

基准测试

我们可以通过使用这个git仓库:https://github.com/znxlwm/pytoring-apex-experiment来对amp的性能进行基准测试,它在CIFAR数据集上对VGG16模型进行基准测试。我只需要修改几行代码就可以了。你可以在这里找到修改后的版本:https://github.com/MLWhiz/data_science_blogs/tree/master/amp。要运行自己的基准代码,你需要:

git clone https://github.com/MLWhiz/data_science_blogs

cd data_science_blogs/amp/pytorch-apex-experiment/

python run_benchmark.py

python make_plot.py --GPU 'RTX' --method 'FP32' 'FP16' 'amp' --batch 128 256 512 1024 2048

这会在home目录中生成下面的图:

在这里,我使用不同的精度和批大小设置训练了同一个模型的多个实例。我们可以看到,从FP32到amp,内存需求减少,而精度保持大致相同。时间也会减少,但不会减少那么多。这可能是由于数据集或模型太简单。

根据NVIDIA给出的基准测试,AMP比标准的FP32快3倍左右,如下图所示。

在单精度和自动混合精度两种精度下,加速比为固定周期训练的时间比。

—END—

文末福利

各位猿们,还在为记不住API发愁吗,哈哈哈,最近发现了国外大师整理了一份Python代码速查表和Pycharm快捷键sheet,火爆国外,这里分享给大家。

这个是一份Python代码速查表

下面的宝藏图片是2张(windows && Mac)高清的PyCharm快捷键一览图

怎样获取呢?可以添加我们的AI派团队的程序媛姐姐

一定要备注【高清图】哦

????????????????????

➕我们的程序媛小姐姐微信要记得备注【高清图】哦

“深度解析GPU Tensor Cores:原理、特性与应用实例“ 仅测试用,如果你是真人点赞收藏 辛苦评论一下,最近笔记赞藏多的吓人,感觉像机器人,此处做个调研 阅读详情

相关推荐

Tensor core原理

Tensor core是nvidia底层执行运算的硬件单元,不同于nvidia以往的cuda core(全浮点型),Tensor core是近几年推出来的、混合精度的、将累加和累乘放在一起的计算硬件;混合精度指的是在输入、输出的时候使用FP16,计算的时候使用FP32;在GPU编程中,"kernel"一词有特定的含义,与计算机操作系统中的内核不同。在GPU编程中,"kernel"是指在并行计算中由多个线程同时执行的函数。它是在GPU上执行的并行计算任务的入口点。

weixin_39326879的博客 1万+

pytorch 高精度编程:自动混合精度(AMP)+Pytorch有什么节省显存

torch.nn.utils.clip_grad_norm(model.parameters(),1.) [自动铸造 梯度缩放 自动投射操作参考 操作资格 特定于操作的行为 可自动投射到浮动状态的操作16 可自动投射到浮动状态的操作32 提升到最宽输入类型的操作 更喜欢binary_cross_entropy_with_logits而不是binary_cross_entropy](https://pytorch.org/docs/stable/amp.html?highlight=clip_grad_no

ResumeProject的博客 1024

深度学习显存优化实战:从OOM诊断到PyTorch/TensorFlow高效内存管理

在深度学习与高性能计算中,GPU显存管理是核心工程挑战。显存作为存储模型参数、梯度与中间激活值的关键硬件资源,其分配机制直接影响训练稳定性与效率。理解显存消耗原理(如参数存储、梯度累积、激活值保留)是优化基础,而混合精度训练等技术通过降低数值精度显著减少内存占用。工程实践中,通过梯度累积技术可在有限显存下模拟大批次训练效果,结合激活检查点策略以计算时间换取显存空间。这些方法在大型模型训练、高分辨率图像处理等场景具有重要价值,为解决显存不足问题提供了系统性方案。

weixin_34032621的博客 495

pytorch 绘制多个算法loss_使用AMP和Tensor Cores得到更快速,更节省内存的PyTorch模型...

点击上方“AI派”,关注公众号,选择加“星标“或“置顶”导读只需要添加几行代码,就可以得到更快速,更省显存的PyTorch模型。你知道吗,在1986年Geoffrey Hinton就在Nature论文中给出了反向传播算法?此外,卷积网络最早是由Yann le cun在1998年提出的,用于数字分类,他使用了一个卷积层。但是直到2012年晚些时候,Alexnet才通过使用多个卷积层来实现最...

weixin_30698721的博客 375

PyTorch深度学习实战:从环境搭建到模型训练的全流程避坑指南

深度学习框架是构建和训练神经网络模型的核心工具,其核心原理在于通过计算图实现自动微分,从而高效地进行梯度下降优化。这一技术价值在于极大地简化了复杂模型的开发流程,使得研究人员和工程师能够专注于模型设计而非底层数学实现。在计算机视觉、自然语言处理等应用场景中,框架的稳定性和性能直接影响项目成败。本文聚焦于PyTorch这一主流框架,深入探讨其在实际工程中的关键实践。通过分析**环境搭建**中CUDA版本、Conda环境管理的兼容性问题,以及**模型训练**过程中梯度管理、设备间数据传输等核心环节,揭示了从“能

congjukun0600的博客 410

【Clickhouse从入门到精通】第51篇:ClickHouse权限管理体系详解

摘要 本文是ClickHouse权限管理系列文章的第51篇,重点解析ClickHouse RBAC权限体系中的GRANT/REVOKE机制。文章详细介绍了GRANT语句的基础语法与权限类型,包括SELECT、INSERT等常规权限以及WITH GRANT OPTION转授权功能。特别深入讲解了列级权限的实现方式,通过SELECT(col1,col2)语法实现字段粒度的访问控制,并展示了权限查询与验证方法。本文还对比了ClickHouse 20.4版本前后权限管理体系的差异,为构建安全的多租户数据平台提供了关

xyghehehehe的专栏 442

pycharm运行模型时怎么设置权重?_使用AMP和Tensor Cores得到更快速,更节省内存的PyTorch模型...

点击上方“AI派”,关注公众号,选择加“星标“或“置顶”导读只需要添加几行代码,就可以得到更快速,更省显存的PyTorch模型。你知道吗,在1986年Geoffrey Hinton就在Nature论文中给出了反向传播算法?此外,卷积网络最早是由Yann le cun在1998年提出的,用于数字分类,他使用了一个卷积层。但是直到2012年晚些时候,Alexnet才通过使用多个卷积层来实现最...

weixin_39928461的博客 282

五分钟搞懂游戏开发中的抗锯齿算法

常见抗锯齿算法总结锯齿由来抗锯齿算法SSAAMSAACSAA 锯齿由来 场景的定义在三维空间中是连续的,而最终显示的像素则是一个离散的二维数组,这是计算机屏幕产生锯齿的原因。在计算机处理图形的过程中(渲染管线了解一下),有一个非常重要的阶段,就是光栅化,光栅化主要的作用是将顶点数据的不连续性通过插值计算,将两个顶点之间不存在的点进行弥补,然后实现到屏幕像素点上的一一映射。如图,现在要在屏幕上绘制一...

绿洲守望者 1万+

PyTorch自动混合精度训练加速深度学习模型并节省显存的全攻略

混合精度训练的核心思想是,在保持模型准确性的前提下,将训练过程中对精度不敏感的部分使用FP16,而对精度敏感的部分保留为FP32,从而实现性能的提升。其次,选择合适的梯度缩放因子至关重要。PyTorch的`GradScaler`会动态调整缩放因子,但如果训练过程中出现梯度爆炸(表现为损失变为NaN),可能需要调整`GradScaler`的初始化参数,如`growth_interval`(增长间隔)和`backoff_factor`(退避因子)。同时,在验证集上评估模型的性能,确认精度没有因精度转换而下降。

liuqichao_717的博客 732

直升机空气动力学基础--005翼型的升阻比和气动力矩

焦点与翼型有关,总升力矩可以视为附加升力与零升力迎角升力的合成,对于对称翼型,零升力力矩为0,附加升力就是总升力,其焦点就是其压力中心。对于对称翼型,零升力力矩为0,对于非对称翼型,零升力力矩存在,与不对称度成正比。对于不对称翼型,升力对焦点的力矩保持不变。

ygf666的博客 4134

WIN下使用visual studio 2022安装GMSSL命令行工具

2.1 使用管理员权限打开visual studio(非常重要,否则最后一步 nmake install会失败)右键vs2022,以管理员身份运行即可。2.4 配置环境变量,gmssl可执行程序默认会被安装到如下目录。将如下路径添加到系统环境变量即可。添加后的环境变量如下。2.编译解压后的gmssl源码,编译过程主要参考install.md中的内容,README.md中的步骤不完整。2.2 打开vs2022的命令终端,右键文件,选择在终端中打开。1.下载gmssl源码,解压到相应目录。

qq_45794382的博客 1270

PyTorch训练加速实战:GradScaler与AMP混合精度配置全解析(附代码)

本文深入解析了PyTorch中GradScaler与AMP混合精度训练的实战配置,旨在实现高效的训练加速。通过详细阐述AMP自动类型转换与GradScaler梯度缩放的协同工作原理,提供从环境检查、核心代码模板到高级调优的完整指南,帮助开发者稳定提升模型训练速度并降低GPU内存占用。

5b6n7m8的博客 394

手把手教你用UC3844设计多路输出反激电源(附PCB布局避坑指南)

本文详细介绍了使用UC3844设计多路输出反激电源的实战技巧,包括核心电路设计、变压器参数计算、PCB布局优化及EMI抑制方法。通过实验室实测数据和项目经验,帮助工程师避开常见设计陷阱,提升电源性能和可靠性。特别附赠PCB布局避坑指南,助力高效完成开关电源设计。

weixin_30300225的博客 570

PyTorch 2.6如何节省显存?混合精度训练优化案例

本文介绍了如何在星图GPU平台上自动化部署PyTorch 2.6镜像,并利用其内置的混合精度训练功能优化深度学习任务。通过该技术,用户可在训练图像分类等模型时显著节省显存并提升速度,有效解决显存瓶颈问题,从而能够运行更大模型或使用更大批次数据。

weixin_31163455的博客 891

《21天学通C++》阶段性成果测试题——hstring(手写string类)

总体考察了类的使用,缓冲区考察了指针和数组的使用、增删改查、考察编码思维、考察了类的重载。1.初始化子字符串的起始位置为-1,表示未找到,若buffer或findHstring为空,则返回-1。右边的字符串不为空,则分别获取母串和子串的长度(用循环),然后创建一个固定大小的数组。3.然后循环遍历寻找子串在母串中的起始位置,循环时可以通过两个长度相减,避免循环越界。2.如都不为空,则分别获取双方的字符串长度(用循环),然后。右边的字符串为空,则输出原来的字符串。是否为空,有一方为空则返回另一方。

立志成为炼丹师? 1265

【Unity的HDRP渲染管线下用Steam VR串流结合使用遇到的各种问题_SteamVR 插件和Pico串流助手】

当你启用"Mock Runtime"选项后,Unity将模拟一个虚拟的OpenXR运行时环境,并提供一些虚拟的设备和功能,让你能够进行开发和调试。在Unity中,SteamVR插件是一个由Valve提供的Unity插件,它允许开发者在Unity项目中集成SteamVR功能,以便支持SteamVR设备。OpenXR是一个跨平台的虚拟和增强现实(VR/AR)开发接口,它为开发者提供了一个统一的接口,用于访问不同VR/AR硬件设备和平台的功能。这个选项是用于模拟OpenXR运行时环境的功能。

暴走约伯的博客 2800

PyTorch 2.8混合精度训练:节省显存部署教程

本文介绍了如何在星图GPU平台上自动化部署PyTorch 2.8镜像,并利用其内置的混合精度训练功能,高效进行深度学习模型训练。该技术能显著节省显存并加速计算,典型应用于图像分类等任务,帮助开发者在资源有限的情况下训练更大模型或使用更大批次数据。

weixin_33557333的博客 439

Navicat从入门到精通:数据库管理全攻略

本文系统梳理Navicat数据库管理工具的核心应用体系。从基础的安装与多类型数据库连接入手,详解数据库与数据表的创建、修改、删除等操作逻辑;深入数据增删改查的可视化与 SQL 语句双重操作模式,结合Excel/SQL文件的导入导出场景提供实操指南。同时覆盖数据备份恢复、跨库同步等进阶功能,以及视图、存储过程等高级应用。通过对比同类工具突出Navicat的易用性与功能性优势,并针对连接失败、字符乱码等常见问题提供解决方案,帮助读者从零基础掌握数据库全生命周期管理,提升数据操作效率与安全性。

邓邓子的博客 1897

PyTorch混合精度训练开启:Miniconda配置

通过Miniconda实现Python环境隔离,结合PyTorch的自动混合精度训练,有效解决依赖冲突、显存不足与训练慢的问题。利用Conda管理CUDA等底层依赖,导出可复现环境,再以AMP加速模型训练,显著提升深度学习开发效率与稳定性。

weixin_35794316的博客 417

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

PyTorch CUDA GPU加速:从环境配置到性能优化的完整指南

GPU并行计算是现代深度学习的核心技术基础,它通过将大规模矩阵运算分解为数千个并行任务,利用GPU的数千个计算核心同时处理,实现了数十倍至数百倍的计算速度提升。这一技术原理源于CUDA并行计算架构,它允许开发者直接调用GPU硬件能力进行通用计算。在深度学习领域,GPU加速不仅解决了大规模模型训练的计算瓶颈,还使得处理海量数据、训练复杂神经网络成为可能。特别是在处理计算机视觉、自然语言处理等需要大量矩阵运算的应用场景时,GPU的并行优势尤为明显。本文聚焦PyTorch框架下的CUDA环境配置与优化实践,深入讲

angou6476的博客 322

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

PyTorch模型训练实战:从数据准备到部署优化的全流程指南

深度学习模型训练是机器学习领域的核心实践,其本质是通过优化算法调整模型参数以最小化预测误差。这一过程涉及前向传播、反向传播和梯度下降等基本原理,旨在使模型从数据中学习有效特征表示。在工程实践中,高效的数据加载与预处理、合理的模型架构选择以及稳定的训练循环设计是实现模型性能的关键。PyTorch作为主流深度学习框架,通过Dataset、DataLoader和自动微分机制,为构建健壮的训练流程提供了强大支持。特别是在计算机视觉和自然语言处理等应用场景中,掌握数据增强、学习率调度和混合精度训练等技巧,能显著提升训

weixin_33884611的博客 451

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

YOLO26训练加速:混合精度使用教程

本文介绍了基于星图GPU平台自动化部署最新 YOLO26 官方版训练与推理镜像的完整流程,涵盖环境配置、模型训练与推理操作。该镜像支持混合精度训练,可显著提升训练速度并降低显存占用,适用于目标检测、模型微调等AI应用开发场景,助力高效实现YOLO26的工程化落地。

weixin_34535286的博客 316

从GPU编程到AI训练优化:揭秘高性能计算与大模型效率提升

GPU编程与高性能计算(HPC)是支撑现代人工智能发展的核心技术基础。其原理在于利用GPU的并行计算架构,将海量计算任务分解为成千上万个线程同时执行,从而突破传统CPU的算力瓶颈。这一技术价值在于极大提升了深度学习模型训练与推理的效率,尤其在处理矩阵乘法、卷积等统一计算模式时,性能提升可达数十倍。应用场景广泛覆盖科学计算、图像渲染以及当前热门的AI大模型训练。随着大模型参数规模跃升至万亿级别,对计算效率和硬件优化的需求变得空前迫切,这使得底层GPU编程与CUDA优化成为决定AI项目成败的关键。本文以PyTo

weixin_33827731的博客 391

AI如何利用张量加速深度学习模型训练

在深度学习领域,张量(Tensor)作为核心数据结构,对模型训练效率起着决定性作用。本文将结合具体实践,分享如何通过张量运算显著提升训练速度,并利用PyTorch框架和现代硬件加速能力实现高效开发。实践时,其内置的Kimi-K2模型能快速生成优化后的张量运算代码,实时预览功能让调试过程非常直观。- 张量核心优化技术(Tensor Cores)可进一步提升30%吞吐量。混合精度训练(AMP)通过FP16张量减少显存占用,速度提升可达2倍。- 探索分布式张量计算的优化策略。- 及时释放不再使用的张量引用。

BlackironLynx23的博客 859

CPU与GPU分工解析:从架构原理到AI部署实战

在计算机体系结构中,CPU和GPU的分工协作是提升计算性能的核心机制。CPU作为中央处理器,擅长处理复杂逻辑和低延迟任务,其设计侧重于指令级并行和多核协同。GPU则专为高吞吐量数据并行计算而生,采用SIMT架构,能同时调度成千上万个线程执行相同操作。这种分工在异构计算中体现巨大技术价值,CPU负责任务调度、数据预处理等控制密集型工作,而GPU专注于矩阵运算、图形渲染等计算密集型任务。在AI推理、科学计算等应用场景中,合理利用CPU与GPU的协同能显著提升系统效率。本文结合CUDA编程、PyTorch部署等实

weixin_30607029的博客 464
上一篇: 图解超经典的KNN算法 - 机器学习算法入门
下一篇: 用一个实战项目快速入门VUE3.0!
Wang_AI
博客等级 码龄12年 996粉丝 162原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值