Skip to content

Instantly share code, notes, and snippets.

@poedator
Last active November 26, 2023 13:14
Show Gist options
  • Save poedator/4d4e97acbedf5dc4b58ec652a0b52b44 to your computer and use it in GitHub Desktop.
Save poedator/4d4e97acbedf5dc4b58ec652a0b52b44 to your computer and use it in GitHub Desktop.
Как обновлять куду на серверах ресёрча и не отстрелить себе ногу.

"Но я уже умею ставить дрова видеокарты себе на комп": на машинах с 8x A100 используется хитрая виртуализация GPU, простые способы установить на них nvidia-driver обычно не работают или работают нестабильно.

Часть 1. Подготовка

до установки важно поставить сделать sudo apt update и чтобы update закончился без ошибок. Если видишь ошибки - исправляй ошибки, пока update не завершится успешно.

Проверьте sudo apt list nvidia-driver* nvidia-fabricmanager* nvidia-fabricmanager-dev* libnvidia-nscq* Эта команда должна вывести в списке свежие версии nvidia-driver и nvidia-fabricmanager. Нужная вам версия должна совпадать у driver и fabricmanager хотя бы до первых трёх чисел. Например, эти версии совпадают:

nvidia-driver-530/unknown,now 530.30.02-0ubuntu1 amd64
nvidia-fabricmanager-530/unknown,unstable,now 530.30.02-1 amd64
nvidia-fabricmanager-dev-530/unknown,unstable 530.30.02-1 amd64
libnvidia-nscq-530/unknown,unstable 530.30.02-1 amd64

Запомните название пакетов до слэша "/" . В примере выше - nvidia-driver-530 nvidia-fabricmanager-530 nvidia-fabricmanager-dev-530 libnvidia-nscq-530

Что делать, если в списке нет нужной мне версии? Добавляем пакеты от более свежей версии убунту. Например, вот так добавить драйвера из списков убунты 20 — даже если на сервере стоит более ранняя убунта. Гуглите ссылки с тем же префиксом от нвидии)

apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/3bf863cc.pub
add-apt-repository "deb https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/ /"
apt-get update

После этого перепроверьте список sudo apt list nvidia-driver* nvidia-fabricmanager* nvidia-fabricmanager-dev* , там должны появиться новые версии

Часть 2 - удаляем старые драйвера и зависимости

sudo apt purge nvidia* libnvidia* cuda*

  • после успешного purge вот эта команда sudo dpkg -l | grep nvidia — не должна найти модулей с nvidia в названии
Если purge почему-то не отработал, дальше продолжать нельзя. Что делать тогда?

Если команда говорит, что ничего не нашла — возможно, что в драйверов на машине нет или они стоят не через APT. Если на машине не стоит драйверов - переходите к следующей части "Установка".

Если пакеты есть, но поставлены не через APT - их нужно удалить так, как их поставили. Если ставили официальным установщиком - запустите установщик с флагом --uninstall (https://askubuntu.com/questions/219942/how-to-uninstall-manually-installed-nvidia-drivers). Если хрен знает, как - можно удалить через dpkg

sudo dpkg -l | grep nvidia   # returns a list of installed packages
sudo dpkg --purge PACKAGE_NAME_FROM_PREVIOUS_LINE

Когда purge отработал, нужно остановить уже запущенные драйвера. Самый простой способ - ребутнуть машину,

более сложный - || если вы знаете, что делаете - rmmod nvidia (при этом по пути следует сделать rmmode на зависимые сервисы, типа nvidia-drm). Если вы все сделали правильно, команда rmmod nvidia скажет, что такой модуль не загружен || - если сомневаетесь, лучше ребутайтесь.

После этого не выполняйте nvidia-smi/nvtop и никак не трогайте видеокарту, пока не закончите инструкцию . Если потрогали - начинайте сначала.

Часть 3. Установка

Устанавливаем четыре пакета из списка "запомните название пакетов" (часть 1)

sudo apt install nvidia-driver-530 nvidia-fabricmanager-530 nvidia-fabricmanager-dev-530 libnvidia-nscq-530
sudo systemctl enable nvidia-fabricmanager

После этого перезагружаем машину.

Как проверить, что всё хорошо:

  1. sudo dpkg -l | grep nvidia — должны быть пакеты одной версии

  2. systemctl status nvidia-fabricmanager должен быть active. Если там есть ошибка - исправляем, если остановлен - systemctl start nvidia-fabricmanager

ставим gpu-enabled torch / jax и выполняем какие-то вычисления на GPU. Например, умножаем случайные чиселки

Если вы всё сделали правильно, на вашей машине стоит nvidia-driver. Но не стоит CUDA. Для большинства задач этого достаточно - официальные torch/jax содержат CUDA внутри себя, им не нужно отдельно что-то ставить.

Часть 4. Опционально - ставим CUDA

Но если вы хотите писать свои кернелы или собирать cuda-библиотеки из исходников — иногда бывает удобно поставить CUDA на всю систему. (Но даже тогда это необязательно, можно накатить cudatoolkit-dev из анаконды и пользоваться им)

Если вы хотите поставит CUDA, скачайте установщик с официального сайта, соответствующий вашей версии драйвера до первой точки (или чуть более старый).

Для этого ищем страницу типа такой (https://developer.nvidia.com/cuda-12-2-0-download-archive?target_os=Linux&target_arch=x86_64), возможно для какой-то более новой версии CUDA. Проходим там по инструкци для local installer, получаем ссылку. Например, такую:

wget https://developer.download.nvidia.com/compute/cuda/12.1.0/local_installers/cuda_12.1.0_530.30.02_linux.run

ПЕРЕД ЗАПУСКОМ - оно вам предложит установить 1) драйвер 2) cuda и ещё всякую фигню. Вам строго_обязательно нужно отключить установку драйвера. Во время установки снять галочку. Если не сняли и оно сломало вам драйвер - удаляйте драйвер и sudo apt install nvidia-driver-530

sudo sh cuda_12.1.0_530.30.02_linux.run # НЕ ЗАБЫВАЕМ УБРАТЬ ГАЛКУ С УСТАНОВКИ ДРАЙВЕРА

после этого у вас есть куда в /usr/local/cuda-* -- или в другом месте, если вы вручную указали другой путь.

Последний штрих - поставить CUDNN Для этого идём сюда и качаем версию под вашу CUDA. Возможно придётся зарегистрировать аккаунт nvidia. Как скачали архив - заливаем на сервер, распаковываем содержимое в аналогичные папки из /usr/local/cuda-* (для вашей конкретной версии CUDA)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment