设备管理
对于多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)