| Summary: | libnvidia-ml не попадает в CDI-спецификацию nvidia-container-toolkit: в контейнерах не работает nvidia-smi и любые потребители NVML | ||||||
|---|---|---|---|---|---|---|---|
| Product: | Sisyphus | Reporter: | pshkourin | ||||
| Component: | libnvidia-ml | Assignee: | Sergey V Turchin <zerg> | ||||
| Status: | NEW --- | QA Contact: | qa-sisyphus | ||||
| Severity: | normal | ||||||
| Priority: | P5 | CC: | zerg | ||||
| Version: | unstable | ||||||
| Hardware: | x86_64 | ||||||
| OS: | Linux | ||||||
| Bug Depends on: | 59069 | ||||||
| Bug Blocks: | |||||||
| Attachments: |
|
||||||
Created attachment 21648 [details] Окружение на хосте с выявленным багом в libnvidia-ml При генерации CDI-спецификации командой nvidia-ctk cdi generate библиотека libnvidia-ml.so.1 не включается в спецификацию, в результате чего внутри любого контейнера (podman, --device nvidia.com/gpu=...) не работают nvidia-smi и все приложения, использующие NVML (мониторинг GPU, pynvml, DCGM и т.п.). При этом CUDA-приложения в контейнере работают корректно, так как libcuda.so.595.80 в спецификацию попадает. Причина (анализ): nvidia-ctk обнаруживает библиотеки драйвера через ld-кэш хоста, отбирая записи, которые разрешаются в файлы с версионированным именем lib*.so.<версия драйвера> в стандартных путях. В Alt раскладка libcuda и libnvidia-ml асимметрична: libcuda: в /usr/lib64/ присутствуют libcuda.so.595.80, libcuda.so.1, libcuda.so → обнаруживается, попадает в спецификацию; libnvidia-ml: в /usr/lib64/ есть только неверсионированный libnvidia-ml.so; версионированный файл libnvidia-ml.so.595.80 существует только внутри каталога альтернатив /usr/lib64/nvidia_595.80/, а запись в ld-кэше указывает на /etc/libnvidiacurrent/libnvidia-ml.so.1 → nvidia-ctk библиотеку не находит. Подтверждение — в сгенерированной /etc/cdi/nvidia.yaml есть упоминания только libcuda: # grep -nE 'nvidia-ml|libcuda' /etc/cdi/nvidia.yaml 86: - libcuda.so.1::/usr/lib64/libcuda.so 88: - libcuda.so.595.80::/usr/lib64/libcuda.so.1 124: - hostPath: /usr/lib64/libcuda.so.595.80 125: containerPath: /usr/lib64/libcuda.so.595.80 Шаги воспроизведения: Установить драйвер NVIDIA 595.80 (nvidia_glx_595.80, libnvidia-ml-595.80, kernel-modules-nvidia) и nvidia-container-toolkit-1.18.2, podman. Сгенерировать спецификацию: nvidia-ctk cdi generate --output=/etc/cdi/nvidia.yaml Убедиться, что устройства видны: nvidia-ctk cdi list (выводит nvidia.com/gpu=0, =all). Запустить: podman run --rm --device nvidia.com/gpu=all docker.io/library/ubuntu:24.04 nvidia-smi Фактический результат: NVIDIA-SMI couldn't find libnvidia-ml.so library in your system. ... В контейнере отсутствует libnvidia-ml.so.1; grep nvidia-ml /etc/cdi/nvidia.yaml не даёт совпадений. Ожидаемый результат: nvidia-smi в контейнере выводит таблицу GPU; libnvidia-ml.so.1 смонтирована и доступна линковщику контейнера. Обходные пути: Без изменения системы — домонтировать библиотеку в контейнер (путь /etc/libnvidiacurrent стабилен при обновлениях драйвера): podman run ... -v /etc/libnvidiacurrent/libnvidia-ml.so.1:/usr/lib64/libnvidia-ml.so.1:ro ... Системно — создать версионированный симлинк в стандартном пути по аналогии с libcuda и перегенерировать спецификацию: ln -s nvidia_595.80/libnvidia-ml.so.595.80 /usr/lib64/libnvidia-ml.so.595.80 ldconfig nvidia-ctk cdi generate --output=/etc/cdi/nvidia.yaml После этого nvidia-smi в контейнере работает. Минус: симлинк нужно пересоздавать при смене ветки драйвера. Предлагаемое исправление: Привести раскладку libnvidia-ml к схеме libcuda: пакет (или скрипты альтернатив apt-scripts-nvidia) должен размещать в /usr/lib64/ версионированный файл/симлинк libnvidia-ml.so.595.80 и soname-симлинк libnvidia-ml.so.1, чтобы библиотека корректно обнаруживалась nvidia-container-toolkit. Вероятно, той же проблеме подвержены и другие compute-библиотеки, отсутствующие в спецификации (libnvidia-ptxjitcompiler, libnvidia-nvvm, libcudadebugger — стоит проверить их наличие в /etc/cdi/nvidia.yaml). Дополнительная информация: Хост: Alt Linux p11, ядро с kernel-modules-nvidia-6.18-595.80, GPU NVIDIA GeForce RTX 5060 Ti (Blackwell), хостовый nvidia-smi работает корректно. Установлено несколько веток драйвера параллельно (390/470/580/595, штатная схема альтернатив) — активна 595.80 через /etc/libnvidiacurrent. CUDA-приложения в контейнерах (llama.cpp, образ на базе nvidia/cuda:13.2.0) работают, т.е. проблема изолирована именно в NVML.