目前,我正在从事一些使用前馈神经网络对简单表格数据进行回归和分类的项目。我注意到使用 TensorFlow-GPU 训练神经网络通常比使用 TensorFlow-CPU 训练相同的网络要慢。
我的设置/代码可能有问题,或者有时 GPU 可能比 CPU 慢?
目前,我正在从事一些使用前馈神经网络对简单表格数据进行回归和分类的项目。我注意到使用 TensorFlow-GPU 训练神经网络通常比使用 TensorFlow-CPU 训练相同的网络要慢。
我的设置/代码可能有问题,或者有时 GPU 可能比 CPU 慢?
这会根据您的数据和模型的复杂性而变化。请参阅microsoft的以下文章。他们的结论是
结果表明,对于所有模型和框架,GPU 集群的吞吐量始终优于 CPU 吞吐量,证明 GPU 是深度学习模型推理的经济选择。...
需要注意的是,对于参数数量不如深度学习模型多的标准机器学习模型,CPU 仍应被视为更有效且更具成本效益。
由于您正在训练 MLP,因此不能将其视为标准机器学习模型。请参阅我的预印本,使用大型训练数据集 KDD99 对分类准确度的影响。我使用 weka 比较了不同的机器学习算法。
从上图中可以看出,MLP 需要 722 分钟来训练,而朴素贝叶斯大约需要 2 分钟。如果您的数据很小并且您的模型参数不高,那么您会在 CPU 上看到更好的性能。
我建议您始终使用 GPU 而不是 CPU 来训练您的模型。这是由对数据非常丰富的图像和文本使用深度学习方法推动的。
您必须有一个非常适合训练的 GPU(例如 NVIDIA 1080、NVIDIA Titan 或更高版本),如果您没有强大的 GPU,我不会惊讶地发现您的 CPU 更快。
这取决于,如果你要解决一个“简单”的问题,它不需要 CNN 或没有多维数据且没有很多乘法的堆叠模型,那么如果你决定使用 CNN / 堆叠架构和 GPU,那就像使用锤子一样插入针头。它不仅会消耗能量,而且计算会在内存中进行零填充,您会观察到速度下降。