使用 Keras 进行多 GPU 训练的 5 个技巧

深度学习(2010 年代后期最受欢迎的流行词,与区块链/比特币和数据科学/机器学习一起)使我们在过去几年中做了一些非常酷的事情。除了算法的进步(诚然,这些进步是基于自 1990 年代即“数据挖掘时代”以来已知的思想)之外,其成功的主要原因可以 […]

来源:DatumBox - 机器学习、统计和软件开发博客

深度学习(2010 年代后期最受欢迎的流行词,与区块链/比特币和数据科学/机器学习并列)让我们在过去几年中做了一些非常酷的事情。除了算法的进步(诚然,这些进步是基于自 1990 年代即“数据挖掘时代”以来已知的思想)之外,其成功的主要原因可以归因于大量免费数据集的可用性、开源库的引入以及 GPU 的使用。在这篇博文中,我将重点介绍后两者,并与您分享一些我从艰难经历中学到的技巧。

为什么选择 TensorFlow 和 Keras?

TensorFlow 是一个非常流行的深度学习库,由 Google 开发,可让您快速制作复杂网络的原型。它具有许多有趣的功能,例如自动微分(这使您无需估计/编码成本函数的梯度)和 GPU 支持(这使您能够使用合适的硬件轻松获得 200 倍的速度提升)。此外,它还提供了一个 Python 接口,这意味着您可以快速制作原型,而无需编写 C 或 CUDA 代码。诚然,有很多其他框架可以代替 TensorFlow,例如 Torch、MXNet、Theano、Caffe、Deeplearning4j、CNTK 等,但这一切都取决于您的用例和个人偏好。

TensorFlow Keras 塔塔塔,Keras 来救你了! François Chollet

多 GPU 训练的技巧和陷阱

事不宜迟,让我们来看看如何在 Keras 上充分利用 GPU 训练的一些技巧,以及您应该记住的几个陷阱:

1. 多 GPU 训练不是自动的

mutli_gpu_model

2. 注意批次大小

进行多 GPU 训练时,请注意批次大小,因为它对速度/内存、模型收敛有多种影响,如果您不小心,可能会破坏模型权重!

速度/内存: 收敛性: Keskar 等人 关于可扩展深度学习和并行化梯度下降 破坏权重: 发布 GIL 原始博客文章