我是靠谱客的博主 迷路蜜粉,最近开发中收集的这篇文章主要介绍《PyTorch训练加速的17种方法》读后感,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

PyTorch训练加速的17种方法

整理了几个现阶段实用的:

  1. torch.optim.lr_scheduler.CyclicLR 和 torch.optim.lr_scheduler.OneCycleLR. 传送门:Optim
  2. 当使用 torch.utils.data.DataLoader 时,设置 num_workers > 0,而不是默认值 0,同时设置 pin_memory=True,而不是默认值 False。 传送门:DataLoader, CUDA页锁定内存,
  3. 把 batch 调到最大的做法颇有争议。一般来说,如果在 GPU 内存允许的范围内将 batch 调到最大,你的训练速度会更快。但是,你也必须调整其他超参数,比如学习率。一个比较好用的经验是,batch 大小加倍时,学习率也要加倍。然而,使用大 batch 可能导致解决方案的泛化能力比使用小 batch 的差
  4. 使用AdamW代替Adam。AdamW 是由 fast.ai 推广的一种具有权重衰减(而不是 L2 正则化)的 Adam,在 PyTorch 中以 torch.optim.AdamW 实现。Adam 和 AdamW 都能与1Cycle 策略很好地搭配
  5. 打开cudNN基准测试: 如果你的模型架构保持不变、输入大小保持不变,设置 torch.backends.cudnn.benchmark = True
  6. 避免CPU 和 GPU 之间频繁的数据传输:tensor.cpu()代价昂贵,.item()和.numpy()也是如此,可使用.detach()代替;对于新创建的张量,可以使用关键字参数device=torch.device('cuda:0')将其分配给 GPU。如果你需要传输数据,可以使用. to(non_blocking=True),【只要在传输之后没有同步点就行】
  7. 使用.as_tensor()torch.from_numpy()代替.tensor(), 用. tensor()转换numpy数组会复制。

以下是很有价值的进阶用法,有待仔细研究:

  1. 使用分布式数据并行进行多 GPU 训练:加速分布式训练可能有很多方法,但是简单的方法是使用 torch.nn.DistributedDataParallel而不是 torch.nn.DataParallel。这样一来,每个 GPU 将由一个专用的 CPU 核心驱动,避免了 DataParallel 的 GIL 问题。传送门:分布式训练文档; 使用示例
  2. 使用自动混合精度(AMP): PyTorch 1.6 版本包括对 PyTorch 的自动混合精度训练的本地实现。与单精度 (FP32) 相比,某些运算在半精度 (FP16) 下运行更快,而不会损失准确率。AMP 会自动决定应该以哪种精度执行哪种运算。这样既可以加快训练速度,又可以减少内存占用。
    DDP和AMP示例

最后

以上就是迷路蜜粉为你收集整理的《PyTorch训练加速的17种方法》读后感的全部内容,希望文章能够帮你解决《PyTorch训练加速的17种方法》读后感所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(35)

评论列表共有 0 条评论

立即
投稿
返回
顶部