带你读《弹性计算技术指导及场景应用》——1. 技术改变AI发展:CUDA Graph优化的底层原理分析

本文涉及的产品
资源编排,不限时长
无影云电脑企业版,4核8GB 120小时 1个月
无影云电脑个人版,1个月黄金款+200核时
简介: 带你读《弹性计算技术指导及场景应用》——1. 技术改变AI发展:CUDA Graph优化的底层原理分析

简介:随着人工智能(AI)的迅速发展,越来越多的应用需要巨大的GPU计算资源。CUDA是一种并行计算平台和编程模型,由Nvidia推出,可利用GPU的强大处理能力进行加速计算。

CUDA 异步执行模型

对于GPU运算集中的AI应用场景,为了提升系统的性能,最大化地利用GPU资源是一个重要的优化方向。比较常用的方式是尽量将GPU运算转换为异步操作,CPU侧负责任务提交,保证有足够的cuda kernel发送到GPUGPU按照CUDA Stream流队列中的Kernel顺序执行。只要这中间不存在同步操作,GPU完全可以不用等待,顺序地将所有的kernel执行完,然后再通知CPUCPU运算和GPU运算是相互独立的协作关系。

 

以上的模型是一个理想化的状态,听起来合乎逻辑,而且很完美。大致的运行效果如图1。可以看到CPU通过CUDA API已经将Kernel提前准备好,GPU的任务一个接一个。GPU的利用率也比较高。

 

image.png

1 GPU异步执行的典型场景

 

对于一般的性能优化,达到这种状态已经很好了。但如果想进一步的优化就需要知道模型的实际运行情况。随着GPU算力的提升,计算任务的执行时间在慢慢缩小,一个GPU执行单元可能在us或者ms级完成。

 

通常情况下一个好的AI运算框架或模型应该尽量让GPU Kernel的运算时间长一些,从而使得GPU的性能能够更好地发挥,因为有个事实是:GPU Kernel提交到硬件也是有开销的,虽然这个时间可能只有0.x us。这里的提交不是指的cudaLaunchKernel而是更底层驱动和硬件之间的真正的提交。

 

如果业务场景中有很多小的usKernel要执行,则整个系统的性能会随着短Kernel的比例增加整体性能输出越来越差,GPU资源并不能充分利用起来。

CUDA Graph 性能优化效果

CUDA Graph可以通过CaptureCreate的方式将多个Kernel组合在一起生成一个Graph,与Kernel融合不同,在Graph内部仍然是多个Kernel的形式存在,但提交操作只需要一次,如果可以将尽量多的Kernel组合在一起,那么理论上可以节约很多Kernel提交的开销。

 

CUDA Graph也有其自身的限制,它的设计思路是将多个任务单元作为一个快照进行组合,也就意味着这个快照的参数和结构组成是固定的,不能变换,同时实例化这个快照是比较耗时的,但如果这个快照被反复执行(replay)的次数足够多,实例化快照的时间是可以忽略的。

 

以一个简单的Kernel为例介绍CUDA Graph是如何影响性能输出的。这里需要自己开发构造一个Kernel:可以根据运算复杂度调整执行时间,但在运行过程中没有HostDevice侧的数据交互。

 

以下分析均基于这个自定义Kernel进行。通过对比CUDA Graph优化前后的性能数据(图2)可以看到CUDA Graph对于执行时间越小的Kernel性能提升越明显,原因是Kernel提交的开销占比会更大(假设单次提交的开销是固定的,接下来会证明这一假设)。

 

image.png

图 不同执行时间kernel CUDA Graph优化后性能提升对照表

CUDA Graph 性能优化原理

为什么Kernel的提交会有系统开销并最终影响到GPU卡的性能输出?

 

从图1GPU异步执行逻辑来看,GPU完全可以按照CUDA Stream的队列顺序自己控制Kernel的执行节奏,只要队列中的任务足够,就能输出最大的性能。

 

Kernel提交的开销究竟在哪里?

 

3 可以有一个侧面的解释。在Kernel的执行过程中是有持续的双向数据流量的。而且这个流量和Kernel的执行时间是成反比的。这是个很重要的信息,因为Kernel执行过程中是没有运算数据流量的,HostToDevice的流量就是CPUKernel提交产生的,DeviceToHost的流量就是GPU执行完Kernel需要和Host交互产生的。而且这个流量是和Kernel的提交频率有关,和Kernel本身并没有关系。

 

image.png

图 不同执行时间kernel对应的GPU流量对照表

 

进一步研究Kernel提交究竟会有多大的数据流量,图4 做了一个展示,单次Kernel的提交产生数据流量大约在1KBGPU执行与Host同步的数据量大约在0.22KB,而且从统计结果看与Kernel的大小无关。这也可以证明前面的假设:Kernel的提交开销总体上是固定的。

 

image.png

4. 不同Kernel单次提交产生的数据流量对照表

CUDA Graph引入分析总结:

∙        cuda kernel在执行时存在确定的HostDevice侧交互

∙        交互的频率或流量与cuda kernel的提交频率有关,与cuda kernel大小无关

∙        CUDA Graph通过组合Kernel的方式可以将Kernel提交频率大幅降低,提高GPU的性能输出,但对于执行时间长的Kernel性能优化不明显。

