一文熟悉如何最大化的利用GPU用于高性能计算领域

AI划重点 · 全文约4982字,阅读需15分钟

1.GPU在自动驾驶系统中具有巨大的应用潜力,但目前大多数智驾系统中的域控GPU算力并未得到充分利用。

2.由于CNN在GPU上的加速效果显著,深度学习框架和库如TensorFlow、PyTorch等针对GPU进行了优化。

3.然而,RNN在GPU上的加速效果相对较弱,但GPU仍然可以提供一定程度的加速,特别是对于大规模的序列数据处理任务。

4.选择合适的GPU技术选项和性能指标对于充分利用GPU资源至关重要,包括消费级GPU、数据中心级GPU和托管工作站等。

5.通过任务分配、并行计算、模型压缩、异步计算和硬件优化等方法,可以有效地利用GPU处理能力,提高自动驾驶系统的感知能力。

以上内容由腾讯混元大模型生成,仅供参考

欢迎关注下方公众号阿宝1990,本公众号专注于自动驾驶和智能座舱,每天给你一篇汽车干货,我们始于车,但不止于车。


最近在研究应用于自动驾驶系统芯片的过程中,发现很多设计全面的SOC上不仅完整的包含了应用于AI算力的NPU/TPU/BPU的运算核心,也有额外设计的图形处理单元 GPU核心,通常这类GPU算力不算大,设计之初也是有意应用于一部分座舱显示领域,比如常规仪表场景重构或渲染等。然而,目前的实际应用中,对于智驾系统的应用算法供应商而言,却很少能够很好的应用到GPU到神经网络中。大多数还是应用NPU/TPU/BPU这些AI运算核心,加上本身的自带的CPU运算核A72或A52诸如此类,而在渲染这一项任务主流的还是应用在了座舱域控的GPU中实现。因此,很多情况下,智驾系统中的域控GPU算力是闲置的。

比如深度学习中的神经网络而言,卷积神经网络(CNN)之所以能够更好地在GPU上运行,主要是因为CNN的计算密集型操作与GPU的并行计算能力相匹配。包括并行化计算、大规模数据处理、优化库和框架、专用硬件支持等。

- 并行化计算:CNN中的卷积和矩阵乘法等操作可以被高度并行化,而GPU天生擅长并行计算,能够同时处理多个计算任务,从而加速神经网络的训练和推理过程。

- 大规模数据处理:训练深度神经网络需要处理大规模的数据集,而GPU具有高内存带宽和大规模并行处理能力,能够更快地处理这些数据,加速训练过程。

- 优化的库和框架:针对GPU设计的深度学习框架(如TensorFlow、PyTorch等)提供了针对GPU优化的计算库和操作,使得在GPU上实现CNN更为高效。

- 专用硬件支持:一些GPU厂商提供专门用于深度学习计算的硬件加速器(如NVIDIA的CUDA、cuDNN等),进一步提高了CNN在GPU上的性能。

举例来说,假设我们有一个卷积神经网络的图像识别任务,需要处理大量的图像数据。在GPU上,我们可以利用其并行计算能力,同时处理多个图像,加速卷积和池化等操作。这样,整个训练或推理过程就可以更快地完成。

图片

然而,这里也不得不提到循环神经网络(RNN)。相对于CNN在GPU上的加速效果,RNN计算过程可能会有所不同,主要取决于RNN的具体结构和应用场景。

- 循环计算:RNN中存在循环计算,每个时间步的计算依赖于前一个时间步的结果。这种依赖关系可能会导致难以实现完全的并行化,从而限制了在GPU上的加速效果。

- 序列长度:较长的序列长度可能会增加GPU上的计算负载,影响加速效果。但对于较短的序列,GPU上的并行计算能力可以更好地发挥作用。

- 优化和并行化:针对RNN结构和序列处理的特点,深度学习框架和库提供了一些优化和并行化策略,如使用cuDNN中的RNN实现,以提高在GPU上的效率。

