设备管理

对于多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)