
Python 早就是 AI 和科学计算的主语言,但长期以来,它和 GPU 的关系有一个明显断层。大多数开发者通过 PyTorch、CuPy、RAPIDS 等高层库使用 GPU,只有当这些库暴露的能力不够时,才不得不跳到 CUDA C++、编译扩展、维护绑定和处理复杂构建链。结果是 Python GPU 生态很繁荣,底层却长期由许多不同 binding layer 拼接而成:每个库都有自己的 stream、device、allocation 表达,跨库共享数据时要依赖 DLPack、CUDA Array Interface 等交换协议,还要小心生命周期、Context 和 Stream 是否一致。
NVIDIA 在 CUDA 13.3 随同发布的“CUDA Python 1.0”,重点并不是推出一个新的 pip 包,而是宣布一套稳定性和架构承诺。cuda.core 1.0、cuda.compute 1.0、cuda.bindings 13.3、cuda-pathfinder、nvmath-python 1.0 等组件各自独立版本化,但共同形成官方 Python CUDA 栈。NVIDIA 明确表示,从 CUDA 13.3 开始,Python 和 C++ 都是访问 CUDA 平台的一等入口,并承诺核心 API 采用语义化版本管理。
对普通应用开发者来说,这听上去只是“以后写 CUDA 可以少一点 C++”。对 GPU 软件生态而言,意义更深:NVIDIA 正在尝试把此前分散在不同 Python 库里的低层抽象统一起来,让各家库共享同一套 device、stream 和 buffer 语义。
过去的问题不在 Python 慢,而在底层“各说各话”
很多人把 Python 与 GPU 性能问题理解为解释器开销。实际上成熟 AI 框架真正耗时的计算本来就在 GPU 上,Python 主要负责调度。更棘手的是互操作。
假设 CuPy 分配了一块 GPU 内存,接下来希望 cuDF 在同一个 stream 上处理,再把结果交给 Numba 自定义 kernel。如果每个项目都维护自己的 CUDA binding,那么“同一块显存”在三个库里可能对应三套对象和生命周期规则。为了避免复制,生态发展出各种交换协议和桥接层。它们有效,但每多一层就多一组版本、所有权和同步问题。
cuda.core 的目标是提供公共地基。设备、流、Buffer、Program、Linker、Memory Resource、CUDA Graph 等都变成普通 Python 对象。不同库如果都基于这个地基构建,那么共享对象不再是“把我的对象翻译成你的对象”,而是双方本来就在使用相同底层语义。NVIDIA 自己的通信和数学库已经朝这一方向收敛,PyTorch 的 CUDA wheel 也开始依赖 cuda.bindings。
这类统一基础设施通常不直接制造功能,却能长期减少生态摩擦。类似 C 语言 ABI、POSIX、Arrow 内存格式的价值,都来自大家同意使用一组共同约定。