∙        对于HostDevice端延时明显的场景,这种优化都是有益的。因为这个Kernel的提交开销本质上就是H2D 延时的开销,延时越小Kernel提交的效率就越高。

∙        对于物理机为了能够得到极致的性能可以尽量减少中间PCIe Switch的级数,因为每一级的switch引入RTT延时大约在0.3us,我们目前使用的GPU Box机型普遍有2Switch,引入RTT延时在0.6us。如果是采用gn7i的机型,GPU卡直连PCIe Root Complex,这0.6us是完全没有的,性能表现在小Kernel占比较高的场景中会更优越。

相关实践学习
部署Stable Diffusion玩转AI绘画(GPU云服务器)
本实验通过在ECS上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。
相关文章
|
5天前
|
机器学习/深度学习 人工智能 算法
AI技术在医疗诊断中的应用及前景展望
本文旨在探讨人工智能(AI)技术在医疗诊断领域的应用现状、挑战与未来发展趋势。通过分析AI技术如何助力提高诊断准确率、缩短诊断时间以及降低医疗成本,揭示了其在现代医疗体系中的重要价值。同时,文章也指出了当前AI医疗面临的数据隐私、算法透明度等挑战,并对未来的发展方向进行了展望。
|
13天前
|
机器学习/深度学习 人工智能 自然语言处理
当前AI大模型在软件开发中的创新应用与挑战
2024年,AI大模型在软件开发领域的应用正重塑传统流程,从自动化编码、智能协作到代码审查和测试,显著提升了开发效率和代码质量。然而,技术挑战、伦理安全及模型可解释性等问题仍需解决。未来,AI将继续推动软件开发向更高效、智能化方向发展。
|
9天前
|
机器学习/深度学习 人工智能 算法
AI在医疗诊断中的应用
【10月更文挑战第42天】本文将探讨人工智能(AI)在医疗诊断中的应用,包括其优势、挑战和未来发展方向。我们将通过实例来说明AI如何改变医疗行业,提高诊断的准确性和效率。
|
10天前
|
存储 人工智能 搜索推荐
Memoripy:支持 AI 应用上下文感知的记忆管理 Python 库
Memoripy 是一个 Python 库,用于管理 AI 应用中的上下文感知记忆,支持短期和长期存储,兼容 OpenAI 和 Ollama API。
51 6
Memoripy:支持 AI 应用上下文感知的记忆管理 Python 库
|
2天前
|
机器学习/深度学习 人工智能 并行计算
【AI系统】NVLink 原理剖析
随着AI技术的发展,大模型参数量激增,对底层硬件和网络架构提出新挑战。高效训练这些模型需要大规模GPU集群及高速网络连接,以实现快速数据交换。然而,网络瓶颈限制了GPU性能的充分发挥,表明单纯增加GPU数量不能线性提升算力。因此,算存互连和算力互连技术成为关键,如PCIe、NVLink和NVSwitch等,它们通过提高数据传输速度和效率,支持大规模并行计算,解决了大规模GPU集群中的通信延迟问题,推动了万亿级模型训练的实现。
14 2
|
4天前
|
机器学习/深度学习 人工智能 搜索推荐
AI技术在医疗领域的应用####
本文探讨了人工智能(AI)技术在医疗领域的创新应用及其带来的革命性变化。通过分析AI在疾病诊断、个性化治疗、药物研发和患者管理等方面的具体案例,展示了AI如何提升医疗服务的效率和准确性。此外,文章还讨论了AI技术面临的挑战与伦理问题,并展望了未来的发展趋势。 ####
|
5天前
|
机器学习/深度学习 人工智能 算法
强化学习在游戏AI中的应用,从基本原理、优势、应用场景到具体实现方法,以及Python在其中的作用
本文探讨了强化学习在游戏AI中的应用,从基本原理、优势、应用场景到具体实现方法,以及Python在其中的作用,通过案例分析展示了其潜力,并讨论了面临的挑战及未来发展趋势。强化学习正为游戏AI带来新的可能性。
28 4
|
10天前
|
机器学习/深度学习 人工智能 自然语言处理
AI技术在医疗领域的应用与前景####
本文探讨了人工智能(AI)在医疗领域的多方面应用,包括疾病诊断、个性化治疗、患者管理以及药物研发等。通过对现有技术的梳理和未来趋势的展望,旨在揭示AI如何推动医疗行业的变革,并提升医疗服务的质量和效率。 ####
30 5
|
12天前
|
人工智能 文字识别 运维
AI多模态的5大核心关键技术,让高端制造实现智能化管理
结合大模型应用场景,通过AI技术解析高端制造业的复杂设备与文档数据,自动化地将大型零件、机械图纸、操作手册等文档结构化。核心技术包括版面识别、表格抽取、要素抽取和文档抽取,实现信息的系统化管理和高效查询,大幅提升设备维护和生产管理的效率。
|
8天前
|
机器学习/深度学习 人工智能 监控
探索AI在医疗诊断中的应用与挑战
本文旨在揭示人工智能(AI)技术如何革新医疗诊断领域,提高疾病预测的准确性和效率。通过分析AI在图像识别、数据分析等方面的应用实例,本文将探讨AI技术带来的便利及其面临的伦理和法律问题。文章还将提供代码示例,展示如何使用AI进行疾病诊断的基本过程。
下一篇
无影云桌面