如何确定Vulkan使用与CUDA相同的GPU?

问题描述

我正在使用在HPC集群(univa网格引擎)上同时使用vulkan和cuda(特别是pytorch)的应用程序。

提交作业时,集群调度程序会设置环境变量SGE_HGR_gpu,其中包含要使用的作业的GPU ID(因此,由其他用户运行的其他作业不会使用同一GPU)

告诉使用CUDA的应用程序使用特定GPU的典型方法是设置CUDA_VISIBLE_DEVICES=n

由于我也在使用Vulkan,因此我不知道如何确保从vkEnumeratePhysicalDevices列出的设备中选择相同的设备。

认为'n'可以取值的顺序与PCI BUS上的设备顺序相同,但是我不知道是否由vkEnumeratePhysicalDevices按此顺序排列,并且文档未指定此顺序。

那么我该如何确保为Vulkan和CUDA选择相同的物理GPU?

解决方法

使用VkPhysicalDeviceIDPropertiesKHR(Vulkan 1.1)和VkPhysicalDeviceVulkan11Properties(Vulkan 1.2),您可以获得设备UUID,这是CUDA_VISIBLE_DEVICES似乎使用的格式之一。您还应该能够使用nvidia-smi -L(或使用NVML库)将索引转换为UUID(反之亦然)。

或者相反,cudaDeviceProp包含PCI信息,可以将其与VK_EXT_pci_bus_info扩展输出进行比较。

如果订单在Vulkan中匹配,则最好直接向NVidia咨询;我找不到信息NV如何订购它们。 Vulkan Loader实现中的IIRC,该顺序应与注册表中的顺序匹配,然后与NV驱动程序本身给它们的顺序匹配。即使这样,您也必须使用通用代码从列表中过滤掉非NV GPU,并且不询问NV就不知道NV Vulkan ICD实现是否与CUDA相匹配。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...