你的位置:皇冠账号 > 皇冠app > 沙巴轮盘博彩棋牌_PyTorch | 优化神经蚁集考研的十七种智力

皇冠app
沙巴轮盘博彩棋牌_PyTorch | 优化神经蚁集考研的十七种智力
发布日期:2023-10-30 06:34    点击次数:116

沙巴轮盘博彩棋牌_PyTorch | 优化神经蚁集考研的十七种智力

皇冠客服飞机:@seo3687沙巴轮盘博彩棋牌_

[[442468]]彩票炸金花

 彩票炸金花本文先容在使用 PyTorch 考研深度模子时最省力、最有用的 17 种智力。该文所提智力,王人是假定你在 GPU 环境下考研模子。具体试验如下。

01. 计议换一种学习率 schedule

学习率 schedule 的遴选对模子的敛迹速率和泛化武艺有很大的影响。Leslie N. Smith 等东说念主在论文《Cyclical Learning Rates for Training Neural Networks》、《Super-Convergence: Very Fast Training of Neural Networks Using Large Learning Rates 》中提议了周期性(Cyclical)学习率以及 1Cycle 学习率 schedule。之后,fast.ai 的 Jeremy Howard 和 Sylvain Gugger 对其进行了推行。下图是 1Cycle 学习率 schedule 的图示:

Sylvain 写到:1Cycle 包括两个等长的步幅,一个步幅是从较低的学习率到较高的学习率,另一个是回到最低水平。最大值来自学习率查找器收用的值,较小的值不错低十倍。然后,这个周期的长度应该略小于总的 epochs 数,况兼,在考研的终末阶段,咱们应该允许学习率比最小值小几个数目级。

与传统的学习率 schedule 比拟,在最佳的情况下,该 schedule 完结了广宽的加速(Smith 称之为超等敛迹)。举例,使用 1Cycle 战术在 ImageNet 数据集上考研 ResNet-56,考研迭代次数减少为原本的 1/10,但模子性能仍能并列原论文中的水平。在常见的体系架构和优化器中,这种 schedule 似乎发达得很好。

Pytorch 依然完结了这两种智力:「torch.optim.lr_scheduler.CyclicLR」和「torch.optim.lr_scheduler.OneCycleLR」。

博彩棋牌

参考文档:https://pytorch.org/docs/stable/optim.html

02. 在 DataLoader 中使用多个 worker 和页锁定内存

当使用 torch.utils.data.DataLoader 时,成立 num_workers > 0,而不是默许值 0,同期成立 pin_memory=True,而不是默许值 False。

参考文档:https://pytorch.org/docs/stable/data.html

来自 NVIDIA 的高档 CUDA 深度学习算法软件工程师 Szymon Micacz 就曾使用四个 worker 和页锁定内存(pinned memory)在单个 epoch 中完结了 2 倍的加速。东说念主们遴选 worker 数目的劝诫轨则是将其成立为可用 GPU 数目的四倍,大于或小于这个数王人会缩小考研速率。请夺目,增多 num_workers 将增多 CPU 内存耗尽。

03. 把 batch 调到最大

把 batch 调到最大是一个颇有争议的不雅点。一般来说,如果在 GPU 内存允许的限制内将 batch 调到最大,你的考研速率会更快。然而,你也必须调整其他超参数,比如学习率。一个比较好用的劝诫是,batch 大小加倍时,学习率也要加倍。

OpenAI 的论文《An Empirical Model of Large-Batch Training》很好地论证了不同的 batch 大小需要若干步才能敛迹。在《How to get 4x speedup and better generalization using the right batch size》一文中,作家 Daniel Huynh 使用不同的 batch 大小进行了一些实验(也使用上头接头的 1Cycle 战术)。最终,他将 batch 大小由 64 增多到 512,完结了 4 倍的加速。

关连词,使用大 batch 的不及是,这可能导致惩处有预备的泛化武艺比使用小 batch 的差。

04. 使用自动羼杂精度(AMP)

PyTorch 1.6 版块包括对 PyTorch 的自动羼杂精度考研的土产货完结。这里想说的是,与单精度 (FP32) 比拟,某些运算在半精度 (FP16) 下运行更快,而不会失掉准确率。AMP 会自动决定应该以哪种精度推行哪种运算。这么既不错加速考研速率,又不错减少内存占用。

在最佳的情况下,AMP 的使用情况如下: 

import torch  # Creates once at the beginning of training  scaler = torch.cuda.amp.GradScaler()  for data, label in data_iter:     optimizer.zero_grad()     # Casts operations to mixed precision     with torch.cuda.amp.autocast():        loss = model(data)     # Scales the loss, and calls backward()     # to create scaled gradients     scaler.scale(loss).backward()     # Unscales gradients and calls     # or skips optimizer.step()     scaler.step(optimizer)     # Updates the scale for next iteration     scaler.update() 
05. 计议使用另一种优化器

AdamW 是由 fast.ai 推行的一种具有权重衰减(而不是 L2 正则化)的 Adam,在 PyTorch 中以 torch.optim.AdamW 完结。AdamW 似乎在过失和考研时刻上王人一直优于 Adam。

传奇

Adam 和 AdamW 王人能与上头提到的 1Cycle 战术很好地搭配。

新2足球网址有直播

现在,还有一些非土产货优化器也引起了很大的热心,最凸起的是 LARS 和 LAMB。NVIDA 的 APEX 完结了一些常见优化器的会通版块,比如 Adam。与 PyTorch 中的 Adam 完结比拟,这种完结幸免了与 GPU 内存之间的屡次传递,速率升迁了 5%。

06. cudNN 基准

如果你的模子架构保抓不变、输入大小保抓不变,成立 torch.backends.cudnn.benchmark = True。

