代码详解:用Pytorch训练快速神经网络的9个技巧
事实上,你的模型可能还停留在石器时代的水平。估计你还在用32位精度或*GASP(一般活动仿真语言)*训练,甚至可能只在单GPU上训练。如果市面上有99个加速指南,但你可能只看过1个?(没错,就是这样)。但这份终极指南,会一步步教你清除模型中所有的(GP模型)。 这份指南的介绍从简单到复杂,一直介绍到你可以完成的大多数PITA修改,以充分利用你的网络。例子中会包括一些Pytorch代码和相关标记,可以在 Pytorch-Lightning训练器中用,以防大家不想自己敲码! 这份指南针对的是谁? 任何用Pytorch研究非琐碎的深度学习模型的人,比如工业研究人员、博士生、学者等等……这些模型可能要花费几天,甚至几周、几个月的时间来训练。 指南(从易到难)
Pytorch-Lightning 文中讨论的各种优化,都可以在名为Pytorch-Lightning (https://github.com/williamFalcon/pytorch-lightning?source=post_page) 的Pytorch图书馆中找到。 Lightning是基于Pytorch的一个光包装器,它可以帮助研究人员自动训练模型,但关键的模型部件还是由研究人员完全控制。 参照此篇教程,获得更有力的范例 (https://github.com/williamFalcon/pytorch-lightning/blob/master/examples/new_project_templates/single_gpu_node_template.py?source=post_page)。 Lightning采用最新、最尖端的方法,将犯错的可能性降到最低。 MNIST定义的Lightning模型 (https://github.com/williamFalcon/pytorch-lightning/blob/master/examples/new_project_templates/lightning_module_template.py?source=post_page),可适用于训练器。
1. DataLoader 这可能是最容易提速的地方。靠保存h5py或numpy文件来加速数据加载的日子已经一去不复返了。用 Pytorch dataloader (https://pytorch.org/tutorials/beginner/data_loading_tutorial.html?source=post_page)加载图像数据非常简单。(关于NLP数据,请参照TorchText: https://torchtext.readthedocs.io/en/latest/datasets.html?source=post_page)
在Lightning中,你无需指定一个训练循环,只需定义dataLoaders,训练器便会在 需要时调用它们 (https://github.com/williamFalcon/pytorch-lightning/blob/master/examples/new_project_templates/lightning_module_template.py?source=post_page---------------------------#L163-L217)。 2. DataLoaders中的进程数 加快速度的第二个秘诀在于允许批量并行加载。所以,你可以一次加载许多批量,而不是一次加载一个。
3. 批量大小(Batch size) 在开始下一步优化步骤之前,将批量大小调高到CPU内存或GPU内存允许的最大值。 接下来的部分将着重于减少内存占用,这样就可以继续增加批尺寸。 记住,你很可能需要再次更新学习率。如果将批尺寸增加一倍,最好将学习速度也提高一倍。 4. 累积梯度 假如已经最大限度地使用了计算资源,而批尺寸仍然太低(假设为8),那我们则需为梯度下降模拟更大的批尺寸,以供精准估计。 假设想让批尺寸达到128。然后,在执行单个优化器步骤前,将执行16次前向和后向传播(批量大小为8)。
而在Lightning中,这些已经自动执行了。只需设置标记: (编辑:ASP站长网) |