虽然,RNN在GPU上的加速效果可能不如CNN那么显著,但GPU仍然可以提供一定程度的加速,特别是对于大规模的序列数据处理任务。

基于此,本文将详细介绍如何利用GPU智驾系统中的神经网络,用于诸如大规模卷积计算的场合。

1、为什么使用 GPU 进行深度学习?

图形处理单元 (GPU) 是专用处理核心,可用于加速计算过程。这些核心最初设计用于处理图像和视觉数据。然而,GPU 现在被用来增强其他计算过程,例如深度学习。这是因为 GPU 可以有效地并行用于大规模分布式计算过程。

GPU 的主要优点是并行或同时处理整体的各个部分。有四种用于并行处理实现的架构,包括:单指令、单数据 (SISD);单指令、多数据 (SIMD);多指令、单数据 (MISD);多指令、多数据(MIMD)。

图片

大多数 CPU 都是多核处理器,采用 MIMD 架构运行。相比之下,GPU 使用 SIMD 架构。这种差异使得 GPU 非常适合需要对大量数据项执行相同过程的深度学习过程。

传统上,深度学习管道的训练阶段需要最长的时间才能实现,这不仅是耗时也烧钱。实际上,深度学习管道中最有价值的部分是人为因素。大多数深度学习实现中最长且资源最密集的阶段是训练阶段。对于参数数量较少的模型,可以在合理的时间内完成此阶段,但随着参数数量的增加,训练时间也会增加,这将产生双重成本。其资源被占用的时间更长,团队需要等待,浪费宝贵的时间。

GPU可以降低这些成本,快速高效地运行具有大量参数的模型。这是因为 GPU 能够并行化训练任务,将任务分配到处理器集群上并同时执行计算操作。GPU 还针对执行目标任务进行了优化,比非专用硬件更快地完成计算。这些处理器能够更快地处理相同的任务,并释放 CPU 来执行其他任务,这消除了计算限制造成的瓶颈。

图片

GPU 可以同时执行多个计算,实现训练过程的分布,并可以显着加快机器学习操作的速度。借助 GPU,可以积累许多使用更少资源的核心,而不会牺牲效率或功耗。

2、针对于深度学习的 GPU 技术选项有哪些呢?

由前文分析,先进的深度学习框架如何使用 GPU呢?实际上,在设计深度学习架构时,对于 GPU 的选择取决于以下几个因素:

内存带宽:GPU 可以提供容纳大型数据集所需的带宽。这是因为 GPU 包含专用视频 RAM (VRAM),能够保留 CPU 内存用于其他任务。

数据集大小:并行 GPU 比 CPU 更容易扩展,能够更快地处理海量数据集。数据集越大,从 GPU 中获得的好处就越大。

优化:GPU 的一个缺点是长时间运行的单个任务的优化有时比 CPU 更困难。

目前在GPU的技术选型中,NVIDIA 占据市场主导地位,将 GPU 融入深度学习实施时,仍有多种选择。在这些选项中,可以选择消费级 GPU、数据中心 GPU 和托管工作站。

消费级 GPU 不适合大规模深度学习项目,但可以提供实施的切入点。这些 GPU 能够以低廉的成本补充现有系统,并且可用于模型构建或低级测试。虽然消费级 GPU 不适合大规模深度学习项目,但这些处理器可以为深度学习提供良好的切入点。消费级 GPU 还可以作为不太复杂的任务(例如模型规划或低级测试)的高性价比补充。然而,当扩大规模时,就需要考虑数据中心级 GPU 和高端深度学习系统,例如 NVIDIA 的 DGX 系列。

