当前位置: 首页 > news >正文

什么是网站风格深圳网络营销和推广方案

什么是网站风格,深圳网络营销和推广方案,上海外贸网站推广方法,许昌网站设计制作掌握这 17 种方法#xff0c;用最省力的方式#xff0c;加速你的 Pytorch 深度学习训练。近日#xff0c;Reddit 上一个帖子热度爆表。主题内容是关于怎样加速 PyTorch 训练。原文作者是来自苏黎世联邦理工学院的计算机科学硕士生 LORENZ KUHN#xff0c;文章向我们介绍了在…掌握这 17 种方法用最省力的方式加速你的 Pytorch 深度学习训练。近日Reddit 上一个帖子热度爆表。主题内容是关于怎样加速 PyTorch 训练。原文作者是来自苏黎世联邦理工学院的计算机科学硕士生 LORENZ KUHN文章向我们介绍了在使用 PyTorch 训练深度模型时最省力、最有效的 17 种方法。该文所提方法都是假设你在 GPU 环境下训练模型。具体内容如下。17 种加速 PyTorch 训练的方法1. 考虑换一种学习率 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.html2. 在 DataLoader 中使用多个 worker 和页锁定内存当使用 torch.utils.data.DataLoader 时设置 num_workers 0而不是默认值 0同时设置 pin_memoryTrue而不是默认值 False。参考文档https://pytorch.org/docs/stable/data.html来自 NVIDIA 的高级 CUDA 深度学习算法软件工程师 Szymon Micacz 就曾使用四个 worker 和页锁定内存pinned memory在单个 epoch 中实现了 2 倍的加速。人们选择 worker 数量的经验法则是将其设置为可用 GPU 数量的四倍大于或小于这个数都会降低训练速度。请注意增加 num_workers 将增加 CPU 内存消耗。3. 把 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 的差。4. 使用自动混合精度AMPPyTorch 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 precisionwith torch.cuda.amp.autocast():loss model(data)# Scales the loss, and calls backward()# to create scaled gradientsscaler.scale(loss).backward()# Unscales gradients and calls# or skips optimizer.step()scaler.step(optimizer)# Updates the scale for next iterationscaler.update()5. 考虑使用另一种优化器AdamW 是由 fast.ai 推广的一种具有权重衰减而不是 L2 正则化的 Adam在 PyTorch 中以 torch.optim.AdamW 实现。AdamW 似乎在误差和训练时间上都一直优于 Adam。Adam 和 AdamW 都能与上面提到的 1Cycle 策略很好地搭配。目前还有一些非本地优化器也引起了很大的关注最突出的是 LARS 和 LAMB。NVIDA 的 APEX 实现了一些常见优化器的融合版本比如 Adam。与 PyTorch 中的 Adam 实现相比这种实现避免了与 GPU 内存之间的多次传递速度提高了 5%。6. cudNN 基准如果你的模型架构保持不变、输入大小保持不变设置 torch.backends.cudnn.benchmark True。7. 小心 CPU 和 GPU 之间频繁的数据传输当频繁地使用 tensor.cpu() 将张量从 GPU 转到 CPU或使用 tensor.cuda() 将张量从 CPU 转到 GPU时代价是非常昂贵的。item() 和 .numpy() 也是一样可以使用. detach() 代替。如果你创建了一个新的张量可以使用关键字参数 devicetorch.device(cuda:0) 将其分配给 GPU。如果你需要传输数据可以使用. to(non_blockingTrue)只要在传输之后没有同步点。8. 使用梯度 / 激活 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 关键方面。Priya Goyal 教程地址https://github.com/prigoyal/pytorch_memonger/blob/master/tutorial/Checkpointing_for_PyTorch_models.ipynb9. 使用梯度积累增加 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 passloss loss_function(predictions, labels) # Compute loss functionloss loss / accumulation_steps # Normalize our loss (if averaged)loss.backward() # Backward passif (i1) % accumulation_steps 0: # Wait for several backward stepsoptimizer.step() # Now we can do an optimizer stepmodel.zero_grad() # Reset gradients tensorsif (i1) % 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.html11. 设置梯度为 None 而不是 0梯度设置为. zero_grad(set_to_noneTrue) 而不是 .zero_grad()。这样做可以让内存分配器处理梯度而不是将它们设置为 0。正如文档中所说将梯度设置为 None 会产生适度的加速但不要期待奇迹出现。注意这样做也有缺点详细信息请查看文档。文档地址https://pytorch.org/docs/stable/optim.html12. 使用. 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 关键字设置为 Falsetorch.nn.Conv2d(..., biasFalse, ...)。16. 在验证期间关闭梯度计算在验证期间关闭梯度计算设置torch.no_grad() 。17. 使用输入和 batch 归一化要再三检查一下输入是否归一化是否使用了 batch 归一化
http://www.w-s-a.com/news/291463/

相关文章:

  • 使用网站模板快速建站教案杂志wordpress主题 无限加载
  • 南宁南宁做网站南安网络推广
  • 旌阳移动网站建设微网站 杭州
  • 合肥网站开发如何用VS2017做网站
  • 网站 制作公司福州企业建站软件
  • 网站推广主要方法一流的盘锦网站建设
  • 给个网站好人有好报2021东莞专业网站营销
  • 中国网站优化哪家好制作网站页面
  • 网站站内优化度娘网站灯笼要咋做呢
  • 怎么制作一个简单的网站七牛云做网站
  • 厦门建网站哪家好求网站建设合伙人
  • 营销型网站制作步骤五个宁波依众网络科技有限公司
  • 外贸响应式网站建设临清建设局网站
  • 手机怎样使用域名访问网站个人做旅游网站的意义
  • 西部数码域名网站模板网站建设怎么管理业务员
  • o2o手机维修网站那个公司做的电子网站风格设计
  • 网站建设预算计算方法什么是网络营销战略?网络营销战略有哪些基本类型
  • 无锡做网站公司多少钱网站备案方法
  • 建设网站最强做网站哪一家公司好
  • 漫画风格网站人物介绍网页模板html
  • 贵阳市住房和城乡建设局政务网站大连 网站开发
  • 漳州市住房建设局网站网站一般多长
  • 国外做网站推广小程序制作二维码签到
  • 做网站需要域名网站建设诚信服务
  • 做物品租赁网站网站建设的完整流程
  • 响应式企业网站开发所用的平台西安知名网站推广
  • 高端响应式网站建设wordpress 全屏主题
  • 国内工程机械行业网站建设现状ui是什么意思
  • 成都网站开发哪家公司好出售家教网站模板
  • 订阅号做流量 那些电影如何链接网站温州市建设监理协会网站