混合精度训练说明

【NLP】使用混合精度技术加速大型语言模型 由于大型语言模型 (LLM) 的计算要求和内存占用量大,因此训练和使用它们的成本很高。本文将探讨如何利用低精度格式将训练和推理速度提高 3 倍,同时不影响模型精度。尽管我们主要关注大型语言模型示例,但这些技术中的大多数都是通用的,也适用于其他深度学习架构。 阅读详情

什么是混合精度训练?混合精度训练有什么用?
这里总结一下。
本文总结自kapathy的build gpt2

通常在训练过程中,model里面的数据默认都是torch.float32类型,
也就是用32bit的float型数据表示变量。
比如特征提取中提取的特征,描述子,网络的参数等,显示是torch.float32.

32bit的float带来的影响是比如拿它和int8比,占用内存会比较多,计算量会比较大。
所以训练时也就会比较慢,我们可以考虑丢弃一些精度来达到性能的提升。

看一下GPU支持的类型,比如nv a100吧,

在这里插入图片描述
可以看到实际上GPU是支持到float64的,但实际上模型训练时不需要那么高的精度,也会导致训练速度变慢,所以默认一般是float32.

精度下调的性能提升

float32最大可达到19.5TFLOPS,意味着可达到每秒19.5 trillion次float操作。
那么如果我们降低一些精度,比如降到TF32(见上图),每秒就可以达到156TFLOPS的性能,差不多达到了8倍性能提升。
如果进一步降低精度,到BFLOAT16, 就可以达到16倍性能提升。
注:右边*的性能指的是用稀疏化。

int8一般用于推理而不是训练。因为int8是均匀的空间,而训练时activation, weight都是正态分布的, 训练时要用float。

另一方面, 精度降低之后占的内存少,易于搬运,这涉及到memory bandwidth和模型的memory. 可以参考图中的GPU memory bandwidth.
解释一下memory bandwidth, 一般情况下data需要搬到GPU上然后运算,运算完再搬回去(涉及到GPU内存),但是受限于这个bandwidth, 明明有多余算力,但是data还没搬进来,就需要等,导致利用度不够高。然而如果你降低了精度,数据占的内存就会变小,一次就可以搬运更多,那么每次参与计算的就会更多,在这个搬运上也会提升性能。

小结一下,适当降低精度会让计算量减少从而提升性能,另一方面,会让数据占的内存减少,每次搬运的数据更多,从而在有限的memory bandwidth上达到性能提升。

图上有个名词叫tensor core, 现在介绍一下什么是tensor core.
它是a100中的一个instruction, 它做的事情是4x4的矩阵乘法。
在这里插入图片描述

矩阵的乘法会broke up成这些4x4的矩阵乘。
比如在transformer中很多linear layer就需要矩阵乘法,特别是最后一层的classify layer是一个大矩阵乘。
矩阵乘就通过tensor core来加速。

不同精度的数据

TF32
在这里插入图片描述
通过这个图可以看到TF32和FP32表示的范围是一样的,最左边的sign是符号位,中间8位range表示数字可表达的范围,它们是一样的,区别就是TF32舍弃了一些小数点位。整个只有19bit, 而不是32bit。
这些是在硬件上完成的,pytorch代码上是不可见的。

为什么叫混合精度呢,是因为你的input还是fp32, output还是fp32, 但是在内部计算上,后面的bit被舍弃了,为提升性能降低了一些精度。所以结果会类似是一个近似结果,但你会几乎看不出差别。
虽然说明书上写的用TF32会有8x性能提升,但实际上那只是矩阵乘的时候用了TF32, 其他部分仍然是FP32, 另外还受限于memory bandwidth, 所以实际上大概率是达不到的。

但是注意一点,这是a100支持的TF32,有的GPU可能不支持。

说了这么多,到底怎么用TF32训练呢。
只需要一行code. 用到了torch.set_float32_matmul_precision, 有兴趣的可以查看官方文档。它有一些参数,“highest”, ”high“,”medium“等, 其中"high"就是TF32. 默认是"highest", 也就是float32.

torch.set_float32_matmul_precision('high')

#model = GPT(..)
#model.to(device)
#training process

BFLOAT16
每个float只有16bit.
它和FP16有什么区别呢,还是看上面的图,它的range和float32是一样的,比FP16表示的范围要宽,只不过精度进一步被cut.
另外当你用FP16训练时,由于它表示的范围比FP32要小,所以你还要做gradient scaling操作。用BF16不需要做gradient scaling.

具体怎么用BF16呢,你可以参考torch.autocast, 但你不需要考虑gradient scaling的部分。
官方文档上有说,autocasting时,不要在model或input处call half() or bfloat16()。
你只能在forward和计算loss处用BF16.
具体如下, 只需要加一句torch.autocast:

