技术改变AI发展:CUDA Graph优化的底层原理分析(GPU底层技术系列一)

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

CUDA 异步执行模型

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

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

1.jpg图1 GPU异步执行的典型场景



对于一般的性能优化,达到这种状态已经很好了。但如果想进一步的优化就需要知道模型的实际运行情况。随着GPU算力的提升,计算任务的执行时间在慢慢缩小,一个GPU执行单元可能在us或者ms级完成。通常情况下一个好的AI运算框架或模型应该尽量让GPU Kernel的运算时间长一些,从而使得GPU的性能能够更好地发挥,因为有个事实是:GPU Kernel提交到硬件也是有开销的,虽然这个时间可能只有0.x us。这里的提交不是指的cudaLaunchKernel而是更底层驱动和硬件之间的真正的提交。如果业务场景中有很多小的us级Kernel要执行,则整个系统的性能会随着短Kernel的比例增加整体性能输出越来越差,GPU资源并不能充分利用起来。


CUDA Graph 性能优化效果

CUDA Graph可以通过Capture或Create的方式将多个Kernel组合在一起生成一个Graph,与Kernel融合不同,在Graph内部仍然是多个Kernel的形式存在,但提交操作只需要一次,如果可以将尽量多的Kernel组合在一起,那么理论上可以节约很多Kernel提交的开销。但CUDA Graph也有其自身的限制,它的设计思路是将多个任务单元作为一个快照进行组合,也就意味着这个快照的参数和结构组成是固定的,不能变换,同时实例化这个快照是比较耗时的,但如果这个快照被反复执行(replay)的次数足够多,实例化快照的时间是可以忽略的。


以一个简单的Kernel为例介绍CUDA Graph是如何影响性能输出的。这里需要自己开发构造一个Kernel:可以根据运算复杂度调整执行时间,但在运行过程中没有Host与Device侧的数据交互。以下分析均基于这个自定义Kernel进行。通过对比CUDA Graph优化前后的性能数据(图2)可以看到CUDA Graph对于执行时间越小的Kernel性能提升越明显,原因是Kernel提交的开销占比会更大(假设单次提交的开销是固定的,接下来会证明这一假设)。

2.png

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


CUDA Graph 性能优化原理

为什么Kernel的提交会有系统开销并最终影响到GPU卡的性能输出?从图1的GPU异步执行逻辑来看,GPU完全可以按照CUDA Stream的队列顺序自己控制Kernel的执行节奏,只要队列中的任务足够,就能输出最大的性能。Kernel提交的开销究竟在哪里?图3 可以有一个侧面的解释。在Kernel的执行过程中是有持续的双向数据流量的。而且这个流量和Kernel的执行时间是成反比的。这是个很重要的信息,因为Kernel执行过程中是没有运算数据流量的,HostToDevice的流量就是CPU侧Kernel提交产生的,DeviceToHost的流量就是GPU执行完Kernel需要和Host交互产生的。而且这个流量是和Kernel的提交频率有关,和Kernel本身并没有关系。

3.png

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



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

4.png

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


CUDA Graph引入分析总结

1.cuda kernel在执行时存在确定的Host和Device侧交互

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

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

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

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


我们更欢迎您分享您对阿里云产品的设想、对功能的建议或者各种吐槽,请扫描提交问卷并获得社区积分或精美礼品一份。https://survey.aliyun.com/apps/zhiliao/P4y44bm_8

【扫码填写上方调研问卷】

欢迎每位来到弹性计算的开发者们来反馈问题哦~

相关实践学习
在云上部署ChatGLM2-6B大模型(GPU版)
ChatGLM2-6B是由智谱AI及清华KEG实验室于2023年6月发布的中英双语对话开源大模型。通过本实验,可以学习如何配置AIGC开发环境,如何部署ChatGLM2-6B大模型。
相关文章
|
9月前
|
人工智能 数据安全/隐私保护
如何识别AI生成内容?探秘“AI指纹”检测技术
如何识别AI生成内容?探秘“AI指纹”检测技术
1828 119
|
9月前
|
机器学习/深度学习 人工智能 自然语言处理
AI检测技术:如何识别机器生成的“数字指纹”?
AI检测技术:如何识别机器生成的“数字指纹”?
555 115
|
9月前
|
机器学习/深度学习 人工智能 自然语言处理
如何准确检测AI生成内容?这三大技术是关键
如何准确检测AI生成内容?这三大技术是关键
1207 116
|
机器学习/深度学习 人工智能 运维
如何通过Graph+AI的方法打造高精度风控模型
阿里云图智能平台在金融行业已经帮助银行、保险等领域客户构建了金融风控、商品推荐、循环担保检测、异常指标监控、违规团伙挖掘等场景,通过穿透行业应用场景,帮助客户基于多维数据做出精准决策。
1437 0
如何通过Graph+AI的方法打造高精度风控模型
|
9月前
|
消息中间件 人工智能 安全
云原生进化论:加速构建 AI 应用
本文将和大家分享过去一年在支持企业构建 AI 应用过程的一些实践和思考。
2278 90
|
10月前
|
人工智能 安全 中间件
阿里云 AI 中间件重磅发布,打通 AI 应用落地“最后一公里”
9 月 26 日,2025 云栖大会 AI 中间件:AI 时代的中间件技术演进与创新实践论坛上,阿里云智能集团资深技术专家林清山发表主题演讲《未来已来:下一代 AI 中间件重磅发布,解锁 AI 应用架构新范式》,重磅发布阿里云 AI 中间件,提供面向分布式多 Agent 架构的基座,包括:AgentScope-Java(兼容 Spring AI Alibaba 生态),AI MQ(基于Apache RocketMQ 的 AI 能力升级),AI 网关 Higress,AI 注册与配置中心 Nacos,以及覆盖模型与算力的 AI 可观测体系。
1765 89
|
9月前
|
人工智能 运维 Kubernetes
Serverless 应用引擎 SAE:为传统应用托底,为 AI 创新加速
在容器技术持续演进与 AI 全面爆发的当下,企业既要稳健托管传统业务,又要高效落地 AI 创新,如何在复杂的基础设施与频繁的版本变化中保持敏捷、稳定与低成本,成了所有技术团队的共同挑战。阿里云 Serverless 应用引擎(SAE)正是为应对这一时代挑战而生的破局者,SAE 以“免运维、强稳定、极致降本”为核心,通过一站式的应用级托管能力,同时支撑传统应用与 AI 应用,让企业把更多精力投入到业务创新。
869 30
|
9月前
|
设计模式 人工智能 自然语言处理
3个月圈粉百万,这个AI应用在海外火了
不知道大家还记不记得,我之前推荐过一个叫 Agnes 的 AI 应用,也是当时在 WAIC 了解到的。
901 2
|
9月前
|
存储 人工智能 NoSQL
AI大模型应用实践 八:如何通过RAG数据库实现大模型的私有化定制与优化
RAG技术通过融合外部知识库与大模型,实现知识动态更新与私有化定制,解决大模型知识固化、幻觉及数据安全难题。本文详解RAG原理、数据库选型(向量库、图库、知识图谱、混合架构)及应用场景,助力企业高效构建安全、可解释的智能系统。

相关产品

  • GPU云服务器