#cuda #pytorch #vulkan #hpc
#cuda #pytorch #vulkan #hpc
Вопрос:
Я использую приложение, которое использует как vulkan, так и cuda (в частности, pytorch) в кластере HPC (univa grid engine).
При отправке задания планировщик кластера устанавливает переменную среды SGE_HGR_gpu
, которая содержит идентификатор графического процессора для используемого задания (чтобы другие задания, выполняемые другими пользователями, не использовали тот же графический процессор).
Типичный способ указать приложению, использующему CUDA, использовать определенный графический процессор — установить CUDA_VISIBLE_DEVICES=n
Поскольку я также использую Vulkan, я не знаю, как убедиться, что я выбираю одно и то же устройство из тех, что указаны в списке vkEnumeratePhysicalDevices
.
Я думаю, что порядок значений, которые может принимать ‘n’, совпадает с порядком устройств на ШИНЕ PCI, однако я не знаю, соответствует ли порядок устройств, возвращаемых vkEnumeratePhysicalDevices
в этом порядке, и в документации не указано, каков этот порядок.
Итак, как я могу убедиться, что я выбираю один и тот же физический графический процессор как для Vulkan, так и для CUDA?
Комментарии:
1. может представлять интерес: khronos.org/registry/vulkan/specs/1.2-extensions/man/html/… также представляет интерес: github.com/NVIDIA/cuda-samples/blob/master/Samples/simpleVulkan /…
2. @RobertCrovella Спасибо! В идеале я хочу избежать компиляции моего модуля vulkan с библиотеками cuda, компоненты «cuda» в моем проекте находятся в совершенно другом модуле, и оба модуля импортируются python отдельно. API-интерфейс устройства Vulkan PCI выглядит многообещающе, но нужно попытаться выяснить, как приведенная здесь информация связана с «идентификатором GPU», назначенным драйверами NVIDIA (что неясно)
Ответ №1:
С VkPhysicalDeviceIDPropertiesKHR
помощью (Vulkan 1.1) соответственно VkPhysicalDeviceVulkan11Properties
(Vulkan 1.2) вы можете получить UUID устройства, который CUDA_VISIBLE_DEVICES
, по-видимому, используется в одном из форматов. Вы также должны иметь возможность конвертировать index в UUID (или наоборот) с nvidia-smi -L
помощью (или с помощью библиотеки NVML).
Или наоборот, cudaDeviceProp
включает информацию о PCI, которую можно сравнить с VK_EXT_pci_bus_info
выводом расширений.
Если порядок совпадает в Vulkan, лучше спросить напрямую у NVidia; Я не могу найти информацию о том, как NV их заказывает. IIRC из реализации загрузчика Vulkan порядок должен соответствовать порядку из реестра, а затем порядку, который им задает сам драйвер NV. Даже в этом случае вам придется фильтровать графические процессоры, отличные от NV, из списка в общем коде, и вы не знаете, соответствует ли реализация NV Vulkan ICD CUDA, не спрашивая NV.