智能工厂安全风险以及如何补救它们
由于前馈网络非常小,混合精度训练对它没有任何好处。 UNet 是一个中等规模的卷积模型,共有7,703,497个参数,从混合精度训练中得到了显著的好处。有趣的是,虽然 V100和 T4都受益于混合精度训练,但 T4的好处要大得多: 节省5%时间vs. 高达30%的时间。 BERT 是一个很大的模型,在这里使用混合精度训练节省时间,从中等模型的“很好”到了“必须拥有”。在Volta或Turing GPU 上训练,自动混合精度将为大型模型减少50% 到60% 的训练时间! 这是一个巨大的优势,尤其是当你考虑到增加的复杂性极小时——只需要对模型训练脚本进行四到五行代码修改。在我看来: 混合精度应该是你对模型训练脚本进行的最先性能优化之一。 内存呢? 正如我在“混合精度是如何工作的”一节中解释的那样,在内存中fp16矩阵的大小是fp32矩阵的一半,因此,混合精度训练的另一个据称的优势是内存使用率。GPU 内存的瓶颈远小于 GPU 的计算能力,但仍有很大的优化价值。你的内存使用效率越高,你可以在 GPU 上使用的batch size就越大。 PyTorch 在模型训练过程开始时保留一定数量的 GPU 内存,并在训练期间保留这些内存。这可以防止其它进程在训练过程中抢占过多的 GPU 内存,迫使 PyTorch 训练脚本崩溃并出现 OOM 错误。
以下是启用混合精度训练对 PyTorch 内存保留行为的影响:
当用户觉得当前推荐数据的预标注已足够准确,不再进行下一轮数据标注推荐筛选,或者系统自动判断当前标注的数据已足够时,则进入结束智能标注阶段。在图像智能标注中,系统会弹出提示(图6),选择“一键标注”系统会自动标注剩余未标注数据,选择“立即训练”则停止智能标注,之后可以利用已确认的标注数据去训练模型;在文本智能标注中,不选择“优化标注结果”则认为停止智能标注,系统自动标注所有未标注数据,并归为“已标注·智能”数据集,该类数据与“已标注·人工”均可用于模型训练。 以这种方式包装前向传播,可以自动打开后传(如 loss.backwards ())的autocasting,因此不需要调用两次autocast。 只要你遵循PyTorch 的最佳实践(例如,避免in-place操作) ,autocasting基本上就可以“正常工作”。它甚至可以使用多GPU DistributedDataParallel API (只要遵循建议的策略,每个 GPU 只使用一个进程)。只需一个小调整,多GPU DataParallel API也可以用。Pytorch 文档中的 Automatic Mixed Precision Examples 页面的“Working with multiple GPUs”部分是关于这个主题的一个方便的参考。个人观点,有一个要记住的重点是: "优先用 binary cross entropy with logits 而不是 binary cross entropy"。 Benchmarks性能此时,我们已经了解了什么是混合精度,什么是张量核,以及 PyTorch API 如何实现自动混合精度。唯一剩下的就是看看一些真实世界的性能benchmarks! 我曾经用自动混合精度训练过三个非常不一样的神经网络,还有一次没用,通过 Spell API 调用 V100s (上一代张量核)和 T4s (当代张量核)。我分别使用了 AWS EC2实例、 p3.2xlarge 和 g4dn.xlarge,最近的 PyTorch 1.6 nightly 和 CUDA 10.0。所有模型的收敛都是一致的,即没有一个模型发现混合精度网络和原网络在训练损失上有任何差异。训练的网络如下:
结果如下: (编辑:保山站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |