Как установить драйвера Nvidia в Linux?
Цель и актуальность
Хочется от своего собственного сервера получать максимум, в том числе играть на нем в игры, работать с мдиа и использовать сервисы на базе ML-моделей, которые активно используют расчеты на видеокарте. Сложности начинаются, когда у Вас Linux, видеокарта NVIDIA, система виртуализации и работа с Docker. В статье ниже будем пытаться не загрустить и решить возникшие трудности. В своей работе использую Ubuntu Server чаще всего, поэтому команды будут работать для этой OS.
Добавление PCI-устройства в proxmox
Здесь относительно все просто. На вкладе «Hardware» добавляем нашу видеокарту.
Нужно помнить, что 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
Установка для взаимодействия 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
Итог
В итоге имеем возможность активно взаимодействовать с видеокартой не только внутри VM, но и внутри Docker.
Ссылки: