Aioga
AI资讯 / 行业动态
返回 AI资讯

NVIDIA cuDNN Graph API 教程:融合、自动调优与 plan 复用

MarkTechPost(RSS)Aioga 编辑团队2026-09-15T21:37:11.000Z热度 58

一篇教程详解 NVIDIA cuDNN Frontend 的 graph API:把计算声明为算子图,由 cuDNN 选择执行引擎,再手动接管该选择。

行业动态MarkTechPost(RSS)

今日 AI 情报摘要

一篇教程详解 NVIDIA cuDNN Frontend 的 graph API:把计算声明为算子图,由 cuDNN 选择执行引擎,再手动接管该选择。

中文正文 · AI 翻译

在本教程中:https://github.com/MARKTECHPOST-AI-MEDIA-INC/AI-Agents-Projects-Tutorials/blob/main/Deep%20Learning/cudnn_frontend_nvidia_tutorial_Marktechpost.ipynb,我们使用 cuDNN Frontend:https://github.com/NVIDIA/cudnn-frontend 的图 API,从框架下面进行操作:我们将计算描述为操作图,让 cuDNN 选择一个引擎来运行,然后自己控制这个选择。我们这里构建的每个内核都是以相同的方式表示的:我们按照张量的维度和步幅声明张量,将操作链式添加到它们上,运行五步构建流程:验证、构建操作图、创建执行计划、检查支持以及构建计划,然后针对指针变体包执行。我们在单个 Colab GPU 上运行所有操作,将每个结果与 PyTorch 的参考结果进行对比,以便同时看到融合是否正确以及其成本。各个主题相互构建,从单个融合卷积开始,到跨引擎配置的自动调优、FP8 风格的后处理、注意力机制、计划序列化、动态形状以及 CUDA 图捕获。

我们首先安装 nvidia-cudnn-frontend 并解决大多数首次运行时遇到的问题:使 libcudnn.so 对 frontend 的动态加载器可见。我们强制 PyTorch 先加载其捆绑的 cuDNN,然后显式预加载共享对象,以便 frontend 自身的 dlopen 可以针对已驻留在进程中的库解析。然后我们报告计算能力,据此选择 bfloat16 或 float16,创建 cuDNN 句柄,并定义张量描述、图构建、工作区分配以及基于事件的基准测试的辅助函数,这些函数将在整个笔记本中重复使用。

我们构建了第一个图,一个卷积后跟偏置加法和 ReLU,全部融合成一个内核。我们保持每个张量为 channels_last,因为这能为 cuDNN 提供其张量核心引擎所需的 NHWC 步幅,并且我们显式固定输出的维度和步幅,以便结果以相同布局写回。我们将输出与 torch.nn.functional.conv2d 进行验证,然后将融合图与 PyTorch 在单独的内核中运行卷积和激活操作的性能进行基准测试。

我们重新构建相同的卷积,但停止信任启发式方法,而是从启发式模式 A、B 和 FALLBACK 请求计划,并使用 build_plan_policy.ALL 编译它们。然后我们遍历计划列表,构建每个配置,分配其特定的工作空间,并使用 execute_plan_at_index 计时,打印每个候选的吞吐量和工作空间大小。最快和最慢引擎之间的差距就是这一实验的重点,因为它告诉我们通过发布自动调优索引相比接受默认选项能获得多少收益。

我们转向批量矩阵乘法,并在其上挂载完整的尾部操作:alpha 缩放(作为按值传递的主机标量提供)、偏置加、激活函数以及结果的 AMAX 归约。在同一个内核中进行 AMAX 是 FP8 训练依赖的模式,因为它在不需要对输出进行第二次遍历的情况下收集下一步量化的缩放因子。我们将其与 PyTorch 的 baddbmm、激活函数和 amax 链进行比较,这清楚地表明加速来自于消除了尾部操作的内存传输,而不是更快的 GEMM。

我们构建了带因果掩码的融合缩放点积注意力图,并将其与 torch.nn.functional.scaled_dot_product_attention 进行检查,整个部分的操作都受到 SM80 检查的保护,因为融合内核需要使用 Ampere 或更新版本。我们使用回退方式处理因果参数,因为前端已经从 use_causal_mask 转向 diagonal_alignment,并在 1.x 版本中绑定参数。然后我们将构建好的矩阵乘法图序列化为字节,重新加载到一个新的图对象中,并通过整数 UID 执行,这使我们可以在进程启动时完全跳过编译成本。

