如何确保 Vulkan 使用与 CUDA 相同的 GPU?
How do I make sure Vulkan is using the same GPU as CUDA?
我正在使用一个在 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) resp VkPhysicalDeviceVulkan11Properties
(Vulkan 1.2) 你可以获得设备 UUID,这是 CUDA_VISIBLE_DEVICES
似乎使用的格式之一。您还应该能够使用 nvidia-smi -L
(或使用 NVML 库)将索引转换为 UUID(反之亦然)。
或者换句话说,cudaDeviceProp
包含可以与 VK_EXT_pci_bus_info
扩展输出进行比较的 PCI 信息。
如果Vulkan中的顺序匹配,最好直接问NVidia;我找不到 NV 如何订购它们的信息。来自 Vulkan Loader 实现的 IIRC,顺序应该匹配来自注册表的顺序,然后是 NV 驱动程序本身给它们的顺序。即使这样,您也必须从通用代码列表中过滤掉非 NV GPU,并且您不知道 NV Vulkan ICD 实现是否与 CUDA 匹配而不询问 NV。
我正在使用一个在 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) resp VkPhysicalDeviceVulkan11Properties
(Vulkan 1.2) 你可以获得设备 UUID,这是 CUDA_VISIBLE_DEVICES
似乎使用的格式之一。您还应该能够使用 nvidia-smi -L
(或使用 NVML 库)将索引转换为 UUID(反之亦然)。
或者换句话说,cudaDeviceProp
包含可以与 VK_EXT_pci_bus_info
扩展输出进行比较的 PCI 信息。
如果Vulkan中的顺序匹配,最好直接问NVidia;我找不到 NV 如何订购它们的信息。来自 Vulkan Loader 实现的 IIRC,顺序应该匹配来自注册表的顺序,然后是 NV 驱动程序本身给它们的顺序。即使这样,您也必须从通用代码列表中过滤掉非 NV GPU,并且您不知道 NV Vulkan ICD 实现是否与 CUDA 匹配而不询问 NV。