model = GPT(..)
model.to(device)

optimizer = torch.optim.AdamW(model.parameters(), lr=3e-4)
for i in range(iterations):
     x, y = train_loader.next_batch()
     x, y = x.to(device), y.to(device)
     optimizer.zero_grad()
     #用BF16
     with torch.autocast(device_type=device, dtype=torch.bfloat16):
         logits, loss = model(x, y)
     loss.backward()
     optimizer.step()

但是你看transformer里面的embedding table的weight, 仍然是float32, 具体哪些模块能cast到BF16,你可以参考官方文档里面的CUDA Ops that can autocast to float16. 需要矩阵乘的时候会cast, 很多操作仍然会保持float32不变,比如norm。

深入探究PyTorch自动混合精度训练(Amp) 摘要:混合精度训练技术通过在关键运算中保留32位精度、其他操作使用16位精度,有效提升深度学习模型的训练效率并降低内存占用。PyTorch通过Apex库的Amp功能实现混合精度训练,提供O0-O3四个优化级别。技术核心包括模型数据类型转换、主权重保留及损失缩放,并需配合梯度裁剪和累积等策略。在多GPU训练中,该技术与DataParallel和DistributedDataParallel兼容,为大规模模型训练提供高效解决方案。(149字) 阅读详情

相关推荐

自动混合精度(AMP)介绍与使用【Pytorch】

文章目录1 前言2 Mixed Precision Training3 torch自动混合精度(AMP)介绍与使用4 torch1.6及以上版本 1 前言 pytorch从1.6版本开始,已经内置了torch.cuda.amp,采用自动混合精度训练就不需要加载第三方NVIDIA的apex库。 使用精度低于32位浮点的数值格式有许多好处。首先,它们需要更少的内存,从而能够训练和部署更大的神经网络。其次,它们需要较少的内存带宽,从而加快数据传输操作。第三,数学运算在降低精度方面运行得更快,特别是在具有Tenso

NJU phd 在读。 3631

pytorch整理(一)

基本概念 张量 主要操作对象:Tensor(张量),类似于NumPy的ndarray,但还可以在GPU上使用来加速计算。 一个没有初始化的5*3矩阵 import torch x = torch.empty(5,3) print(x) #输出 tensor([[2.2391e-19, 4.5869e-41, 1.4191e-17], [4.5869e-41, 0.0000e+00,...

LV的博客 933

利用Simulink与MATLAB集成实现一个简单的混合精度训练仿真建模

