Ищу устройства Nvidia в моей реализации WSL2 Ubuntu для SLURM GRES.

Вопрос или проблема

Я пробую нечто странное. У меня настроен кластер slurm, который имеет 4 вычислительные узла. 2 из них – это машины с Windows 11, работающие под WSL2, и у меня это работает.

Сейчас я пытаюсь добавить поддержку GPU в кластер SLURM. Для 2 вычислительных узлов, которые являются системами на базе Ubuntu 22.04, устройства nvidia отображаются как /dev/nvidia[0-3], но для WSL2 (Ubuntu 22.04) в /dev/ ничего, что относится к GPU.

Оборудование на 2 ПК различно, но они оба работают под Windows 11 с драйвером Nvidia 537.13, WSL2 Ubuntu 22.04 и установленными драйверами cuda, как указано здесь: Сайт NVidia

Вывод nvidia-smi на обеих машинах:

Чт Сен 7 23:28:30 2023
+---------------------------------------------------------------------------------------+
| NVIDIA-SMI 535.103                Версия драйвера: 537.13       Версия CUDA: 12.2     |
|-----------------------------------------+----------------------+----------------------+
| GPU  Имя                 Persistence-M | Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp   Perf          Pwr:Usage/Cap |         Memory-Usage | GPU-Util  Compute M. |
|                                         |                      |               MIG M. |
|=========================================+======================+======================|
|   0  NVIDIA GeForce RTX 3090        On  | 00000000:01:00.0 Off |                  N/A |
|  0%   24C    P8              11W / 420W |     53MiB / 24576MiB |      0%      Default |
|                                         |                      |                  N/A |
+-----------------------------------------+----------------------+----------------------+
|   1  NVIDIA GeForce RTX 3090        On  | 00000000:2E:00.0 Off |                  N/A |
|  0%   24C    P8              14W / 420W |      0MiB / 24576MiB |      0%      Default |
|                                         |                      |                  N/A |
+-----------------------------------------+----------------------+----------------------+
|   2  NVIDIA GeForce RTX 3090        On  | 00000000:41:00.0  On |                  N/A |
|  0%   25C    P5              43W / 420W |   2753MiB / 24576MiB |      2%      Default |
|                                         |                      |                  N/A |
+-----------------------------------------+----------------------+----------------------+
|   3  NVIDIA GeForce RTX 3090        On  | 00000000:61:00.0 Off |                  N/A |
|  0%   25C    P8              12W / 420W |      0MiB / 24576MiB |      0%      Default |
|                                         |                      |                  N/A |
+-----------------------------------------+----------------------+----------------------+

+---------------------------------------------------------------------------------------+
| Процессы:                                                                             |
|  GPU   GI   CI        PID   Тип   Имя процесса                            Память GPU |
|        ID   ID                                                             Использование  |
|=======================================================================================|
|    0   N/A  N/A        22      G   /Xwayland                                 N/A      |
|    0   N/A  N/A        22      G   /Xwayland                                 N/A      |
|    0   N/A  N/A        23      G   /Xwayland                                 N/A      |
|    1   N/A  N/A        22      G   /Xwayland                                 N/A      |
|    1   N/A  N/A        22      G   /Xwayland                                 N/A      |
|    1   N/A  N/A        23      G   /Xwayland                                 N/A      |
|    2   N/A  N/A        22      G   /Xwayland                                 N/A      |
|    2   N/A  N/A        22      G   /Xwayland                                 N/A      |
|    2   N/A  N/A        23      G   /Xwayland                                 N/A      |
|    3   N/A  N/A        22      G   /Xwayland                                 N/A      |
|    3   N/A  N/A        22      G   /Xwayland                                 N/A      |
|    3   N/A  N/A        23      G   /Xwayland                                 N/A      |
+---------------------------------------------------------------------------------------+
Чт Сен 7 23:47:19 2023
+---------------------------------------------------------------------------------------+
| NVIDIA-SMI 535.103                Версия драйвера: 537.13       Версия CUDA: 12.2     |
|-----------------------------------------+----------------------+----------------------+
| GPU  Имя                 Persistence-M | Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp   Perf          Pwr:Usage/Cap |         Memory-Usage | GPU-Util  Compute M. |
|                                         |                      |               MIG M. |
|=========================================+======================+======================|
|   0  NVIDIA GeForce RTX 2080 Ti     On  | 00000000:01:00.0 Off |                  N/A |
|  0%   25C    P8              29W / 260W |    433MiB / 11264MiB |      1%      Default |
|                                         |                      |                  N/A |
+-----------------------------------------+----------------------+----------------------+

+---------------------------------------------------------------------------------------+
| Процессы:                                                                             |
|  GPU   GI   CI        PID   Тип   Имя процесса                            Память GPU |
|        ID   ID                                                             Использование  |
|=======================================================================================|
|    0   N/A  N/A        23      G   /Xwayland                                 N/A      |
+---------------------------------------------------------------------------------------+

Обе машины ls /dev/:

autofs           fuse          loop0   ptmx        ram5    stderr  tty19  tty32  tty46  tty6     vcs2   vcsu3
block            hugepages     loop1   ptp0        ram6    stdin   tty2   tty33  tty47  tty60    vcs3   vcsu4
bsg              hvc0          loop2   ptp_hyperv  ram7    stdout  tty20  tty34  tty48  tty61    vcs4   vcsu5
btrfs-control    hvc1          loop3   pts         ram8    tty     tty21  tty35  tty49  tty62    vcs5   vcsu6
bus              hvc2          loop4   ram0        ram9    tty0    tty22  tty36  tty5   tty63    vcs6   vfio
char             hvc3          loop5   ram1        random  tty1    tty23  tty37  tty50  tty7     vcsa   vhost-net
console          hvc4          loop6   ram10       rtc     tty10   tty24  tty38  tty51  tty8     vcsa1  virtio-ports
core             hvc5          loop7   ram11       rtc0    tty11   tty25  tty39  tty52  tty9     vcsa2  vport0p0
cpu_dma_latency  hvc6          mapper  ram12       sda     tty12   tty26  tty4   tty53  ttyS0    vcsa3  vport0p1
cuse             hvc7          mem     ram13       sdb     tty13   tty27  tty40  tty54  ttyS1    vcsa4  vsock
disk             initctl       mqueue  ram14       sdc     tty14   tty28  tty41  tty55  ttyS2    vcsa5  zero
dri              kmsg          net     ram15       sg0     tty15   tty29  tty42  tty56  ttyS3    vcsa6
dxg              kvm           null    ram2        sg1     tty16   tty3   tty43  tty57  urandom  vcsu
fd               log           nvram   ram3        sg2     tty17   tty30  tty44  tty58  vcs      vcsu1
full             loop-control  ppp     ram4        shm     tty18   tty31  tty45  tty59  vcs1     vcsu2

Я пробовал переустанавливать cuda на обоих Windows, и cuda в wsl2 (как указано выше), и гуглил этот вопрос.

Мой вопрос: “где я могу сопоставить устройства nvidia, как это делается в /dev/nvidia0 на традиционных установках ubuntu? в gres.conf для SLURM”

Очевидно, что DGX – это имя ваших графических карт в службах wsl Linux:

  photoprism:
    environment:
      ...
    devices:
      - "/dev/dxg:/dev/nvidia0"
    ...
container: host etc

.

Ответ или решение

Чтобы успешно настроить поддержку GPU в вашем кластере SLURM на машинах с WSL2, нужно учитывать некоторые нюансы использования WSL2 и драйверов NVIDIA. В основе вашей проблемы лежит различие в реализации работы с GPU в традиционных Linux-системах и WSL2. Давайте рассмотрим теоретический аспект, затем приведем пример, и наконец, перейдем к практическому применению.

Теория

Windows Subsystem for Linux 2 (WSL2) предоставляет сильную среду для запуска большинства приложений Ubuntu непосредственно на Windows, включая поддержку GPU. Однако работа с GPU в WSL2 требует дополнительных настроек по сравнению с нативными Linux-системами. Основная сложность связана с тем, что в WSL2 устройства GPU не отображаются традиционно через интерфейс /dev/nvidia*, как в обычных установках Linux. Вместо этого используется драйвер /dev/dxg.

WSL2 обеспечивает доступ к GPU через спецификацию DirectX. Это означает, что даже установив CUDA и соответствующие драйверы, устройства не появятся в /dev/, как nvidia*. Вы сможете взаимодействовать с ними через DXG менеджер устройств.

Пример

Как вы упомянули, можно использовать директивы, подобные указанным в конфигурации контейнера:

photoprism:
    environment:
      ...
    devices:
      - "/dev/dxg:/dev/nvidia0"

Таким образом, путь /dev/dxg выполняет роль устройства GPU, и далее он может быть сопоставлен с традиционными устройствами NVIDIA (/dev/nvidia0) при конфигурации приложений или контейнеров.

Применение

Теперь, перейдем к практическому решению проблемы с настройкой SLURM GRES в вашей среде WSL2:

  1. Убедитесь в поддержке вашего железа Windows 11: Проверьте, что ваши GPU и аппаратное обеспечение поддерживает работу через WSL2, и драйверы находятся в актуальном состоянии.

  2. Проверьте правильность установки драйверов NVIDIA: Проверьте, что ваша установка CUDA и драйверов на Windows выполнена корректно, используя команды nvidia-smi для проверки статуса устройств.

  3. Настройте SLURM GRES: Для использования GPU в SLURM вам нужно правильно их указать в конфигурационном файле gres.conf. В случае с WSL2 вам нужно явно указать карту пути /dev/dxg на виртуальные устройства NVIDIA, которые вы будете использовать.

  4. Обновите конфигурацию SLURM: Пример конфигурации может выглядеть следующим образом:

    NodeName=WSL2NodeName Gres=gpu:1

    Здесь вы прописываете не традиционное устройство /dev/nvidia0, а используете /dev/dxg, как указано выше.

  5. Перезапустите демона SLURM: После изменения конфигурации SLURM, перезапустите службы, чтобы изменения вступили в силу.

  6. Проверка работающей конфигурации: Убедитесь, что SLURM видит ваши GPU правильно с командами scontrol show nodes и sinfo.

Итак, в результате всех этих шагов вы должны получить работающую среду SLURM, которая правильно видит и использует ваши GPU через WSL2. Этот процесс демонстрирует основное различие в реализации между WSL2 и традиционными Linux— здесь важен правильный мэппинг и конфигурации приложения, которые учитывают уникальности платформы WSL2. Не забывайте следить за обновлениями драйверов NVIDIA и исправлением возможных багов в самом WSL2, чтобы поддержка GPU оставалась корректной.

Если все шаги выполнены правильно, ваши процессы SLURM будут эффективно распределяться между GPU, что повысит общую производительность вашего кластера.

Оцените материал
Добавить комментарий

Капча загружается...