Как установить драйвера Nvidia в Linux?

Цель и актуальность

Хочется от своего собственного сервера получать максимум, в том числе играть на нем в игры, работать с мдиа и использовать сервисы на базе ML-моделей, которые активно используют расчеты на видеокарте. Сложности начинаются, когда у Вас Linux, видеокарта NVIDIA, система виртуализации и работа с Docker. В статье ниже будем пытаться не загрустить и решить возникшие трудности. В своей работе использую Ubuntu Server чаще всего, поэтому команды будут работать для этой OS.

Добавление PCI-устройства в proxmox

Здесь относительно все просто. На вкладе «Hardware» добавляем нашу видеокарту. |800

Нужно помнить, что 1 видеокарту NVIDIA мы можем подключить только к 1 VM и об этом позаботились инженеры NVIDIA. Доступа к ресурсам 1 видеокарты несколькими VM возможен, но Ваша видеокарта должна быть из этого списка.

После добавления устройства и запуска VM выполняем:

$ lspci

00:00.0 Host bridge: Intel Corporation 440FX - 82441FX PMC [Natoma] (rev 02)
00:01.0 ISA bridge: Intel Corporation 82371SB PIIX3 ISA [Natoma/Triton II]
00:01.1 IDE interface: Intel Corporation 82371SB PIIX3 IDE [Natoma/Triton II]
00:01.2 USB controller: Intel Corporation 82371SB PIIX3 USB [Natoma/Triton II] (rev 01)
00:01.3 Bridge: Intel Corporation 82371AB/EB/MB PIIX4 ACPI (rev 03)
00:02.0 VGA compatible controller: Device 1234:1111 (rev 02)
00:03.0 Unclassified device [00ff]: Red Hat, Inc. Virtio memory balloon
00:05.0 PCI bridge: Red Hat, Inc. QEMU PCI-PCI bridge
00:08.0 Communication controller: Red Hat, Inc. Virtio console
00:10.0 VGA compatible controller: NVIDIA Corporation TU106 [GeForce RTX 2060 SUPER] (rev a1)
00:10.1 Audio device: NVIDIA Corporation TU106 High Definition Audio Controller (rev a1)
00:10.2 USB controller: NVIDIA Corporation TU106 USB 3.1 Host Controller (rev a1)
00:10.3 Serial bus controller: NVIDIA Corporation TU106 USB Type-C UCSI Controller (rev a1)
00:12.0 Ethernet controller: Red Hat, Inc. Virtio network device
00:1e.0 PCI bridge: Red Hat, Inc. QEMU PCI-PCI bridge
00:1f.0 PCI bridge: Red Hat, Inc. QEMU PCI-PCI bridge
01:01.0 SCSI storage controller: Red Hat, Inc. Virtio SCSI

Видим строку 00:10.0 VGA compatible controller: NVIDIA Corporation TU106 [GeForce RTX 2060 SUPER] (rev a1) и это означает, что можем продолжать дальнейшие действия.

Установка драйверов NVIDIA внутри VM

Проверяем установку драйверов NVIDIA, которая могла быть до этого и удаляем установочные файлы:

sudo apt remove nvidia-*
sudo add-apt-repository --remove ppa:graphics-drivers/ppa
sudo apt remove xserver-xorg-video-nvidia-*
sudo apt update
rm -Rf /usr/local/cuda/
sudo reboot

Обновляем пакеты и устанавливаем копилятор:

# Обновляем репозитории и пакеты
sudo apt update && sudo apt upgrade -y
# Устанавливаем копилятор и просматриваем его версию
sudo apt install build-essential -y
gcc --version

Просмотр доступных драйверов: sudo ubuntu-drivers list --gpgpu. Посмотреть конкретный файлы для скачивания можно тут. Установка драйвера:

# Скачиваем установочный скрипт
wget https://us.download.nvidia.com/XFree86/Linux-x86_64/550.107.02/NVIDIA-Linux-x86_64-550.107.02.run
# Выдаем права для запуска
chmod +x NVIDIA-Linux-x86_64-550.107.02.run
# Запускаем и перезагружаем. В ходе установки будут
# задаваться вопросы, со всем соглашаемсяи и продолжаем установку
sudo sh ./NVIDIA-Linux-x86_64-550.107.02.run
sudo reboot

Проверяем работу:

nvidia-smi

|800

Установка для взаимодействия NVIDIA с Docker

sudo apt install nvidia-cuda-toolkit -y
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
  && curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
    sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
    sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
sudo sed -i -e '/experimental/ s/^#//g' /etc/apt/sources.list.d/nvidia-container-toolkit.list
sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit

Редактируем через sudo nano /etc/docker/daemon.json:

{
    "runtimes": {
        "nvidia": {
            "path": "nvidia-container-runtime",
            "runtimeArgs": []
        }
    },
    "default-runtime": "nvidia"
}

Рестарт docker: sudo systemctl restart docker Проверяем работу:

docker run --rm --gpus all nvidia/cuda:11.0.3-base-ubuntu20.04 nvidia-smi

|800

Итог

В итоге имеем возможность активно взаимодействовать с видеокартой не только внутри VM, но и внутри Docker.

Ссылки:

  1. Как установить Proxmox?

  2. Как установить Docker?

  3. Зачем нужен собственный сервер в 2025?