
AI/模型训练
文章平均质量分 57
AI/模型训练
u013250861
这个作者很懒,什么都没留下…
展开
-
模型训练-Tricks-加速训练:混合精度
模型训练-Tricks-加速训练:混合精度。原创 2023-08-26 18:51:23 · 140 阅读 · 0 评论 -
R-drop解读
一个比较直接的疑问是,如果我的模型够复杂,单靠交叉熵这一项,不能使得模型对dropout鲁邦吗?也就是说,如果只有交叉熵这一项,模型的训练效果顶多是不同的dropout下,目标类的得分都大于非目标类的得分,而不能做到不同的dropout下每个类的得分一直,所以也就没有解决训练预测不一致的问题。也就是说,如果只有交叉熵这一项,模型的训练效果顶多是不同的dropout下,目标类的得分都大于非目标类的得分,而不能做到不同的dropout下每个类的得分一直,所以也就没有解决训练预测不一致的问题。原创 2023-07-29 21:18:05 · 261 阅读 · 0 评论 -
模型训练-Tricks:分层学习率【①预训练模型需要设置较小学习率,②自定义的层需要设置较大学习率】
在模型的训练阶段对于不同的层我们可能会需要设置不同的学习率,尤其是当我们在预训练模型的基础上对下游任务进行微调,对于预训练模型需要设置较小的学习率,而其他一些我们自定义的层则需要较大的学习率。这篇文章通过一个简单的例子简要记录一下 Pytorch 中分层学习率的设置方式。首先我们分析定义的模型结构,这个简单的模型是由12层 transformer 的 encoder 加上 lstm、linear_layer 组成。好,了解完模型架构,接下来引入我们分层学习率的。我们定义一个简单的 Bert 模型。原创 2023-07-29 17:01:58 · 841 阅读 · 0 评论 -
模型训练:常用训练tricks【鲁棒性:对抗训练FGM、权值平均EMA/SWA】【加速训练:混合精度】
例如:我们可以先用标准的衰减学习率策略在前75%的训练时间里进行学习,然后再把学习率设定到一个合理的较大的常数学习率上,在剩余的25%的训练时间里学习,这样就得到了很多的ckpt。简言之,SWA 就是对通过可调整的学习率的SGD算法得到的多个权重进行平均的方法。SWA最终的结果就是在一个广阔的平坦的 loss 区域的中心,而SGD趋向于收敛到低loss区域的边界,这使得结果容易受到训练和测试误差平面之间转换的影响,即在低loss区域的边界可能在测试集合误差平面较大的位置,也就是模型不够鲁棒。原创 2023-07-29 12:21:56 · 1412 阅读 · 0 评论 -
模型训练-Tricks-提升鲁棒性(2):SWA(随机权重平均/Stochastic Weight Averaging)、EMA(指数移动平均/Exponential Moving Average)
Copy一份模型所有权重(记为Weights)的备份(记为EMA_weights),训练过程中每次更新权重时同时也对EMA_weights进行滑动平均更新,训练阶段结束后用EMA_weights替换模型权重进行预测。(根据新weight更新EMA_weights)具体地,EMA的超参decay一般设为接近1的数,从而保证每次EMA_weights的更新都很稳定。原创 2023-07-29 11:52:59 · 1310 阅读 · 0 评论 -
LLM-微调-方案(一):Lora【案例:chatGLM-Lora】【在chatGLM原有结构中间插入新的网络层】【微调时冻结原有结构参数,只微调新加入的网络层参数】
【代码】Lora微调:chatGLM-Lora【在chatGLM原有结构中间插入新的网络层】【微调时冻结原有结构参数,只微调新加入的网络层参数】原创 2023-06-05 14:50:16 · 1209 阅读 · 0 评论 -
Pytorch分布式训练快速入门教程(一):从Accelerate说起
DP模型的基本思路是将数据/Batch分发到不同机器,在Forward过程将模型复制,数据分batch后分发给不同的GPU,最后由主GPU gather所有的输出;对于大型的DL任务,需要添加大量的工程化步骤,如hyperparams的管理,系统状态的监控等。如果是多机多卡就表示对应第几台机器,如果是单机多卡,由于一个进程内就只有一个 GPU,所以 rank 也就表示第几块 GPU。问题,主GPU承担了额外计算和显存开销,同时卡间大量通信导致的延迟问题也不可忽略,随着数据量和模型大小的增加,原创 2023-04-27 14:38:13 · 2784 阅读 · 1 评论 -
Pytorch分布式训练框架Accelerate的main_process_ip参数是什么
Accelerate是一个高级的 PyTorch 分布式训练框架,它通过使用 PyTorch 的。在使用 Accelerate 进行分布式训练时,需要指定主进程的 IP 地址,以便其他进程可以连接到主进程并进行通信。注意,这个示例中还使用了其他 Accelerate 的功能,例如。模块来实现分布式训练,并提供了许多额外的功能,例如混合精度训练和自动调整学习率。参数在 Accelerate 中用于指定主进程的 IP 地址。以下是一个使用 Accelerate 进行分布式训练的示例,其中指定了。原创 2023-04-27 14:35:39 · 1083 阅读 · 0 评论 -
Accclerate使用教程【提供简单的API使得脚本可以按混合精度运行,同时可在任何分布式设置上运行,相同的代码可以在本地电脑上进行debug也可以在训练环境执行】
最后一件要密切注意的事:如果您的模型具有绑定权重(例如将嵌入矩阵的权重与解码器的权重绑定的语言模型),则将此模型移动到 TPU(您自己或在您通过 模型prepare())将打破捆绑。与训练dataloader数据加载器一样,通过 prepare() 传递您的验证dataloader数据加载器可能会改变它:如果您在 X 个 GPU 上运行,它的长度将除以 X(因为您的实际批量大小将乘以 X),除非您设置 split_batches =真。这应该在您的训练脚本中尽早发生,因为它将初始化分布式训练所需的一切。原创 2023-04-27 14:21:41 · 815 阅读 · 0 评论 -
pytorch模型训练之fp16、apm、多GPU模型、梯度检查点(gradient checkpointing)显存优化等
这会增加计算时间,减少内存使用,但会产生数学上等价的结果。不过,在默认操作中不会特意设置这两个值(在源代码中默认为 0 和 1),所以会直接等效于正常的 forward 过程。原创 2023-04-27 14:18:53 · 4461 阅读 · 0 评论 -
大模型微调代码解析,哪些方法可以加速训练?
近期大模型层出不穷,大家对于大模型的微调也在跃跃欲试,像Lijia的BELLE,斯坦福的Alpaca[1], 清华的ChatGLM[2],中文的Chinese-Vicuna[3],让我这样的普通玩家也能训练自己的微调模型。在微调和推理的时候仍然需要加速,有哪些方法可以加速微调呢?原创 2023-04-26 18:00:01 · 1613 阅读 · 0 评论 -
开启Tensorboard面板【命令行:tensorboard --logdir ./runs/baseline】【pytorch使用tensorboard可视化实验数据】
开启Tensorboard面板【命令行:tensorboard --logdir ./runs/baseline】【pytorch使用tensorboard可视化实验数据】原创 2023-04-06 11:31:26 · 301 阅读 · 0 评论 -
模型训练-Tricks-提升鲁棒性(1):对抗训练【FGM、PGD、FGSM、FreeLB、AWP】
对抗训练中关键的是需要找到对抗样本(尽量让模型预测出错的样本),通常是对原始的输入添加一定的扰动来构造,然后用来给模型训练.【炼丹技巧】功守道:NLP中的对抗训练 + PyTorch实现 - 知乎一文搞懂NLP中的对抗训练FGSM/FGM/PGD/FreeAT/YOPO/FreeLB/SMART - 知乎FGM对抗训练_Mr.奇的博客-CSDN博客对抗训练fgm、fgsm和pgd原理和源码分析_谈笑风生...的博客-CSDN博客_pgd对抗训练。原创 2023-02-17 20:03:22 · 1908 阅读 · 0 评论 -
ERROR: Could not build wheels for tokenizers, which is required to install pyproject.toml-based...
报错,可以尝试修改python版本(我原来是3.9,换成3.8之后成功运行)PS_1:若Rust版本查看不了,则使用如下命令或查看官网。/spacy库的时候报了如上的错误。(3)安装完成,使用命令查看。(x.x.x为版本号)原创 2023-01-29 14:19:55 · 7705 阅读 · 1 评论 -
Tensorflow报错:InvalidArgumentError:indices[401,33] = 77571 is not in [0, 10000)
在进行影评文本分类时,遇到一个报错,记录下解决过程。原创 2023-01-27 01:02:52 · 409 阅读 · 1 评论 -
模型融合:加权融合、Stacking
Stacking(使用5折交叉验证将模型输出结果作为特征,再使用简单模型logistic模型进行训练)加权融合:根据模型训练效果给模型不同的权重,然后求和得到最终文章点击的概率。三个模型输出结果的加权融合。原创 2023-01-27 00:23:49 · 1925 阅读 · 0 评论 -
PyTorch的自动混合精度(AMP)
我们知道神经网络框架的计算核心是Tensor,也就是那个从scaler -> array -> matrix -> tensor 维度一路丰富过来的tensor。PyTorch 1.6版本今天发布了,带来的最大更新就是自动混合精度。可见自动混合精度正是PyTorch 1.6的最大更新。原创 2022-10-25 16:13:17 · 624 阅读 · 0 评论 -
NLP对抗训练:PyTorch、Tensorflow
对抗训练不仅可以提升模型对对抗样本的。:训练模型去区分样例是真实样例还是。:对输入增加微小扰动得到的样本。,还能提升对原始样本的。原创 2022-10-25 16:11:49 · 1087 阅读 · 0 评论 -
Pytorch:VSCode利用nn.DataParallel将模型计算涉及到的数据自动转移到GPU,并在指定的多个GPU上进行训练或调试
利用debugpy调试,设定调试用的GPU标号为2。原创 2022-10-10 19:09:39 · 991 阅读 · 0 评论 -
Pytorch网络结构可视化:torchsummary
以上两种的输入只有一个input,这种是经常遇到的情况。原创 2022-09-02 15:33:21 · 816 阅读 · 0 评论 -
不一样的显卡,在Pytorch中跑相同的网络,配置文件、参数、数据集完全相同,为什么训练结果相差特别多?
gtx1070和gtx660,两个显卡,分别在caffe中跑相同的网络,配置文件、参数、数据集完全相同,为什么训练结果相差特别多,1070的训练损失特大,准确率与瞎猜差不多,反而是660的老显卡准确率0.9以上,请问有这是正常情况吗,难道根据显卡的配置不同,网络的参数调节也要有很大的不同吗?建议跑一下caffe 里的mnist example。看看新显卡环境是不是准确率低。然后换到cudnnV5的caffe版本再试试。很可能是cudnnV4和Nvidia显卡不兼容的问题造成的,我最近就遇到这个大坑。原创 2022-10-01 20:13:08 · 2743 阅读 · 1 评论 -
nn.DataParallel:【os.environ[“CUDA_VISIBLE_DEVICES“] = “2, 3“:模型会初始化在第2号卡上,而不会占用第0号卡了】
pytorch中的GPU操作默认是异步的,当调用一个使用GPU的函数时,这些操作会在特定设备上排队但不一定在稍后执行。这就使得pytorch可以进行并行计算。但是pytorch异步计算的效果对调用者是不可见的。但平时我们用的更多其实是多GPU的并行计算,例如使用多个GPU训练同一个模型。Pytorch中的多GPU并行计算是数据级并行,相当于开了多个进程,每个进程自己独立运行,然后再整合在一起。注:多GPU计算的前提是你的计算机上得有多个GPU,在cmd上输入nvidia-smi。原创 2022-09-22 16:47:08 · 1067 阅读 · 0 评论 -
GPU单机多卡训练踩坑:单机多卡训练保存的模型,在加载模型时报错【Missing key(s) in state_dict】【训练时候采用的并行计算,应当在预测时也使用并行计算,哪怕只使用单卡】
因为训练时候采用的并行计算,导致微调后的模型文件key中会包含"module"关键字,再次加载时在单卡做预测就出错了。应当在预测时也使用并行计算,哪怕只使用单卡,也要DataParallel一下。原创 2022-09-16 09:51:18 · 1022 阅读 · 0 评论 -
Pytorch:使用data_prefetcher提升数据读取速度【自动将训练数据移动到GPU】
【代码】Pytorch:使用data_prefetcher提升数据读取速度【自动将训练数据移动到GPU】原创 2022-09-15 20:05:20 · 812 阅读 · 0 评论 -
PyTorch训练:多个项目在同一块GPU显卡上运行
多个项目在同一块GPU显卡上运行。原创 2022-09-08 19:45:35 · 2895 阅读 · 1 评论 -
PyTorch训练(十):多卡训练【CUDA_VISIBLE_DEVICES=‘0,2,3‘ python main.py】【前提是代码中已经设置好了DP或DDP训练模式】【训练样本平均分配到各卡】
进行多卡训练时,如果设备batch_size = 6,使用3个GPU,则调试时,会显示batch_size = 2,即分配到一张GPU卡上的样本数量。原创 2022-09-08 19:18:57 · 682 阅读 · 0 评论 -
PyTorch模型训练:设置随机种子,保证每次训练的结果都一样
模型训练设置随机种子,保证每次训练的结果都一样。原创 2022-07-21 20:20:47 · 2530 阅读 · 1 评论 -
PyTorch训练(五):量化感知训练【在模型中插入伪量化模块来模拟量化模型在推理过程中进行的舍入和钳位操作,从而在训练过程中提高模型对量化效应的适应能力,获得更高的量化模型精度 】
一、概述量化感知训练(Quantization Aware Training)是在模型中插入伪量化模块(fake_quant module)模拟量化模型在推理过程中进行的舍入(rounding)和钳位(clamping)操作,从而在训练过程中提高模型对量化效应的适应能力,获得更高的量化模型精度 。在这个过程中,所有计算(包括模型正反向传播计算和伪量化节点计算)都是以浮点计算实现的,在训练完成后才量化为真正的int8模型。Pytorch官方从1.3版本开始提供量化感知训练API,只需修改少量代码即可实现原创 2022-05-21 22:51:02 · 2247 阅读 · 0 评论 -
PyTorch训练(四):Ring-Allreduce【分布式训练模式】
当将神经网络的训练并行化到许多GPU上时,你必须选择如何将不同的操作分配到你可用的不同GPU上。在这里,我们关注一种称为数据并行随机梯度下降( SGD )的技术。与标准SGD一样,梯度下降是通过数据子集(小批次)完成的,需要多次迭代才能在整个数据集上进行。然而,在数据并行训练中,每个GPU都有整个神经网络模型的完整副本,对于每次迭代,只分配了小批次中样本的子集。对于每次迭代,每个GPU在其数据上运行网络的前向传播,随后进行误差反向传播,以计算损耗相对于网络参数的梯度。最后,GPU相互通信以平均由不同GPU计原创 2022-06-14 20:05:25 · 995 阅读 · 0 评论 -
PyTorch训练(一):在Linux单机多GPU卡服务器上指定某一块GPU进行训练
(pytorch) ninjia@aitlian-Super-Server:~/aiprojects/NERDemo$ nvidia-smiFri May 20 13:27:26 2022 +-----------------------------------------------------------------------------+| NVIDIA-SMI 455.23.05 Driver Version: 455.23.05 CUDA Version: 11.1原创 2022-05-20 13:32:37 · 1046 阅读 · 0 评论 -
PyTorch训练(三):DDP(DistributedDataParallel)【“单机多卡”、“多机多卡”分布式训练模式】【支持混合精度(fp16/fp32)】【只将数据并行,模型大于显卡则不行】
一、概述我们知道 PyTorch 本身对于单机多卡提供了两种实现方式DataParallel(DP):Parameter Server模式,一张卡位reducer,实现也超级简单,一行代码。DistributedDataParallel(DDP):All-Reduce模式,本意是用来分布式训练,但是也可用于单机多卡。DataParallel(DP)是基于Parameter server的算法,实现比较简单,只需在原单机单卡代码的基础上增加一行:gpu_ids = [0, 2, 3]mode.原创 2022-05-10 22:56:11 · 1735 阅读 · 1 评论 -
PyTorch训练(二):DP(DataParallel)【“单机多卡”训练模式】【简单方便、速度慢、GPU 负载不均衡】【不推荐使用DP,推荐使用DDP】[
一、概述我们知道 PyTorch 本身对于单机多卡提供了两种实现方式DataParallel(DP):Parameter Server模式,一张卡位reducer,实现也超级简单,一行代码。DistributedDataParallel(DDP):All-Reduce模式,本意是用来分布式训练,但是也可用于单机多卡。DataParallel(DP)是基于Parameter server的算法,实现比较简单,只需在原单机单卡代码的基础上增加一行:model = nn.DataParallel(m原创 2022-05-20 14:14:40 · 1140 阅读 · 0 评论 -
PyTorch训练(四):模型量化训练【①模型训练完毕后的动态量化、②模型训练完毕后的静态量化、③模型训练中开启量化】
一、概述在深度学习中,量化指的是使用更少的bit来存储原本以浮点数存储的tensor,以及使用更少的bit来完成原本以浮点数完成的计算。这么做的好处主要有如下几点:更少的模型体积,接近4倍的减少;可以更快的计算,由于更少的内存访问和更快的int8计算,可以快2~4倍。一个量化后的模型,其部分或者全部的tensor操作会使用int类型来计算,而不是使用量化之前的float类型。当然,量化还需要底层硬件支持,x86 CPU(支持AVX2)、ARM CPU、Google TPU、Nvidia Volt原创 2022-05-21 22:47:02 · 1799 阅读 · 0 评论 -
PyTorch训练(四):Apex混合精度量化训练【Apex:用于改变数据格式来减小模型显存占用的工具】【在内存中用FP16做储存和乘法从而加速计算,用FP32做累加避免舍入误差】【与DDP配合使用】
一、概述1、混合精度训练的目的训练网络的基本上都是在N卡上面执行的,数据集比较大时,训练网络会耗费大量的时间。由于我们需要使用反向传播来更新具有细微变化的权重,因而我们在训练网络的过程中通常会选用FP32类型的数据和权重。混合精度训练,即当你使用N卡训练你的网络时,混合精度会在内存中用FP16做储存和乘法从而加速计算,用FP32做累加避免舍入误差。优势就是可以使你的训练时间减少一半左右。缺陷是只能在支持FP16操作的一些特定类型的显卡上面使用,而且会存在溢出误差和舍入误差。FP32和FP1原创 2022-05-21 22:26:19 · 853 阅读 · 0 评论 -
PyTorch模型训练可视化工具:Visdom
在深度学习领域,模型训练是一个必须的过程,因此常常需要实时监听并可视化一些数据,如损失值loss,正确率acc等。在Tensorflow中,最常使用的工具非Tensorboard莫属;在Pytorch中,也有类似的TensorboardX,但据说其在张量数据加载的效率方面不如visdom。visdom是FaceBook开发的一款可视化工具,其实质是一款在网页端的web服务器,对Pytorch的支持较好。参考资料:详解PyTorch可视化工具visdom(一)...原创 2022-06-15 20:59:45 · 402 阅读 · 0 评论