Bug 59499
| Summary: | libnvidia-ml не попадает в CDI-спецификацию nvidia-container-toolkit: в контейнерах не работает nvidia-smi и любые потребители NVML | ||||||||
|---|---|---|---|---|---|---|---|---|---|
| Product: | Sisyphus | Reporter: | pshkourin | ||||||
| Component: | nvidia-container-toolkit | Assignee: | Maxim Slipenko <maks1ms> | ||||||
| Status: | REOPENED --- | QA Contact: | qa-sisyphus | ||||||
| Severity: | normal | ||||||||
| Priority: | P5 | CC: | glinkinvd, maks1ms, zerg | ||||||
| Version: | unstable | ||||||||
| Hardware: | x86_64 | ||||||||
| OS: | Linux | ||||||||
| Bug Depends on: | 59069 | ||||||||
| Bug Blocks: | |||||||||
| Attachments: |
|
||||||||
Этому мешает зависимость в пакете resources. #59069 Как только она исчезнет, мешающий файл сразу уберу. nvidia_glx_libs_595.91.07-595.91.07-alt3 -> sisyphus: Mon Sep 07 2026 Sergey V Turchin <zerg@altlinux> 595.91.07-alt3 - cleanup libnvidia-ml package (closes: 59499) Thu Aug 20 2026 Sergey V Turchin <zerg@altlinux> 595.91.07-alt2 - cleanup На пути в p11 https://packages.altlinux.org/ru/tasks/432263/ (Ответ для Sergey V Turchin на комментарий #1) > Этому мешает зависимость в пакете resources. #59069 > Как только она исчезнет, мешающий файл сразу уберу. Проблема была связана не только с упаковкой драйвера, но и с логикой поиска библиотек в nvidia-container-toolkit. В текущей схеме сборки ALT версии NVIDIA-библиотек могут находиться в каталоге: /usr/lib64/nvidia_<версия>/ при этом активные alternatives-ссылки разрешаются через: /etc/libnvidiacurrent/ nvidia-container-toolkit находил libcuda.so.1 через стандартный путь и использовал каталог libcuda как основной каталог поиска остальных версионированных библиотек. libnvidia-ml.so.1, однако, разрешалась через ld.so.cache в /etc/libnvidiacurrent/, а её фактическая версионированная библиотека находилась в /usr/lib64/nvidia_<версия>/. Этот каталог не добавлялся в список поиска. В результате libnvidia-ml.so.1 не попадала в CDI-спецификацию. В контейнере отсутствовала NVML, поэтому: NVIDIA-SMI couldn't find libnvidia-ml.so library При этом CUDA-библиотеки могли работать, так как libcuda.so находилась по ожидаемому пути. Подготовлен патч для nvidia-container-toolkit: каталог, в котором через системный lookup разрешается libnvidia-ml.so.1, добавляется в список поиска библиотек драйвера. Путь не захардкожен, поэтому исправление работает с каталогами alternatives вида /usr/lib64/nvidia_<версия>. Патч проверен на ALT p11 + 432263 с NVIDIA 595.91.07: - nvidia-ctk cdi generate успешно добавляет libnvidia-ml.so.1; - CDI содержит /usr/lib64/nvidia_595.91.07/libnvidia-ml.so.1; - podman run --device nvidia.com/gpu=all ... nvidia-smi -L успешно показывает GPU. Текущая версия пакета в Sisyphus: nvidia-container-toolkit-1.18.2-alt1 Created attachment 22250 [details]
nvidia-container-toolkit-alt-nvml.patch
libnvidia-ml теперь пустой пакет https://packages.altlinux.org/ru/tasks/432263/ |

Description
pshkourin 2026-06-11 00:28:16 MSKCreated 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.