概述
CUDA 内置目标弃用通知
Numba 内置的 CUDA 目标已被弃用,后续开发已移至 NVIDIA numba-cuda 软件包。请参阅 内置 CUDA 目标的弃用和维护状态。
内置 CUDA 目标的弃用和维护状态
Numba 的 CUDA 目标现在在一个单独的软件包 numba-cuda 中维护。这使得 CUDA 目标的开发得以改进
将新功能和错误修复整合到 CUDA 目标所需的时间和精力减少了——其开发周期现在与 Numba 的开发过程解耦,因此 Numba 维护者的“上游”审查以及在 Anaconda 内部 CI 系统上的测试运行不再是 CUDA 目标拉取请求标准流程的一部分。这种流程的简化使得开发能够以更快的节奏进行。
同样,CUDA 目标的发布可以独立于 Numba 发布,以更频繁的速度进行。
Numba 作为编译器平台已足够成熟,可以支持非主干目标。CUDA 目标虽然在上游维护,但已迁移为使用面向外部的 API 进行目标实现。在主 Numba 仓库之外持续开发 CUDA 目标,确保了这些目标扩展 API 的持续开发和健壮性。
随着开发在主 Numba 软件包之外进行,内置的 CUDA 目标现已被弃用,但在 Numba 0.61 中仍受支持。Numba 将继续通过至少 0.62 版本提供它,但预计不会增加新功能。新功能和错误修复将在 numba-cuda
软件包中实现。
建议用户在使用 CUDA 目标时,除了 Numba 之外,还安装 numba-cuda
。无需更改代码——numba-cuda
软件包将继续在 numba.cuda
命名空间下实现功能。
使用 pip
安装 numba-cuda
pip install numba-cuda
使用 conda
安装 numba-cuda
,例如从 conda-forge
频道
conda install conda-forge::numba-cuda
欲了解更多信息,请参阅弃用通知和计划。
简介
Numba 通过直接将 Python 代码的受限子集编译为遵循 CUDA 执行模型的 CUDA 内核和设备函数,支持 CUDA GPU 编程。用 Numba 编写的内核似乎可以直接访问 NumPy 数组。NumPy 数组在 CPU 和 GPU 之间自动传输。
术语
此处列出了 CUDA 编程主题中的几个重要术语
host (主机): CPU
device (设备): GPU
host memory (主机内存): 系统主内存
device memory (设备内存): GPU 卡上的板载内存
kernels (内核): 由主机启动并在设备上执行的 GPU 函数
device function (设备函数): 在设备上执行的 GPU 函数,只能从设备调用(即从内核或另一个设备函数调用)
编程模型
Numba 暴露的大多数 CUDA 编程工具直接映射到 NVidia 提供的 CUDA C 语言。因此,建议您阅读官方的 CUDA C 编程指南。
要求
支持的 GPU
Numba 支持计算能力 (Compute Capability) 3.5 或更高版本的 CUDA 显卡。对计算能力低于 5.0 的设备的支持已弃用,并将在未来的 Numba 版本中移除。
计算能力 5.0 或更高版本的设备包括(但不限于)
嵌入式平台:NVIDIA Jetson Nano, Jetson Orin Nano, TX1, TX2, Xavier NX, AGX Xavier, AGX Orin。
桌面/服务器 GPU:所有采用 Maxwell 微架构或更高版本的 GPU。例如 GTX 9 / 10 / 16 系列, RTX 20 / 30 / 40 系列, Quadro / Tesla M / P / V / RTX 系列, RTX A 系列, RTX Ada / SFF, A / L 系列, H100。
笔记本电脑 GPU:所有采用 Maxwell 微架构或更高版本的 GPU。例如 MX 系列, Quadro M / P / T 系列(移动版), RTX 20 / 30 系列(移动版), RTX A 系列(移动版)。
软件
Numba 旨在支持过去 3 年内发布的 CUDA Toolkit 版本。目前 11.2 是最低要求的工具包版本。此外,还需要一个与工具包版本兼容的 NVIDIA 驱动程序(另请参阅 CUDA 次要版本兼容性)。
Conda 用户可以将 CUDA Toolkit 安装到 conda 环境中。
对于 CUDA 12,需要 cuda-nvcc
和 cuda-nvrtc
$ conda install -c conda-forge cuda-nvcc cuda-nvrtc "cuda-version>=12.0"
对于 CUDA 11,需要 cudatoolkit
$ conda install -c conda-forge cudatoolkit "cuda-version>=11.2,<12.0"
如果您不使用 Conda,或者想使用不同版本的 CUDA 工具包,以下将描述 Numba 如何搜索 CUDA 工具包的安装路径。
CUDA 绑定
Numba 支持通过 NVIDIA CUDA Python 绑定及其基于 ctypes 的绑定与 CUDA Driver API 交互。两种绑定之间的功能是等效的。目前默认使用的是基于 ctypes 的绑定,但在未来的 Numba 版本中,如果 NVIDIA 绑定在环境中可用,将默认使用 NVIDIA 绑定。
您可以使用以下方式安装 NVIDIA 绑定:
$ conda install -c conda-forge cuda-python
如果您使用 Conda,或者
$ pip install cuda-python
如果您使用 pip。
通过将环境变量 NUMBA_CUDA_USE_NVIDIA_BINDING
设置为 "1"
来启用 NVIDIA 绑定。
设置 CUDA 安装路径
Numba 按照以下顺序搜索 CUDA 工具包安装:
Conda 安装的 CUDA Toolkit 软件包
环境变量
CUDA_HOME
,指向已安装的 CUDA 工具包目录(例如/home/user/cuda-12
)Linux 平台上的系统级安装,精确到
/usr/local/cuda
。带版本号的安装路径(例如/usr/local/cuda-12.0
)会被有意忽略。用户可以使用CUDA_HOME
选择特定版本。
除了 CUDA 工具包库(可以通过 conda 安装到环境中,或通过 CUDA SDK 安装程序进行系统级安装)之外,Numba 中的 CUDA 目标还需要一个最新的 NVIDIA 显卡驱动。更新的显卡驱动也由 CUDA SDK 安装程序安装,因此无需同时进行。如果 libcuda
库位于非标准位置,用户可以将环境变量 NUMBA_CUDA_DRIVER
设置为共享库文件的文件路径(而非目录路径)。