我们以两个生产相关问题结束。首先,我们在四个仅批量大小不同的图之间共享内核缓存,并计时每次构建,这样我们可以看到后续形状重用已经编译好的内核,而不必再次支付 JIT 成本。然后我们在 CUDA 图中捕获卷积计划,将 cuDNN 句柄的流设置为捕获流。这样工作就落在图中,我们可以测量重放消除后的每次迭代启动开销。

总之,我们在这里构建的内容在代码上很小,但范围很广:一个卷积、一个矩阵乘法和一个注意力内核,每个都表示为图而不是库调用。在这个层次上工作改变了我们能够做出的决策。我们选择了哪些操作合并到单个内核中,因此我们折叠到尾部的偏置加法、激活函数和 AMAX 归约从未将中间结果写入内存。我们自己选择了引擎,而不是接受启发式,每次对候选配置进行计时都告诉我们这个选择的价值。我们还选择何时支付编译成本,通过序列化计划、跨形状共享的内核缓存以及 CUDA 图捕获将其推到热路径之外。与 PyTorch 的对比检查和计时同样重要,因为我们仅刚好匹配 PyTorch 的地方通常是 PyTorch 已经在底层调用 cuDNN 的地方。这标志着这个 API 的价值所在:没有框架层等价物的融合、足够热门以值得自动调优的形状,以及启动和启动成本占主导的小内核。

需要与我们合作以推广您的 GitHub 仓库或 Hugging Face 页面或产品发布或网络研讨会等吗?联系地址:https://forms.gle/wbash1wF6efRj8G58

Sana Hassan,是 Marktechpost 的咨询实习生,同时是 IIT 马德拉斯的双学位学生,热衷于应用技术和人工智能解决现实世界的挑战。由于对解决实际问题的浓厚兴趣,他为 AI 与现实解决方案的结合带来了新的视角。

Meta Introduces ZGateway
Sakana AI Researchers Introduce PC-ALM

以实践者为先的 AI/ML 新闻与分析,每月有超过 100 万开发者和研究人员阅读。

情报判断

Aioga 编辑摘要

Aioga 编辑摘要:一篇教程详解 NVIDIA cuDNN Frontend 的 graph API:把计算声明为算子图,由 cuDNN 选择执行引擎,再手动接管该选择。 Aioga 将其归入「行业动态」方向,重点关注它对真实使用和行业竞争的影响。

背景分析

背景分析:公司与行业类动态需要放在竞争格局、商业化路径、资本信号和监管环境中观察,单条公告不能代表最终结果。

Aioga 观点

Aioga 判断:这条动态更适合作为行业观察信号,当前信息足以建立线索,但不足以推导长期结论。

影响与后续

影响分析:对相关团队而言,短期应先核对来源、可用范围和实际成本,再判断是否值得接入或跟进。 后续观察:继续观察官方文件、合作落地、收入或用户信号、竞品动作和监管后续。

来源与版权说明

本页正文由公开来源页面提取并按原有信息整理,同时保留来源、发布时间和原文入口。版权归原作者及来源网站所有,请通过原文链接核验和阅读来源版本。

抓取通道: RSS · 原始域名: marktechpost.com

来源: MarkTechPost(RSS)

原文链接: 打开原始来源

Aioga 归档: 查看情报页

Content record: source-page · Updated: 2026-09-15T21:37:11.000Z

API 中转站
API RELAY · DEVELOPER INFRASTRUCTURE

API 中转站

统一接入主流 AI 模型 API,为开发、测试与生产环境提供稳定调用入口。

立即访问 api.w173.com
AIOGA SHARE POSTER

分享这篇 AI 情报

一篇教程详解 NVIDIA cuDNN Frontend 的 graph API:把计算声明为算子图,由 cuDNN 选择执行引擎,再手动接管该选择。

MarkTechPost(RSS)2026-09-15T21:37:11.000Z
扫码打开文章详情扫码直达文章详情

Aioga 自动聚合全球 AI 动态,并保留来源信息用于核验与引用。