Рекомендации по обновлению драйверов NVIDIA
Примечание
В регионе Казахстан доступны только платформы standard-v3 (Intel Ice Lake) и standard-v3-t4i (Intel Ice Lake with T4i). Другие типы платформ, кластеры GPU и выделенные хосты недоступны.
Важно
Данное руководство предназначено для платформ gpu-standard-v3 (AMD EPYC™ with NVIDIA® Ampere® A100) и gpu-standard-v3i.
Для платформы gpu-standard-v3i поддерживается только образ с драйвером NVIDIA 535 и поддержкой secure-boot. Обновление видеодрайвера на этой платформе невозможно; допустимо обновлять только библиотеку CUDA.
Поддерживаемые драйверы и рекомендации
Виртуальные машины платформ gpu-standard-v3 (AMD EPYC™ with NVIDIA® Ampere® A100) и gpu-standard-v3i в Yandex Cloud преднастраиваются с драйвером NVIDIA 535.
Мы рекомендуем использовать именно эту версию драйвера — обновление драйвера до других версий не поддерживается и может привести к нестабильности работы GPU.
Модель виртуализации Shared NVSwitch
Мы используем модель виртуализации Shared NVSwitch, описанную в документации NVIDIA Fabric Manager User Guide
NVSwitch-устройства вынесены в отдельную служебную ВМ и управляются отдельным драйвером NVIDIA версии 535. При старте гостевой ВМ GPU преднастраиваются для работы с NVLink; чтобы сохранить эту предконфигурацию, в Yandex Cloud запрещен программный сброс GPU из пользовательских ВМ.
Если в пользовательской ВМ обновить драйвер до другой версии (например, 570), драйвер может не распознать текущее состояние GPU — это ограничение драйверов NVIDIA. Поэтому смена версии драйвера из пользовательской ВМ не рекомендуется.
Почему именно драйвер версии 535?
NVIDIA публикует несколько веток драйверов (NVIDIA Data Center Drivers Overview
- LTSB (Long-Term Support Branch) — долгосрочная поддержка (обновления безопасности и исправления в течение 3 лет);
- PB (Production Branch) — основная ветка для дата-центров;
- NFB (New Feature Branch) — драйверы с новыми возможностями.
Версия 535 относится к LTSB; она валидирована и поддерживается в инфраструктуре Yandex Cloud. Драйверы из других веток не проходят проверку совместимости и могут работать некорректно.
Обновление CUDA
Часто требуется не смена драйвера, а обновление CUDA Toolkit. В большинстве случаев обновлять драйвер не нужно — достаточно установить требуемую версию CUDA и пакет cuda-compat, который обеспечивает совместимость с драйвером 535 (механизм CUDA Forward Compatibility
Пример установки (Ubuntu)
-
Подключите репозиторий NVIDIA CUDA:
sudo apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu$(lsb_release -rs | sed -e 's/\.//')/x86_64/3bf863cc.pub sudo add-apt-repository "deb https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/ /" sudo apt update -
Установите
cuda-compat(пример для CUDA 12.5):sudo apt install -y cuda-compat-12-5 echo 'export LD_LIBRARY_PATH=/usr/local/cuda-12.5/compat:$LD_LIBRARY_PATH' >> ~/.bashrc && source ~/.bashrc -
Проверьте текущую конфигурацию:
nvidia-smi
Проблема с sudo rebootпосле обновления драйвера выше 535 и рекомендуемый обход
При переустановке драйвера и последующем sudo reboot драйвер не успевает корректно выгрузиться — поскольку в Yandex Cloud программный сброс GPU запрещен, карта остается в невалидном состоянии. Это не приводит к аппаратным проблемам, но ВМ будет работать некорректно. Вместо sudo reboot используйте команду yc compute instance restart.
Поэтому обновление драйвера выше версии 535 не рекомендуется. Если требуется установить драйвер выше 535 и выполнить перезагрузку пользовательской ВМ, можно применить следующий обходной сценарий:
-
Установите
драйвер.Скрипт для Ubuntu
#!/bin/bash set -e # Фиксируем архитектуру arch="x86_64" # Определяем версию Ubuntu (20.04 -> ubuntu2004, 22.04 -> ubuntu2204 и т.д.) . /etc/os-release if [[ "$ID" != "ubuntu" ]]; then echo "Этот скрипт рассчитан только на Ubuntu!" exit 1 fi distro="ubuntu${VERSION_ID//./}" echo "Используем репозиторий: $distro/$arch" # 1. Скачиваем пакет с ключами wget https://developer.download.nvidia.com/compute/cuda/repos/${distro}/${arch}/cuda-keyring_1.1-1_all.deb # 2. Устанавливаем ключи sudo dpkg -i cuda-keyring_1.1-1_all.deb || { echo "Не удалось установить cuda-keyring, выполняем альтернативные шаги..." # 2a. Загружаем gpg-ключ вручную wget https://developer.download.nvidia.com/compute/cuda/repos/${distro}/${arch}/cuda-archive-keyring.gpg # 2b. Кладём ключ в правильное место sudo mv cuda-archive-keyring.gpg /usr/share/keyrings/cuda-archive-keyring.gpg # 2c. Подключаем репозиторий CUDA вручную echo "deb [signed-by=/usr/share/keyrings/cuda-archive-keyring.gpg] \ https://developer.download.nvidia.com/compute/cuda/repos/${distro}/${arch}/ /" \ | sudo tee /etc/apt/sources.list.d/cuda-${distro}-${arch}.list } # 3. Обновляем список пакетов sudo apt update # 4. Устанавливаем драйверы NVIDIA sudo apt install -y nvidia-open # 5. Устанавливаем метапакет драйверов CUDA sudo apt install -y cuda-drivers -
Дальнейшие шаги необходимо выполнять до перезагрузки системы через
sudo reboot.
Создайте скрипт/usr/libexec/manage-nvidia:#!/bin/bash set -eu usage() { echo "usage: manage-nvidia (load|unload)" exit 1 } [ $# -eq 1 ] || usage case "$1" in load) modprobe nvidia ;; unload) modprobe -r nvidia_uvm nvidia_drm nvidia_modeset nvidia ;; *) usage ;; esac -
Сделайте скрипт исполняемым:
sudo chmod +x /usr/libexec/manage-nvidia -
Создайте systemd-unit
/etc/systemd/system/manage-nvidia.service:[Unit] Description=Manage NVIDIA driver Before=nvidia-persistenced.service [Service] Type=oneshot ExecStart=/usr/libexec/manage-nvidia load RemainAfterExit=true ExecStop=/usr/libexec/manage-nvidia unload StandardOutput=journal [Install] WantedBy=multi-user.target RequiredBy=nvidia-persistenced.service -
Перезагрузите конфигурацию
systemd, включите автоматический запуск сервисаmanage-nvidiaпри загрузке системы и запустите сам сервис:sudo systemctl daemon-reload sudo systemctl enable --now manage-nvidiaОжидаемый вывод при успешном выполнении:
Created symlink /etc/systemd/system/multi-user.target.wants/manage-nvidia.service → /etc/systemd/system/manage-nvidia.service. Created symlink /etc/systemd/system/nvidia-persistenced.service.requires/manage-nvidia.service → /etc/systemd/system/manage-nvidia.service.Проверьте зависимость от
manage-nvidia.serviceуnvidia-persistenced.service:sudo systemctl list-dependencies nvidia-persistenced | grep manage-nvidiaРезультат:
● ├─manage-nvidia.serviceПроверьте статус сервиса:
sudo systemctl status manage-nvidia
После этого при sudo reboot systemd вызовет ExecStop для сервиса manage-nvidia, драйвер будет выгружен корректно, и перезагрузка пройдет без оставления GPU в невалидном состоянии.