首页 文章

计算GPU(Tesla K40c)比图形GPU(GTX 960)慢

提问于
浏览
5

我正在两台不同的机器上深入学习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上运行代码 . 有人可以帮我解释为什么数字如此不同?

  • 数据集:CIFAR-10(32x32 RGB图像)

  • 型号批量:128

  • 型号参数:1.2M

  • 操作系统:Ubuntu 16.04

  • Nvidia驱动程序版本:384.111

  • Cuda版本:7.5,V7.5.17

如果您需要更多数据,请与我们联系 .

编辑1 :(添加CPU信息)

  • 机器A(GTX 960):8核 - 英特尔(R)核心(TM)i7-6700 CPU @ 3.40GHz

  • 机器B(特斯拉K40c):8核 - 英特尔(R)Xeon(R)CPU E5-2637 v4 @ 3.50GHz

1 回答

  • 0

    TL;DR: 使用更大的批量大小再次测量 .

    这些结果并没有让我感到惊讶 . 认为昂贵的特斯拉卡(或者说GPU)可以自动更快地完成所有操作,这是一个常见的错误 . 您必须了解GPU如何工作以利用其功能 .

    如果比较设备的基本时钟速度,您会发现您的Xeon CPU速度最快:

    • Nvidia K40c:745MHz

    • Nvidia GTX 960:1127MHz

    • Intel i7:3400MHz

    • Intel Xeon:3500MHz

    这会给你一些这些设备运行速度的提示,并给出一个非常粗略的估计,如果他们一次只做一件事,即没有并行化,他们可以多快地处理数字 .

    如你所见,GPU根本不快(对于某些快速定义),实际上它们非常慢 . 另请注意K40c实际上比GTX 960慢 . 然而,GPU的真正威力来自于它同时处理大量数据的能力!如果你现在再次检查这些设备上可以进行多少并行化,你会发现你的K40c毕竟不是那么糟糕:

    • Nvidia K40c:2880 cuda核心

    • Nvidia GTX 960:1024 cuda核心

    • Intel i7:8个线程

    • Intel Xeon:8个线程

    同样,这些数字可以让您粗略估计这些设备可以同时执行的操作 .

    Note: 我正在严格简化:绝对没有办法将CPU核心与cuda核心相媲美!它们是非常不同的东西 . 并且绝不能像这样比较基本时钟频率!它正在发生 .

    因此,您的设备需要能够并行处理大量数据,以便最大化其吞吐量 . 幸运的是,tensorflow已经为您做到了这一点:它将自动并行化所有重型矩阵乘法,以获得最大吞吐量 . 然而,如果矩阵具有一定的大小,这只会很快 . 您的批量大小设置为128,这意味着几乎所有这些矩阵的第一个维度都设置为128.我没有容量:增加完全连接层中的单位数和卷积层中的过滤器数量 . 添加更多图层可能无济于事 . nvidia-smi 工具的输出对于了解GPU的实际繁忙程度也非常有用 .

    但请注意,更改模型的超参数和/或批量大小当然会对模型如何成功训练产生巨大影响,当然您也可能会遇到内存限制 .

    也许如果不增加批量大小或更改模型,您也可以尝试在K40c上同时训练两个模型以利用空闲核心 . 但是我从未尝试过这个,所以它可能根本不起作用 .

相关问题