GFlops的数量如何影响神经网络的训练速度
How does the amount of GFlops affect the training speed of neural network
如果一个 gpu/cpu 的 GFlops 是另一个的两倍,这是否意味着该设备上的神经网络将以两倍的速度训练?
每秒 FLOP 或浮点运算是衡量性能的指标,表示计算机执行计算的速度。 GFLOP 就是一个 Giga FLOP。因此,拥有 2 倍 GFLOP 值的 GPU 很可能会加快训练过程。然而,2 的因子有点像 upper-bound,因为您将拥有不依赖于计算能力的其他部分,例如内存速度、RAM 甚至其他条件,例如 GPU/CPU 和其他设备的冷却系统(是的,这会影响计算速度)。在这里你应该问 GPU/CPU 计算实际上占用了多少训练时间?如果它是 80%,那么你可以显着加快训练速度,如果它是 20%,那么可能不会。
如果你确定大部分时间都花在了GPU计算上,那么接下来你应该看看影响FLOP数量的因素:
- 核心数。如果系统有更多的内核,它就会有更多的 FLOP(更多 并行 计算),但这只有在你的代码非常可并行化并且 GPU 比方说内核少两倍的情况下才有用足以一次执行所有这些操作。因此,如果是这种情况,现在您使用 2 倍以上的并行计算,那么训练速度就会降低。这更适用于大型卷积网络,但对于全连接或循环网络效率不高。
- 核心频率。如果 GPU 的核心频率更高 - 它可以计算得更快。这部分非常重要,如果你的 GPU 频率更高,那么任何类型的神经网络的训练都会加快。
- 建筑。您可能听说过不同的 GPU 架构,例如 Pascal、Tesla 等。所以这部分会影响在单个周期中执行的指令数。换句话说,在一个处理器周期中执行了多少条指令,我们在一秒钟内有 'frequency' 个这样的周期。因此,如果一个架构导致两倍以上的 FLOP,那么它也很可能会像上一段那样减少训练时间。
因此很难说您会从更多的 FLOPs 中获得多少收益。如果你使用两个 gpu,那么你将像第 1 段一样将 FLOPs 增加 2。使用两个 GPU 也会增加 GPU 内存,如果单个 GPU 不够用并且代码必须经常从内存中读取数据,这将很有帮助。
因此,FLOPs 对训练速度的影响是相当复杂的,这将取决于很多因素,例如您的网络的并行程度、如何实现更高的 FLOPs 量、内存使用量等。
如果一个 gpu/cpu 的 GFlops 是另一个的两倍,这是否意味着该设备上的神经网络将以两倍的速度训练?
每秒 FLOP 或浮点运算是衡量性能的指标,表示计算机执行计算的速度。 GFLOP 就是一个 Giga FLOP。因此,拥有 2 倍 GFLOP 值的 GPU 很可能会加快训练过程。然而,2 的因子有点像 upper-bound,因为您将拥有不依赖于计算能力的其他部分,例如内存速度、RAM 甚至其他条件,例如 GPU/CPU 和其他设备的冷却系统(是的,这会影响计算速度)。在这里你应该问 GPU/CPU 计算实际上占用了多少训练时间?如果它是 80%,那么你可以显着加快训练速度,如果它是 20%,那么可能不会。 如果你确定大部分时间都花在了GPU计算上,那么接下来你应该看看影响FLOP数量的因素:
- 核心数。如果系统有更多的内核,它就会有更多的 FLOP(更多 并行 计算),但这只有在你的代码非常可并行化并且 GPU 比方说内核少两倍的情况下才有用足以一次执行所有这些操作。因此,如果是这种情况,现在您使用 2 倍以上的并行计算,那么训练速度就会降低。这更适用于大型卷积网络,但对于全连接或循环网络效率不高。
- 核心频率。如果 GPU 的核心频率更高 - 它可以计算得更快。这部分非常重要,如果你的 GPU 频率更高,那么任何类型的神经网络的训练都会加快。
- 建筑。您可能听说过不同的 GPU 架构,例如 Pascal、Tesla 等。所以这部分会影响在单个周期中执行的指令数。换句话说,在一个处理器周期中执行了多少条指令,我们在一秒钟内有 'frequency' 个这样的周期。因此,如果一个架构导致两倍以上的 FLOP,那么它也很可能会像上一段那样减少训练时间。
因此很难说您会从更多的 FLOPs 中获得多少收益。如果你使用两个 gpu,那么你将像第 1 段一样将 FLOPs 增加 2。使用两个 GPU 也会增加 GPU 内存,如果单个 GPU 不够用并且代码必须经常从内存中读取数据,这将很有帮助。
因此,FLOPs 对训练速度的影响是相当复杂的,这将取决于很多因素,例如您的网络的并行程度、如何实现更高的 FLOPs 量、内存使用量等。