数据中心 GPU 是生产深度学习实施的标准。这些 GPU 专为大型项目而设计,可以提供企业级性能,比如Google 张量处理单元 (TPU)。作为一种由谷歌设计用于加速人工智能工作负载的专用硬件,TPU在处理大规模机器学习工作负载时表现出色,特别是在处理与神经网络相关的任务时。虽然 Google TPU 不是 GPU,但它们提供了通常用于深度学习工作负载的 NVIDIA GPU 的替代方案。

在实际应用中,在处理人工智能和深度学习等工作负载时,TPU通常比GPU更有效。特别是,在没有TPU或者TPU资源不充分的情况下,将GPU作为TPU的补充是一个非常不错的选择。

图片

基于此,可以采取以下措施进行GPU补充TPU/NPU应用这类AI算力资源池的策略优化:

- 任务分配:将适合GPU处理的任务分配给GPU,而将TPU用于处理其余任务。

- 混合使用:在没有TPU可用时,利用GPU执行与神经网络相关的任务,以提高整体计算性能。

- 性能调优:对GPU进行性能调优,以最大限度地提高其在处理人工智能工作负载时的效率。

最后,GPU工作站主要是指企业级全栈解决方案,类似NVIDIA DGX 服务器,这些系统专为机器学习和深度学习操作而设计。系统是即插即用的,可以部署在裸机服务器或容器中。

3、针对于深度学习的 GPU 性能有哪些呢?

除开以上的技术选型外,还要充分考虑在深度学习中的GPU 性能指标。因为,GPU 是一种昂贵的资源,需要对其进行优化以获得可持续的投资回报。然而,许多深度学习项目仅利用了 10-30% 的 GPU 资源,这通常是由于分配效率低下。为了确保有效地使用 GPU 投资,需要监控并应用以下实际应用指标。

3.1、GPU利用率

GPU利用率指标衡量GPU内核运行时间的百分比(即 GPU 利用率)。可以使用这些指标来确定 GPU 容量要求并识别管道中的瓶颈。比如,可以通过 NVIDIA 的系统管理界面 (NVIDIA-smi) 访问该指标。

如果发现资源利用不足,也许能够更有效地分配流程。相比之下,最大利用率意味着可以从在操作中动态的添加 GPU 中受益。

3.2、GPU内存访问和使用

GPU 内存访问和使用指标衡量 GPU 内存控制器的使用时间百分比,其中包括读和写操作。可以使用这些指标来优化训练的批量大小并衡量深度学习程序的效率。可以通过NVIDIA-smi 访问内存指标的完整列表。

3.3、电力使用和温度

功耗和温度指标使能够测量系统的工作强度,并可以帮助预测和控制功耗。这些指标通常在电源单元处测量,包括计算和内存单元以及冷却元件使用的资源。这些指标很重要,因为过高的温度可能会导致热节流,从而减慢计算过程或损坏硬件。

3.4、解决问题的时间

解决问题时间是一个整体指标,可以定义所需的准确度水平,并了解训练模型达到该准确度水平需要多长时间。对于不同的 GPU,训练时间会有所不同,具体取决于运行的模型、分布策略和数据集。选择 GPU 设置后,可以使用求解时间测量来调整批量大小或利用混合精度优化来提高性能。

3.5、GPU 互连能力

为了显着减少训练时间,完全可以使用GPU进行有效的深度学习,以便能够并行执行 AI 计算操作。选择GPU时,需要考虑哪些单元可以互连。GPU互连与实施的可扩展性以及使用多 GPU 和分布式训练策略的能力直接相关。而评估 GPU 时,需要考虑互连多个 GPU 的能力、可用的支持软件、许可、数据并行性、GPU 内存使用和性能。

4、影响 GPU 使用的算法因素有哪些?

根据优化大规模深度学习工作负载的经验,以下是在跨多个 GPU 扩展算法时应考虑的三个关键因素。

- 数据并行性:考虑具体算法需要处理多少数据。如果数据集很大,那么投资能够高效执行多 GPU 训练的 GPU。对于超大规模数据集,需要确保服务器之间以及与存储组件之间能够非常快速地通信,使用 Infiniband/RoCE 等技术,以实现高效的分布式训练。