07. 着重 CPU 和 GPU 之间常常的数据传输

那常常地使用 tensor.cpu() 将张量从 GPU 转到 CPU(或使用 tensor.cuda() 将张量从 CPU 转到 GPU)时,代价瑕瑜常粗鲁的。item() 和 .numpy() 亦然相同不错使用. detach() 代替。

皇冠体育博彩,皇冠博彩需要持续不断的努力和智慧,才能在激烈的竞争中脱颖而出。

如果你创建了一个新的张量,不错使用关节字参数 device=torch.device( cuda:0 ) 将其分拨给 GPU。

如果你需要传输数据,不错使用. to(non_blocking=True),惟有在传输之后莫得同步点。

08. 使用梯度 / 激活 checkpointing

Checkpointing 的使命旨趣是用筹画换内存,并不存储扫数这个词筹绘图的扫数中间激活用于 backward pass,而是再行筹画这些激活。咱们不错将其应用于模子的任何部分。

具体来说,在 forward pass 中,function 会以 torch.no_grad() 神气运行,不存储中间激活。相背的是, forward pass 中会保存输入元组以及 function 参数。在 backward pass 中,输入和 function 会被检索,并再次在 function 上筹画 forward pass。然后追踪中间激活,使用这些激活值筹画梯度。

因此,天然这可能会稍许增多给定 batch 大小的运行时刻,但会显耀减少内存占用。这反过来又将允许进一步增多所使用的 batch 大小,从而升迁 GPU 的欺诈率。

沙巴轮盘

皇冠hg86a

尽管 checkpointing 以 torch.utils.checkpoint 神气完结,但仍需要一些想考和辛苦来正确地完结。Priya Goyal 写了一个很好的教程来先容 checkpointing 关节方面。

2、排列三5码组六统计:截止第2023152期,排列三已开出了6573期奖号了,其中组六号码出现了4678次,组三出现了1824次,豹子出现了71次。

Priya Goyal 教程地址:

足球博彩平台

https://github.com/prigoyal/pytorch_memonger/blob/master/tutorial/Checkpointing_for_PyTorch_models.ipynb

09. 使用梯度累积

增多 batch 大小的另一种智力是在调用 optimizer.step() 之前在多个. backward() 传递中累积梯度。

Hugging Face 的 Thomas Wolf 的著述《Training Neural Nets on Larger Batches: Practical Tips for 1-GPU, Multi-GPU & Distributed setups》先容了若何使用梯度累积。梯度累积不错通过如下神气完结: 

model.zero_grad()                                   # Reset gradients tensors  for i, (inputs, labels) in enumerate(training_set):     predictions = model(inputs)                     # Forward pass      loss = loss_function(predictions, labels)       # Compute loss function      lossloss = loss / accumulation_steps                # Normalize our loss (if averaged)      loss.backward()                                 # Backward pass      if (i+1) % accumulation_steps == 0:             # Wait for several backward steps          optimizer.step()                            # Now we can do an optimizer step          model.zero_grad()                           # Reset gradients tensors          if (i+1) % evaluation_steps == 0:           # Evaluate the model when we...              evaluate_model()                        # ...have no gradients accumulate 

这个智力主如果为了回避 GPU 内存的限度而征战的。

10. 使用漫衍式数据并行进行多 GPU 考研

加速漫衍式考研可能有许多智力,然而粗放的智力是使用 torch.nn.DistributedDataParallel 而不是 torch.nn.DataParallel。这么一来,每个 GPU 将由一个专用的 CPU 中枢驱动,幸免了 DataParallel 的 GIL 问题。

皇冠备用网址

漫衍式考研文档地址:https://pytorch.org/tutorials/beginner/dist_overview.html

11. 成立梯度为 None 而不是 0

梯度成立为. zero_grad(set_to_none=True) 而不是 .zero_grad()。这么作念不错让内存分拨器处理梯度,而不是将它们成立为 0。正如文档中所说,将梯度成立为 None 会产生限度的加速,但不要期待名胜出现。夺目,这么作念也有过失,详备信息请检察文档。

文档地址:https://pytorch.org/docs/stable/optim.html

12. 使用. as_tensor() 而不是. tensor()

torch.tensor() 老是会复制数据。如果你要诊疗一个 numpy 数组,使用 torch.as_tensor() 或 torch.from_numpy() 来幸免复制数据。

13. 必要时掀开调试器具

PyTorch 提供了许多调试器具,举例 autograd.profiler、autograd.grad_check、autograd.anomaly_detection。请确保当你需要调试时再掀开调试器,不需要时要实时关掉,因为调试器会缩小你的考研速率。

14. 使用梯度编订

对于幸免 RNN 中的梯度爆炸的问题,依然有一些实验和表面说明,梯度编订(gradient = min(gradient, threshold))不错加速敛迹。HuggingFace 的 Transformer 完结等于一个稀奇显着的例子,诠释了若何使用梯度编订。本文中提到的其他一些智力,如 AMP 也不错用。

太阳城集团黄色

在 PyTorch 中不错使用 torch.nn.utils.clip_grad_norm_来完结。

15. 在 BatchNorm 之前关闭 bias

在开动 BatchNormalization 层之前关闭 bias 层。对于一个 2-D 卷积层,不错将 bias 关节字成立为 False:torch.nn.Conv2d(..., bias=False, ...)。

皇冠账号 16. 在考据时刻关闭梯度筹画

在考据时刻关闭梯度筹画,成立:torch.no_grad() 。

17. 使用输入和 batch 归一化

要再三搜检一下输入是否归一化?是否使用了 batch 归一化? 

 



Powered by 皇冠账号 @2013-2022 RSS地图

皇冠体育皇冠体育导航皇冠客服