技术改变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大模型。
相关文章
|
5月前
|
人工智能 中间件 数据库
沐曦 GPU 融入龙蜥,共筑开源 AI 基础设施新底座
沐曦自加入社区以来,一直与龙蜥社区在推动 AIDC OS 的开源社区建设等方面保持合作。
|
5月前
|
存储 人工智能 Java
AI 超级智能体全栈项目阶段四:学术分析 AI 项目 RAG 落地指南:基于 Spring AI 的本地与阿里云知识库实践
本文介绍RAG(检索增强生成)技术,结合Spring AI与本地及云知识库实现学术分析AI应用,利用阿里云Qwen-Plus模型提升回答准确性与可信度。
1724 90
AI 超级智能体全栈项目阶段四:学术分析 AI 项目 RAG 落地指南:基于 Spring AI 的本地与阿里云知识库实践
|
5月前
|
机器学习/深度学习 人工智能 监控
拔俗AI智能营运分析助手软件系统:企业决策的"数据军师",让经营从"拍脑袋"变"精准导航"
AI智能营运分析助手打破数据孤岛,实时整合ERP、CRM等系统数据,自动生成报表、智能预警与可视化决策建议,助力企业从“经验驱动”迈向“数据驱动”,提升决策效率,降低运营成本,精准把握市场先机。(238字)
185 0
|
5月前
|
传感器 人工智能 监控
拔俗多模态跨尺度大数据AI分析平台:让复杂数据“开口说话”的智能引擎
在数字化时代,多模态跨尺度大数据AI分析平台应运而生,打破数据孤岛,融合图像、文本、视频等多源信息,贯通微观与宏观尺度,实现智能诊断、预测与决策,广泛应用于医疗、制造、金融等领域,推动AI从“看懂”到“会思考”的跃迁。
410 0
|
5月前
|
存储 机器学习/深度学习 人工智能
拔俗AI智能营运分析助手:用数据驱动企业高效决策
AI智能营运分析助手融合云原生架构、机器学习与自动化数据管道,打通多源数据集成、实时计算、智能预测与可视化分析全链路,将海量数据转化为精准决策洞察。支持对话式查询、客户分层、库存预测、异常预警等场景,助力企业降本增效。已广泛应用于零售、制造、电商等领域,推动营运智能化升级。(238字)
240 0
|
5月前
|
机器学习/深度学习 人工智能 算法
拔俗AI智能营运分析助手:用技术破解企业“数据焦虑”
AI智能营运分析助手破解企业“数据多却难洞察”难题,通过自动化集成、定制化模型、可视化输出,助力中小企业实现低门槛数据驱动决策,提升营运效率与精准度。
354 0
|
5月前
|
机器学习/深度学习 人工智能
AI重塑电商拍摄:技术驱动的商业变革——5款AI模特图生成工具技术分析
AI技术正重塑电商拍摄:低成本、高效率生成逼真模特图,支持批量换装、换背景,助力商家快速上架、灵活试错。燕雀光年、Kaiber等工具实测好用,未来AI与实拍将互补共存。
609 0
|
5月前
|
自然语言处理 数据挖掘 关系型数据库
ADB AI指标分析在广告营销场景的方案及应用
ADB Analytic Agent助力广告营销智能化,融合异动与归因分析,支持自然语言输入、多源数据对接及场景模板化,实现从数据获取到洞察报告的自动化生成,提升分析效率与精度,推动数据驱动决策。

热门文章

最新文章

相关产品

  • GPU云服务器