内存使用首先需要确认处理模型的大量数据输入情况。例如,处理车载高清视频图像或长视频的模型具有非常大的训练集,因此需要投资具有相对较大内存的 GPU。相比之下,表格数据(例如 NLP 模型的文本输入)通常很小,可以使用较少的 GPU 内存。

GPU 的性能考虑是否要使用 GPU 进行调试和开发。在这种情况下,不需要最强大的 GPU。为了在长时间运行中调整模型,就需要强大的 GPU 来加快训练时间,以避免模型运行等待数小时或数天。

以下是推荐用于大型 AI 项目的 GPU--NVIDIA DGX,其可以用于大规模深度学习示例。NVIDIA DGX 系统是专为企业级机器学习而设计的全栈解决方案。这些系统基于针对人工智能、多节点可扩展性和企业级支持进行优化的软件堆栈。在容器或裸机上实施 DGX 堆栈。该技术旨在即插即用,并与 NVIDIA 深度学习库和软件解决方案完全集成。DGX 可用于服务器级工作站、服务器或 Pod。

图片

5、介绍了这么多,那么到底哪种 GPU 更适合深度学习呢?

实际上,没有简单的答案。最适合项目的 GPU 将取决于 AI 操作的成熟度、操作的规模以及使用的特定算法和模型。在前面的部分中,有提供许多设计关键要素都可以帮助选择最适合需求的 GPU 或 GPU 组。

图片

GPU 在实施深度学习基础设施时可以节省时间和成本。通过了解如何评估 GPU 可以很好的确定哪种 GPU 最适合深度学习模型,探索消费者和数据中心的深度学习 GPU 类型。以上这些因素会影响选择的 GPU 的可扩展性和易用性。

当然,实施选择 GPU 会对预算和性能产生重大影响,且需要选择能够长期支持项目并能够通过集成和集群进行扩展的 GPU。对于大型项目,这意味着选择生产级或数据中心 GPU。

回到自动驾驶中,要想简单且更好地利用GPU的处理能力则取决于具体的神经网络任务和系统设计。一般来说,可以考虑以下几个方面来优化GPU的利用:

任务分配:根据神经网络任务的特点,合理分配任务到GPU上。比如,将需要大量计算的深度学习任务分配给GPU,而将一些轻量级的任务留给CPU处理。

并行计算:利用GPU强大的并行计算能力,设计并行化的神经网络结构和算法,以充分利用GPU的性能。例如,使用批量处理技术(batch processing)来同时处理多个输入数据。

模型压缩:对神经网络模型进行压缩和优化,以减少计算和存储需求,从而提高在GPU上的运行效率。例如,使用轻量级模型或剪枝技术来减少模型参数。

异步计算:利用GPU的异步计算能力,将计算和数据传输等操作重叠进行,GPU 最初是为加速图形处理而开发的,可以极大地加快深度学习的计算过程以提高整体计算效率。例如,在GPU执行计算的同时,CPU可以准备下一批数据,从而减少等待时间。
硬件优化:针对具体的GPU硬件特性进行优化,例如利用GPU的特殊指令集或专门的深度学习加速器(如NVIDIA的CUDA、cuDNN等),以提高神经网络的计算性能。

举例来说,在自动驾驶中,如果需要进行实时目标检测任务,可以将目标检测模型部署在GPU上进行处理。利用GPU的并行计算能力,可以同时处理多个摄像头的视频流,并快速识别出道路上的行人、车辆等目标,从而提高自动驾驶系统对周围环境的感知能力。

总结

GPU是现代人工智能基础设施的重要组成部分,专门针对深度学习开发和优化使用已有 GPU算力并开发适配度更强的GPU,充分利用GPU 来完成大型并行运算能力的深度学习项目将是一个比较重要的课题。