三层模型让开发者不用一上来就学 CUDA C++
NVIDIA 把 CUDA Python 栈划成三层。最底层是 Runtime System,处理 Device、Memory、Stream、Synchronization、Graph 和 JIT Compilation。中间是库层,包括 cuda.compute、nvmath-python、NCCL4Py、NVSHMEM4P 等。最上面是 kernel authoring,包括 Numba、Numba CUDA MLIR,以及更偏 Tensor Core 或 Tile 编程的语言。
这套分层的重要性在于,开发者可以停在自己需要的位置。如果只是做 sort、scan、reduce、transform、histogram、top-k 等并行算法,cuda.compute 直接把 CCCL 的成熟算法暴露成 Python 可调用函数,还可以使用 Python lambda 定制操作。程序员不需要为了一个高性能 reduce 自己写 kernel。
当业务逻辑无法用现成算法表达时,可以用 Numba 编写 SIMT kernel。开发者仍然需要理解 thread、block、共享内存和访存模式,但不必先掌握 C++ 模板和复杂构建系统。新的 Numba CUDA MLIR 后端进一步把编译基础设施迁移到 MLIR/NVVM,目标是降低 JIT 和 kernel launch 开销。
再往下,如果你在做框架、数据库、推理引擎或者工业 HPC 工具,需要直接控制 Context、Stream、Memory 和 Graph,就可以使用 cuda.core;需要 1:1 覆盖 CUDA C API 时,再使用 cuda.bindings。这比过去“高层库不够用就直接跳进 C++”多了一个更平滑的梯度。
1.0 最重要的其实是“API 会不会明年就变”
底层平台库最怕接口不稳定。一个业务团队可以接受上层工具快速迭代,但如果核心内存和 Stream API 每隔几个版本就破坏兼容,没人愿意把生产系统建立在上面。
CUDA Python 1.0 因此把语义化版本作为核心承诺:breaking change 只在 major release 出现;minor release 加功能;patch 修 Bug;公开 API 要移除时先经过 deprecation,并给出迁移路径。这里的“1.0”是一个稳定性里程碑,不代表所有组件都统一成同一个版本号。
也需要注意范围。NVIDIA 明确说明,某些较新的 kernel authoring 工具仍然是实验状态,还没有全部纳入 1.0 稳定承诺。因此生产系统不能看到“CUDA Python 1.0”几个字就认为整套 Python GPU 生态都已经冻结 API。真正需要检查的是自己依赖的具体组件。
高级 CUDA 能力开始直接出现在 Python 层
cuda.core 1.0 里有几个功能很能说明变化。Green Contexts 可以把一块 GPU 的 SM 分成互相隔离的组,让低延迟 kernel 不被长时间吞吐任务过度干扰;Process Checkpointing 可以快照一个运行中进程的完整 CUDA 状态并在之后恢复;IPC 可以让不同进程直接共享 GPU 内存,不经过 CPU Host Copy。
这些能力过去通常首先面向系统级 C/C++ 程序员。现在进入官方 Python API 后,做推理服务、数据处理、仿真和交互式 HPC 的 Python 团队可以更直接地参与底层资源管理。结合前面 NVIDIA Dynamo 的 Shadow Engine 可以看出,GPU 软件栈正在越来越重视状态持久化、进程隔离和服务化,而 Python 不再只是最上层的“脚本胶水”。
对于工业软件也很有意义。很多 CAE、数字孪生、信号处理和视觉应用上层已经用 Python 做工作流,底层性能模块仍然是 C++/CUDA。统一的 Python CUDA 基础有机会减少自研 binding 数量,让算法工程师在保持 GPU 性能的同时,更快把定制计算接到 Python 工作流里。
“零拷贝互操作”比语法好看更重要
cuda.core 使用标准 CUDA Context,因此它管理的 Device、Stream 和 Memory 可以与 CuPy、PyTorch 等生态共享。自定义 kernel 可以直接处理现有 PyTorch Tensor 或 CuPy Array 背后的显存,而不必先复制一份数据。对于 AI 推理和大规模数据处理,Host-GPU 或 GPU-GPU 多一次不必要复制,都可能吞掉大量带宽和延迟预算。
过去为了实现这种互操作,库作者需要认真处理 DLPack capsule、Stream synchronization、allocator ownership 等细节。统一底座无法消灭所有同步问题,但它把更多责任下沉到共同实现中。对开发者来说,生态从“每个库都有一套 CUDA plumbing”向“大家共享一套 plumbing”迁移,长期收益可能远高于某一个 API 语法更 Pythonic。
它会不会让 CUDA C++ 失去意义?不会
CUDA Python 1.0 并不代表所有 GPU 程序以后都应该用 Python 写。极端性能 kernel、复杂模板元编程、编译期优化、底层驱动和某些生产级库仍然会大量依赖 C++。Numba 支持的是 Python 子集;JIT 本身也有运行时成本;一些最前沿特性通常仍会先在底层 CUDA 工具链中出现。
更合理的变化是团队分工边界移动。过去一个算法工程师为了做一个定制 GPU 操作,可能必须请 C++ 工程师写 extension;以后更多中等复杂度任务可以直接留在 Python 侧完成。真正复杂和极限优化部分仍由 CUDA/C++ 专家负责。这样既没有牺牲底层能力,也降低了大量“中间地带”的开发成本。
另一个现实问题是生态绑定。CUDA Python 让 NVIDIA 平台更容易使用,也会强化 CUDA 作为事实标准的吸引力。对于希望同时支持 AMD、Intel 或国产 GPU 的软件公司,过度依赖 NVIDIA 专属 API 仍然需要评估可移植性。Python 层统一了 CUDA 内部生态,并没有自动解决跨 GPU 厂商可移植问题。
对 AI 软件的长期影响:Python 可以开始承接更多系统层工作
过去 AI 软件的典型分层是 Python 写模型和业务,C++/CUDA 写性能核心。这个边界正在变模糊。Triton、Numba、CuTe DSL、MLIR、JAX/XLA 等工具都在尝试让高级语言描述计算,再自动生成高性能 kernel。CUDA Python 1.0 则从平台 API 这一侧补上统一基础。
这对 AI Agent 和工业智能软件也有潜在影响。Agent 上层天然偏 Python:模型 SDK、MCP、数据处理、仿真、优化、设备接口大量使用 Python。如果底层 GPU 资源也能通过稳定 Python API 管理,同一个服务可以在更少语言边界内完成任务编排、内存共享、kernel 调用和结果处理。语言边界减少,调试和部署链也更简单。
所以 CUDA Python 1.0 最值得关注的并不是“Python 能不能写 GPU kernel”——这早就可以。它解决的是另一件事:Python 是否拥有一套官方、稳定、足够完整的 CUDA 地基。 当这个地基形成以后,GPU 库之间更容易组合,应用团队更少重复造 binding,底层高级能力也能更快被 Python 生态吸收。
NVIDIA 把 Python 提升为 CUDA 的一等公民,本质上是在争夺未来 AI 软件栈的入口。模型开发者已经习惯从 Python 开始,如果 GPU 平台最底层也能顺着同一种语言继续下钻,CUDA 的生态护城河反而可能变得更深。
参考资料
- NVIDIA Technical Blog, CUDA Python 1.0: Stable APIs, One Foundation, Full Platform Access, 2026-08-25
https://developer.nvidia.com/blog/cuda-python-1-0-stable-apis-one-foundation-full-platform-access/ - NVIDIA CUDA Python Documentation
https://nvidia.github.io/cuda-python/ - Horizon Summary, 2026-08-26
https://thysrael.github.io/Horizon/2026/08/26/summary-zh.html