Bug 59499

Summary: libnvidia-ml не попадает в CDI-спецификацию nvidia-container-toolkit: в контейнерах не работает nvidia-smi и любые потребители NVML
Product: Sisyphus Reporter: pshkourin
Component: libnvidia-mlAssignee: 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:
Description Flags
Окружение на хосте с выявленным багом в libnvidia-ml none

Description pshkourin 2026-06-11 00:28:16 MSK
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.
Comment 1 Sergey V Turchin 2026-06-11 11:19:44 MSK
Этому мешает зависимость в пакете resources. #59069
Как только она исчезнет, мешающий файл сразу уберу.