[[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 战术很好地搭配。
现在,还有一些非土产货优化器也引起了很大的热心,最凸起的是 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. 使用梯度 / 激活 checkpointingCheckpointing 的使命旨趣是用筹画换内存,并不存储扫数这个词筹绘图的扫数中间激活用于 backward pass,而是再行筹画这些激活。咱们不错将其应用于模子的任何部分。
具体来说,在 forward pass 中,function 会以 torch.no_grad() 神气运行,不存储中间激活。相背的是, forward pass 中会保存输入元组以及 function 参数。在 backward pass 中,输入和 function 会被检索,并再次在 function 上筹画 forward pass。然后追踪中间激活,使用这些激活值筹画梯度。
因此,天然这可能会稍许增多给定 batch 大小的运行时刻,但会显耀减少内存占用。这反过来又将允许进一步增多所使用的 batch 大小,从而升迁 GPU 的欺诈率。
沙巴轮盘尽管 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 归一化?