【问题标题】:How do I make sure Vulkan is using the same GPU as CUDA?如何确保 Vulkan 使用与 CUDA 相同的 GPU?
【发布时间】:2021-02-04 19:28:36
【问题描述】:

我正在使用一个在 HPC 集群(univa Grid Engine)上同时使用 vulkan 和 cuda(特别是 pytorch)的应用程序。

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

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

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

认为 'n' 可以取的值的顺序与 PCI BUS 上设备的顺序相同,但是我不知道返回的设备的顺序是否vkEnumeratePhysicalDevices 是这个顺序,文档没有具体说明这个顺序是什么。

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

【问题讨论】:

标签: cuda pytorch vulkan hpc


【解决方案1】:

使用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 Vulkan ICD 实现是否与 CUDA 匹配而不询问 NV。

【讨论】:

    猜你喜欢
    • 2014-01-30
    • 1970-01-01
    • 2021-07-03
    • 1970-01-01
    • 2015-10-28
    • 1970-01-01
    • 2020-04-24
    • 1970-01-01
    • 2018-12-09
    相关资源
    最近更新 更多