Nvidia adds native Python support to CUDA
英伟达为 CUDA 添加原生 Python 支持
多年来,英伟达(Nvidia)的 CUDA 软件工具包一直缺乏原生的 Python 支持。但现在情况已经改变。
2025年4月2日 下午2:00,作者:Agam Shah
根据 GitHub 的 2024 年开源调查,2024 年,Python 成为世界上最流行的编程语言,超过了 JavaScript。
多年来,英伟达的 CUDA 软件工具包一直缺乏原生的 Python 支持。但现在情况已经改变。
在 GTC 大会上,英伟达宣布在其 CUDA 工具包中原生支持并完全集成 Python。开发人员将能够使用 Python 直接在 GPU 上执行算法风格的计算。
“我们一直在努力将加速的 Python,一流的 Python,引入 CUDA 堆栈,” CUDA 架构师 Stephen Jones 在最近的 GTC 会议上的一次演讲中说。
对于程序员来说,这意味着巨大的变化。CUDA 诞生于 C 和 C++,现在程序员不需要掌握这些编程语言也能使用该工具包。
“用于 CUDA 的 Python 不应该看起来像 C。它应该看起来像 Python,” Jones 说。
“用于 CUDA 的 Python 不仅仅是将 C 翻译成 Python 语法。” — Stephen Jones, CUDA 架构师
编码人员可以使用自然的 Python 接口和调用函数和库的脚本模型来创建 AI 程序,以便在英伟达 GPU 上执行。
“用于 CUDA 的 Python 不仅仅是将 C 翻译成 Python 语法。它必须是一些对 Python 开发人员来说很自然的东西,” Jones 说。
原生 Python 打开了新的大门
英伟达对 CUDA 上的 Python 的原生支持为数百万开发人员打开了开发工具包。CUDA 以前要求开发人员了解 C++ 或 Fortran。该编程工具包有一些 Python 工具,但它不是原生支持的。
The Futurum Group 的数据显示,2023 年 CUDA 用户数量仅为 400 万,高于 2020 年的 200 万。但 Python 是世界上增长最快的语言。英伟达将获得数百万 Python 编码人员的访问权限——尤其是在印度和巴西等发展中国家,这些国家的编码人员对开源项目做出了热烈的贡献。
Python 支持还将使英伟达的基础设施准备好在新兴市场中使用。英伟达 GPU 的大部分在美国和欧洲,但印度的电信和基础设施公司正在建设主要的 GPU 设施,这些设施将在未来几年投入运营。
英伟达正在投入燃料来招募程序员,并希望支持更多的编程语言,包括 Rust 和 Julia。
Pythonic CUDA 是如何构建的
CUDA 包括库、SDK、编译器、主机运行时、工具以及预先打包的软件和算法。英伟达已经将各个部分添加到整个 Pythonic CUDA 堆栈中。
英伟达的重点是在不脱离 Python 的情况下提供 GPU 加速。 Jones 说,CUDA Python 不能仅仅是内核产品;它需要堆栈中的所有东西和一个流畅的执行流程。
“你必须能够编写一个内核并将其放入 PyTorch 中,但你还必须能够调用 Pythonic 库和所有其他的东西,” Jones 说。
实际上,在编译器层没有任何东西,因为它围绕着即时(JIT)编译构建。 这显著减少了堆栈中 GPU 的树中的依赖项数量。
“保持所有层之间的互操作性将极大地提高生产力,并能够端到端地使用 Python,” Jones 说。
最初,英伟达构建了基本 Python 绑定(包括运行时编译器)和 Python 库,例如 cuPyNumeric,它是 NumPy 的一个替代品,NumPy 是 Python 中使用最广泛的计算库。 cuPyNumeric 仅更改一个导入指令,NumPy 代码从在 CPU 上运行变为在 GPU 上运行。
CUDA Core 是“对 CUDA 运行时的 Pythonic 重新构想,使其自然且原生于 Python。” — Stephen Jones, CUDA 架构师
在过去的一年中,英伟达制造了 CUDA Core,Jones 说这是 “对 CUDA 运行时的 Pythonic 重新构想,使其自然且原生于 Python”。
CUDA Core 具有 Python 的执行流程,它完全在进程中,并且大量依赖于 JIT 编译。
“你不应该放弃命令行编译器或任何类似的东西,你应该完全在进程中,” Jones 说,并补充说,这显著减少了堆栈中 GPU 的树中的依赖项数量。
英伟达创建了一个名为 NVMath Python 的库,该库具有用于主机端和设备端库调用的统一接口。 Jones 说,融合库调用的能力带来了很大的性能改进。
该公司还构建了可以直接从 Python 代码访问加速的 C++ 库的库。
“因为这位于我们多年来构建的底层基础设施之上……我们没有在 Python 中重新实现这些。 我们确保它链接到微调的底层 C++ 代码,因此您的性能差异可以忽略不计,” Jones 说。
英伟达还添加了用于分析器和代码分析器的工具。
编程模型
Python 使编码变得简单,编码人员不必过多担心底层硬件。 考虑到这一点,英伟达正在添加一个编码层,该层与在 GPU 上执行的更高级别的抽象对齐。
新的编程模型 CuTile 接口首先针对 Pythonic CUDA 开发,稍后将扩展到 C++ CUDA。
CuTile “从根本上来说更柏拉图式”,因为今天的 Python 程序员更多地从数组而不是线程的角度来思考(这更多是 C++ 的特性)。
开发人员无法神奇地获取 Python 代码并将其导出以进行 GPU 加速。 CUDA 通常会获取一个问题并将其分解为数千个较小的块,这些块在 GPU 上单独处理。
这些块被分解为更小的瓦片,这些瓦片运行数千个线程来处理单个元素。 这些线程组合成一个操作。
能够在线程级别并行处理单个元素的能力赋予了 GPU 强大的计算能力。
但是英伟达认为 GPU 执行不需要一直到线程级别。 也可以在瓦片级别进行中间处理,这就是 CuTile 编程模型适用的地方。
与 C++ 不同,Python 在设计上不是细粒度的。
CuTile 以较低的粒度级别有效地将数组映射到 GPU,这使得代码更容易理解和调试。 “从根本上来说,它的性能是一样的,” Jones 说。
瓦片中的数据可以构造为向量、张量或数组。 编译器可以更好地将来自一个线程块的整个数组操作从线程映射到 GPU。
“通常,编译器会比我做得更好,因为编译器非常了解我在做什么……[以及] GPU 如何运行的细节,” Jones 说。
与 C++ 不同,Python 在设计上不是细粒度的。
“有很多这样的东西。 OpenAI 的 Triton 将是一个很好的例子。 我认为这些非常适合 Python 程序,” Jones 说。