混合精度训练利用了现代GPU对半精度浮点数(FP16)的高效支持,同时保留单精度浮点数(FP32)以确保数值稳定性和模型准确性。这种技术可以在不牺牲模型性能的前提下,大幅提高训练速度和降低硬件需求。使用Deep Learning Toolbox定义一个简单的卷积神经网络(CNN)模型。matlab深色版本layers = [reluLayer通过本指南,我们介绍了如何基于Simulink与MATLAB结合实现混合精度训练的概念性仿真建模。

xiaoheshang_123的博客 130

pytorch中Tensor的数据类型

1. 32位浮点型:torch.FloatTensor a=torch.Tensor( [[2,3],[4,8],[7,9]], ) print "a:",a print "a.size():",a.size() print "a.dtype:",a.dtype b=torch.FloatTensor( [[2,3],[4,8],[7,9]] ) print "b:",b print "b....

moshiyaofei的博客 4万+

一文理解近红外光谱数据建模步骤的细节(细节知识总结)

上一篇文章,向入门的同志大体介绍了近红外光谱数据建模的内容,依据上文其实已经可以基本完成数据建模的工作,但是很多工作不够细致,本文便是分享其中的一些技术细节。

weixin_46207310的博客 5567

DisplayPort 1.4数据扰码实战:16bit LFSR并行优化技巧(附Verilog代码)

本文深入探讨了DisplayPort 1.4协议中16bit数据扰码的并行化实现。针对高带宽视频传输需求,文章详细推导了16位LFSR(线性反馈移位寄存器)的单周期16步并行计算公式,并提供了可直接使用的Verilog代码,解决了传统8bit串行处理吞吐量不足的瓶颈,为高速接口设计提供了关键优化技巧。

y4z5a6b7的博客 257

小白学Pytorch系列--Torch API (12)

小白学Pytorch系列--Torch API (12)

发呆的比目鱼的博客 2027

解决Thingsboard数据下发难题:自定义RPC请求格式的3种方法(含源码修改指南)

本文详细介绍了解决Thingsboard数据下发难题的3种自定义RPC请求格式方法,包括规则链脚本转换、TB-Gateway中间层转换和源码级定制方案。通过实际案例和性能对比,帮助开发者根据项目需求选择最适合的解决方案,提升物联网平台与设备的兼容性。

weixin_29008691的博客 232

dtype = torch.float32到底有什么用

RuntimeError: expected scalar type Long but found Float

weixin_45794268的博客 3191

Lossless-Claw 插件实战:告别上下文截断,让 OpenClaw 永不遗忘

本文介绍了OpenClaw的Lossless-Claw插件,这是一个基于LCM论文的DAG摘要系统,能有效解决上下文截断问题。文章包含10个部分,从插件原理到实操指南: 核心原理:通过DAG结构持久化存储所有原始消息,将旧消息分块摘要并形成层级结构,保持上下文在模型Token限制内。 性能优势:在OOLONG基准测试中得分74.8,优于Claude Code的70.3,尤其在长上下文场景表现更佳。 功能特点: 提供lcm_grep、lcm_describe等工具主动回忆历史 摘要始终链接回原文,实现真正无损

u014798858的博客 2617

【工程师一次性讲明白系列】什么是电压驻波比 (VSWR)

电压驻波比(VSWR)是电信号传输过程中非常重要的指标,控制VSWR的大小可以提高信号传输效率和系统稳定性。通过优化阻抗匹配,可以有效地减少反射信号,提升通信质量!🚀📡。

weixin_43199439的博客 1298

混合精度训练——资料+简单说明

序 最近看CDQA这个开源库的时候看到了混合精度训练这种写法,所以简单去了解了下, 结果得出了一个很悲催的结论:我的小破笔记本的显卡不支持混合精度训练…??! 自己不研究这个,找到一些很不错的资料,自己看完后这里就奉送上! Tensor Core -----------------------------大神自取----------------------------- 2. 想读读PyTor...

qq_40240102的博客 664

结合MATLAB/Simulink和多体动力学仿真软件UM(Universal Mechanism),建立高速列车轴箱轴承的动力学模型,并通过联合仿真分析其正常运行特性和典型故障模式

高速列车是现代交通运输的重要组成部分,其运行速度高、载客量大,对安全性和可靠性提出了极高的要求。轴箱轴承作为高速列车的关键部件之一,承担着传递载荷和支撑车轴的重要作用。然而,由于长期运行在高速、重载和复杂工况下,轴箱轴承容易出现疲劳磨损、润滑失效和裂纹等故障,从而影响列车的安全性。本项目旨在结合MATLAB/Simulink和多体动力学仿真软件UM(Universal Mechanism),建立高速列车轴箱轴承的动力学模型,并通过联合仿真分析其正常运行特性和典型故障模式。

xiaoheshang_123的博客 328

PaddlePaddle镜像中的混合精度训练配置说明

通过PaddlePaddle的混合精度训练与官方Docker镜像,可显著降低显存消耗并加速模型训练。结合auto_cast与GradScaler机制,配合预置CUDA、cuDNN的容器环境,实现高效、可复现的深度学习训练流程,特别适用于中文NLP与工业视觉场景。

weixin_35755823的博客 666

【QT开发教程】Qt中的跨平台文件系统操作

文件系统操作是应用程序开发中经常需要处理的任务。Qt提供了一套跨平台的文件系统操作API,使开发者能够在不同操作系统上无缝地进行文件和目录操作。本文将介绍Qt中的跨平台文件系统操作,包括基本概念、常用类和方法以及实际示例。

科技改变人类,技术成就未来 978

《八》:玩家位置同步(玩家防碰撞)

在VR大空间体验中,由于玩家佩戴头显设备无法直接观察彼此位置,容易发生碰撞。因此,需要将玩家的实时位置信息绘制在虚拟空间中,实现位置可视化。通过获取头显的位置和旋转角度等数据,可以推算出玩家的移动状态和位置。使用可序列化的玩家结构体,通过UDP将玩家数据发送到服务器,服务器接收并反序列化数据后,同步所有玩家的最新信息至各客户端。客户端根据接收到的数据渲染虚拟人物模型,实现动态位置更新。这一过程涉及数据序列化、反序列化、网络通信和实时渲染等技术,确保玩家在虚拟空间中的位置同步和可视化。

unitygroup的博客 412

Git-RSCLIP部署指南:混合精度训练微调接口预留与LoRA适配说明

本文介绍了如何在星图GPU平台上自动化部署Git-RSCLIP镜像,实现遥感图像与文本的高效检索。该平台支持混合精度训练和LoRA轻量化微调,显著降低显存需求并提升训练效率,适用于遥感数据分析、智能检索等应用场景。

weixin_33205138的博客 24

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Qwen3-4B GPU部署教程:混合精度训练微调接口预留与LoRA适配说明

本文介绍了如何在星图GPU平台上自动化部署⚡Qwen3-4B Instruct-2507镜像,快速构建本地化大语言模型对话服务。依托平台能力,用户可一键完成GPU环境配置与Web界面启动,典型应用于企业客服话术微调、智能问答系统搭建等文本交互场景,兼顾低显存开销与高响应实时性。

weixin_42527665的博客 363

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Qwen2.5-VL视觉定位Chord部署:混合精度训练微调接口预留说明

本文介绍了如何在星图GPU平台上自动化部署基于Qwen2.5-VL的视觉定位Chord模型。该平台简化了部署流程,用户可快速搭建服务,实现通过自然语言描述在图片中精准定位目标物体的核心功能,典型应用于智能相册管理、电商图片标注等场景。

weixin_31938351的博客 139

Camera2Demo

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

优化 GPT 训练:在 AMD GPU 上使用 ROCm 在 JAX 中启用混合精度训练

在这篇博客中,我们进一步探讨了前面讨论的nanoGPT模型(详见在AMD GPU上使用JAX实现和训练生成型预训练变换器(GPT)的指南),提供了一个关于如何集成混合精度训练的指南,以实现基于ROCm和AMD GPU的JAX实现nanoGPT模型更快且更少内存消耗的实现。

数字人生 1311

# YOLOv5分布式训练与混合精度训练实战指南

本文详细介绍了如何利用YOLOv5进行分布式训练和混合精度训练,以加速深度学习模型的训练过程。YOLOv5作为一种高效的单阶段目标检测算法,通过分布式训练(使用PyTorch的DistributedDataParallel)和混合精度训练(使用NVIDIA Apex的amp模块),能够显著提升训练速度和模型性能。文章涵盖了环境配置、代码实现、数据加载与预处理、损失函数与优化器、学习率调度器以及训练循环等关键步骤,并展示了在COCO数据集上的实验结果,证明了这些技术在提升训练效率和模型精度方面的有效性。未来,

www_pp_的博客 1550

Pytorch自动混合精度(AMP)的使用总结

Pytorch自动混合精度(AMP)的使用总结 pytorch从1.6版本开始,已经内置了torch.cuda.amp,采用自动混合精度训练就不需要加载第三方NVIDIA的apex库了。本文借鉴别人的文章和自己的经验编写,如果有错误还请大家指正。 本文包含一下内容: 1、介绍混合精度实现的两个接口。 2、如何将混合精度和梯度裁剪结合。 3、如果在torch.nn.DataParallel方式下实现混合精度训练。 以上几个问题,我也被困扰了好久,写这篇文章记录一下。 pytorch实现混合精度的两个接口 p

AI浩 4823

pytorch混合精度训练

使用单精度float32和半精度float16进行混合训练。半精度的优势: 1、减少显存占用: 现在模型越来越大,往往模型及模型计算就占去显存的大半,当想要使用更大的 Batch Size 的时候会显得捉襟见肘。由于 FP16 的内存占用只有 FP32 的一半,因此可以增加batchsize。 2、加快训练和推断的计算: 与普通的空间时间 Trade-off 的加速方法不同,FP16 除了能节约内存,还能同时节省模型的训练时间。在大部分的测试中,基于 FP16 的加速方法能够给模型训练能带来多一倍的加速体验

qq_53312564的博客 269

浅谈混合精度训练

如BERT、GPT-3、Transformer等参数量巨大的模型,混合精度可降低显存占用,使单卡训练更大模型成为可能。自动将部分运算转换为FP16(如矩阵乘),其他运算保持FP32(如softmax),平衡速度与稳定性。如CLIP、ALBEF等融合视觉与文本的模型,混合精度减少多模态数据并行处理的显存消耗。解决FP16梯度值过小(下溢)的问题,通过放大梯度确保更新有效性,缩放因子自动调整。加速生成器和判别器的对抗训练过程,同时避免因FP16精度不足导致的训练不稳定。# 6. 更新权重(自动转为FP32)

eso1983的博客 642

昇思MindSpore进阶教程--自动混合精度

当用户需要在单个运算,或多个模块组合配置运算精度时,Cell粒度往往无法满足,此时可以直接通过对输入数据的类型进行cast来达到自定义粒度控制的目的。

weixin_42553583的博客 1451

混合精度训练场景GPU显存占用量分析

LLM时代模型越来越大,基于有限的GPU显存和计算资源越训练更大的LLM,混合精度是现实选择,比如fp16、甚至fp8。这里尝试分析学习混合精度下的模型训练,假设优化器是Adam。

liliang199的专栏 927
上一篇: ubuntu20.04 opencv4.0 /usr/local/lib/libgflags.a(gflags.cc.o): relocation报错解决
下一篇: 模型的多GPU并行训练,DDP (附代码)
蓝羽飞鸟
博客等级 码龄8年 1万+粉丝 727原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蓝羽飞鸟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值