发布于: Jan 11, 2022

GPU 运算能力决定了深度学习的训练速度,强大的 GPU 有望将训练周期由几个礼拜缩短至数小时。但要全面发挥 GPU 资源的强大性能,我们还需要考量以下因素:

  • 优化代码以保证底层硬件得到充分利用。
  • 使用最新高性能库与 GPU 驱动程序。
  • 优化 I/O 与网络操作,确保数据能够以与计算能力相匹配的速率被送至 GPU 处。
  • 在多 GPU 或分布式训练期间,优化 GPU 之间的通信。

Amazon SageMaker 是一项全托管服务,能够帮助开发人员与数据科学家快速、轻松地构建、训练并部署任意规模的机器学习ML)模型。在本文中,我们将重点介绍在 Amazon SageMaker 上进行训练时,能够切实提高 I/O 以优化 GPU 性能的通用型技术。这些技术方法具有良好的普适性,不对基础设施或深度学习框架本身做出任何要求。通过优化 I/O 处理例程,整个 GPU 训练中的性能提升最多可提升至 10 倍水平。

基础知识

单一 GPU 每秒可执行万亿次浮点运算(TFLOPS),意味着其运算执行速度可达到普通 CPU 101000 倍。为了让 GPU 正常执行这些运算,数据必须被存放在 GPU 内存当中。将数据加载至 GPU 内存中的速度越快,运算执行速度也就越快。其中的挑战在于如何优化 I/O 或网络操作,保证 GPU 在计算当中不必反复等待数据的传入。

下图所示,为 I/O 优化架构。

 

将数据放置进 GPU 内存通常涉及以下操作步骤:

  • 网络操作 —— Amazon Simple Storage Service (Amazon S3) 处下载数据
  • 磁盘 I/O —— 将数据从本地磁盘读入 CPU 内存。这里的本地磁盘是指实例存储,相关存储容量位于物理接入主机的磁盘之上。 Amazon Elastic Block Store (Amazon EBS)  存储卷不属于本地资源,其中涉及网络操作步骤。
  • 数据预处理—— 一般来说,数据预处理工作主要由 CPU 负责完成,包括转换或者调整大小等。这些操作可能包括将图像或文本转换为张量形式、或者调整图像大小等。

数据传输至 GPU 内存 —— 将处理后的数据从 CPU 内存复制到 GPU 内存

 

相关文章