当前位置:   article > 正文

李沐动手学深度学习V2-多GPU数据并行内容和手动实现代码_当模型大小超过gpu显存,gpu之间如何进行数据并行的切分

当模型大小超过gpu显存,gpu之间如何进行数据并行的切分

1.多GPU并行

1.1 多GPU并行方式

  1. 模型并行:在多个GPU之间拆分网络。 也就是说,每个GPU将流入特定层的数据作为输入,跨多个后续层对数据进行处理,然后将数据发送到下一个GPU。 与单个GPU所能处理的数据相比,我们可以用更大的网络处理数据。 此外,每个GPU占用的显存(memory footprint)可以得到很好的控制,虽然它只是整个网络显存的一小部分。比如前五个层用第一个GPU计算,后面五个层用第二个GPU计算
    缺点:GPU的接口之间需要的密集同步可能是很难办的,特别是层之间计算的工作负载不能正确匹配的时候, 还有层之间的接口需要大量的数据传输的时候(例如:激活值和梯度,数据量可能会超出GPU总线的带宽)。 此外,计算密集型操作的顺序对于拆分来说也是非常重要的,这仍然是一个困难的问题,目前还不清楚研究是否能在特定问题上实现良好的线性缩放。 综上所述,除非存框架或操作系统本身支持将多个GPU连接在一起,否则不建议这种方法。
  2. 通道并行:拆分层内的工作。 例如,将问题分散到 4 个GPU,每个GPU生成 16 个通道的数据,而不是在单个GPU上计算 64 个通道, 对于全连接的层,同样可以拆分输出单元的数量。以前通常用于处理显存非常小(当时为2GB)的GPU,当通道或单元的数量不太小时,使计算性能有良好的提升。 此外,由于可用的显存呈线性扩展,多个GPU能够处理不断变大的网络。
    缺点:同样需要大量的同步或屏障操作(barrier operation),因为每一层都依赖于所有其他层的结果。 此外,需要传输的数据量也可能比跨GPU拆分层时还要大。 因此,基于带宽的成本和复杂性,我们同样不推荐这种方法。
  3. 数据并行:跨多个GPU对数据进行拆分。 这种方式下,所有GPU尽管有不同的观测结果,但是执行着相同类型的工作。 在完成每个小批量数据的训练之后,梯度在GPU上聚合。 这种方法最简单,并可以应用于任何情况,同步只需要在每个小批量数据处理之后进行。 也就是说,当其他梯度参数仍在计算时,完成计算的梯度参数就可以开始交换。而且,GPU的数量越多,小批量包含的数据量就越大,从而就能提高训练效率。 但是,添加更多的GPU并不能让我们训练更大的模型,因为每个GPU仍然包含模型的全部权重参数和梯度等。 总体而言,只要GPU的显存足够大,数据并行是最方便的,三种方式如下图所示。
    多GPU并行的三种方式

1.2 详细介绍多GPU的数据并行

假设一台机器有

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/261567
推荐阅读
相关标签