高效的管道设计对数据科学家至关重要。在编写复杂的端到端工作流时,您可以从各种构建块中进行选择,每种构建块都专门用于特定任务。不幸的是,在数据格式之间重复转换容易出错,而且会降低性能。让我们改变这一点!
在本系列文章中,我们将讨论高效框架互操作性的不同方面:
- 在第一个职位中,讨论了不同内存布局以及异步内存分配的内存池的优缺点,以实现零拷贝功能。
- 在这篇文章中,我们将重点介绍数据加载/传输过程中出现的瓶颈,以及如何使用远程直接内存访问( RDMA )技术来缓解这些瓶颈。
- 在第三篇文章中,我们深入讨论了端到端管道的实现,展示了所讨论的跨数据科学框架的最佳数据传输技术。
要了解有关框架互操作性的更多信息,请查看 NVIDIA GTC 2021 年会议上的演示。
数据加载和数据传输瓶颈
数据加载瓶颈
到目前为止,我们假设数据已经加载到内存中,并且使用了单个 GPU 。本节重点介绍了 MIG 在将数据集从存储器加载到设备内存或使用单节点或多节点设置在两个 GPU 之间传输数据时出现的几个瓶颈。然后我们讨论如何克服它们。
在传统工作流(图 1 )中,当数据集从存储器加载到 GPU 内存时,数据将使用 CPU 和 PCIe 总线从磁盘复制到 GPU 内存。加载数据至少需要两份数据副本。第一种情况发生在将数据从存储器传输到主机内存( CPU RAM )时。将数据从主机内存传输到设备内存( GPU VRAM )时,会出现数据的第二个副本。

或者,使用利用 NVIDIA Magnum IO GPUDirect Storage 技术的基于 GPU 的工作流(见图 2 ),数据可以使用 PCIe 总线直接从存储器流向 GPU 存储器,而无需使用 CPU 或主机存储器。由于数据只复制一次,因此总体执行时间缩短。不涉及此任务的 CPU 和主机内存也使这些资源可用于管道中其他基于 CPU 的作业。

节点内数据传输瓶颈
某些工作负载要求位于同一节点(服务器)中的两个或多个 GPU 之间进行数据交换。在 NVIDIA GPUDirect Peer to Peer 技术不可用的情况下,来自源 GPU 的数据将首先通过 CPU 和 PCIe 总线复制到主机固定共享内存。然后,数据将通过 CPU 和 PCIe 总线从主机固定共享内存复制到目标 GPU 。请注意,数据在到达目的地之前复制了两次,更不用说 CPU 和主机内存都参与了这个过程。图 3 描述了前面描述的数据移动。

当 GPU 直接对等技术可用时,将数据从源 GPU 复制到同一节点中的另一 GPU 不再需要将数据临时转移到主机内存中。如果两个 GPU 都连接到同一 PCIe 总线, GPU 直接 P2P 允许在不涉及 CPU 的情况下访问其相应的内存。前者将执行相同任务所需的复制操作数量减半。图 4 描述了刚才描述的行为。

节点间数据传输瓶颈
在 NVIDIA GPUDirect Remote Direct Memory Access 技术不可用的多节点环境中,在不同节点的两个 GPU 之间传输数据需要五个复制操作:
- 第一次复制发生在将数据从源 GPU 传输到源节点中主机固定内存的缓冲区时。
- 然后,该数据被复制到源节点的 NIC 驱动程序缓冲区。
- 在第三步中,数据通过网络传输到目标节点的 NIC 驱动程序缓冲区。
- 将数据从目标节点 NIC 的驱动程序缓冲区复制到目标节点中主机固定内存的缓冲区时,会发生第四次复制。
- 最后一步需要使用 PCIe 总线将数据复制到目标 GPU 。
这样总共进行了五次复制操作。真是一次旅行,不是吗?图 5 描述了前面描述的过程。

启用 GPU 直接 RDMA 后,数据拷贝数将减少到一个。共享固定内存中不再有中间数据拷贝。我们可以在一次运行中直接将数据从源 GPU 复制到目标 GPU 。与传统设置相比,这为我们节省了四个不必要的复制操作。图 6 描述了这个场景。

结论
在我们的第二篇文章中,您已经了解了如何利用 NVIDIA GPU 直接功能来进一步加快管道的数据加载和数据分发阶段。
在我们三部曲的第三部分中,我们将深入研究医学数据科学管道的实现细节,该管道用于连续测量的心电(ECG)流中的心跳异常检测。