SUB*_*SUB 6 gpu deep-learning keras tensorflow
我正在两台不同的机器上深入学习CNN(4-CNN层和3个FNN层)模型(用Keras编写,张量流作为后端).
我有2台机器(A:配备GTX 960显卡GPU,2GB内存和时钟速度:1.17 GHz,B:带特斯拉K40计算GPU,12GB内存和时钟速度:745MHz)但是当我在A上运行CNN模型时:
Epoch 1/35
50000/50000 [==============================] - 10s 198us/step - loss: 0.0851 - acc: 0.2323
在B上:
Epoch 1/35
50000/50000 [==============================] - 43s 850us/step - loss: 0.0800 - acc: 0.3110
这些数字甚至无法比较.我很擅长深入学习和在GPU上运行代码.有人可以帮我解释为什么数字如此不同?
如果您需要更多数据,请与我们联系.
编辑1 :(添加CPU信息)
TL;DR:以更大的批量大小再次测量。
这些结果并不令我感到惊讶。人们普遍错误地认为昂贵的 Tesla 卡(或 GPU)会自动更快地完成所有工作。您必须了解 GPU 的工作原理才能利用其强大功能。
如果您比较设备的基本时钟速度,您会发现您的 Xeon CPU 具有最快的:
这可以让您了解这些设备的运行速度,并给出一个非常粗略的结果估计它们一次只做一件事(即没有并行化)时处理数字的速度。
正如您所看到的,GPU 根本不快(对于快速的某些定义),事实上它们相当慢。另请注意,K40c 实际上比 GTX 960 慢。然而,GPU 的真正威力来自于它同时处理大量数据的能力!如果您现在再次检查这些设备上可以实现多少并行化,您会发现您的 K40c 毕竟还不错:
同样,这些数字可以让您非常粗略地估计这些设备可以同时执行多少操作。
注意:我正在严重简化事情:CPU 核心绝对不能与 cuda 核心相媲美!它们是非常非常不同的东西。并且根本无法像这样比较基本时钟频率!这只是为了让大家了解正在发生的事情。
因此,您的设备需要能够并行处理大量数据,以便最大限度地提高吞吐量。幸运的是,tensorflow 已经为您做到了这一点:它将自动并行化所有这些繁重的矩阵乘法以获得最大吞吐量。然而,只有当矩阵具有一定大小时,这才会很快。您的批量大小设置为 128,这意味着几乎所有这些矩阵的第一个维度都设置为 128。我不知道您的模型的详细信息,但如果其他维度也不大,那么我怀疑大多数在这些矩阵乘法期间,您的 K40c 保持空闲状态。尝试增加批量并再次测量。您应该发现,与 GTX 960 相比,较大的批量大小将使 K40c 更快。增加模型容量也是如此:增加全连接层中的单元数量和卷积层中的滤波器数量。添加更多层可能不会有帮助。该nvidia-smi工具的输出对于了解 GPU 的实际繁忙程度也非常有用。
但请注意,更改模型的超参数和/或批量大小当然会对模型如何成功训练产生巨大影响,当然您也可能会遇到内存限制。
也许如果无法增加批量大小或更改模型,您也可以尝试在 K40c 上同时训练两个模型以利用空闲内核。不过我从来没有尝试过这个,所以它可能根本不起作用。
| 归档时间: |
|
| 查看次数: |
557 次 |
| 最近记录: |