设备管理

CUDA 内置目标弃用通知

Numba 内置的 CUDA 目标已弃用,后续开发已移至 NVIDIA numba-cuda 软件包。请参阅 内置 CUDA 目标弃用和维护状态

对于多 GPU 机器,用户可能希望选择要使用的 GPU。默认情况下,CUDA 驱动程序将最快的 GPU 选作设备 0,这是 Numba 使用的默认设备。

除非您使用的系统托管/提供多个支持 CUDA 的 GPU,否则本页介绍的功能通常不值得关注。

设备选择

如果需要,设备选择必须在任何 CUDA 功能使用之前完成。

from numba import cuda
cuda.select_device(0)

设备可以通过以下方式关闭

cuda.close()

用户可以随后使用另一个设备创建新上下文。

cuda.select_device(1)  # assuming we have 2 GPUs
numba.cuda.select_device(device_id)

为选定的 *device_id* 创建一个新的 CUDA 上下文。*device_id* 应该是设备的编号(从 0 开始;设备顺序由 CUDA 库决定)。上下文与当前线程关联。Numba 目前每个线程只允许一个上下文。

如果成功,此函数将返回一个设备实例。

numba.cuda.close()

显式关闭当前线程中的所有上下文。

注意

编译后的函数与 CUDA 上下文关联。这使得关闭和创建新设备不是很有用,但在机器具有多个 GPU 时,它对于选择要使用的设备肯定有用。

设备列表

设备列表是系统中所有 GPU 的列表,可以对其进行索引以获取一个上下文管理器,该管理器可确保在所选 GPU 上执行。

numba.cuda.gpus
numba.cuda.cudadrv.devices.gpus

numba.cuda.gpus_DeviceList 类的实例,从中也可以检索当前的 GPU 上下文

class numba.cuda.cudadrv.devices._DeviceList
property current

返回活动设备,如果没有活动设备则返回 None

设备 UUID

设备的 UUID(等于 nvidia-smi -L 返回的值)在 CUDA 设备对象的 uuid 属性中可用。

例如,要获取当前设备的 UUID

dev = cuda.current_context().device
# prints e.g. "GPU-e6489c45-5b68-3b03-bab7-0e7c8e809643"
print(dev.uuid)