Linux как установить CUDA

Установить CUDA (Compute Unified Device Architecture) библиотеки в Linux очень легко и в тоже время сложно. Казалось бы, что тут сложного, сделай какой-нибудь apt-get install cuda или yum install cuda и система на автомате все сама установит. Действительно, во многих случаях этого достаточно, но, как говорится, есть нюансы.


Но перед этим давайте вкратце разберемся, что такое CUDA и зачем это вообще все надо.
Технологию CUDA придумали в Nvidia — это их разработка. В AMD Radeon’ах CUD’ы нет. Если грубо то видеокартах Nvidia есть вычислительные ядра (cores). Можно сказать маленькие процессоры. Эти ядра умеют считать, как и обычные процессоры CPU, но делают это немножко по другому. Если кратко, то они могут складывать несколько чисел одновременно. Поэтому получается быстро. Этих ядер в видеокарте много. Очень много. Количество nvidia cores можно подсмотреть командой: nvidia-settings -q CUDACores -t. Например в GeForce 840m (древняя дешевая ноутбучная видюха) 384 ядра. Так почему бы эти ядра задействовать не только для игр, но и для других полезных дел. Например, майнить биткоины или подбирать забытый пароль для архива (шутка).
На следующей картинке схематично изображен чип видеокарты NVidia. С блоками nvenc и nvdec мы уже разобрались в статье по ускорению конвертации видео из одного формата в другой с помощью ffmpeg. И научились использовать мощь видеокарты в ffmpeg. Теперь настала очередь CUDA ядер. Чего зря простаивают. Будем использовать их на всю катушку.

Так вот, чтобы использовать всю мощь вашей графической карты необходимо выполнение следующих условий:

  1. Наличие карты Nvidia (будем считать, что она уже есть);
  2. Установленные в системе драйвера от Nvidia (будем исходить из того, что тоже установлены);
  3. CUDA Toolkit, те самые библиотеки и программы, которые чаще всего для простоты называют CUDA (без Toolkit)

Вот пунктом номер 3 мы и будем заниматься в этой статье.
Все последующие шаги будут приведены для Ubuntu 18.04 (самая популярная система), но они так же подойдут и для других дистрибутивов Linux.

Предисловие

Устанавливать CUDA будем от обычного пользователя, в домашнюю папку. Я не сторонник установки в /usr/local таких вещей, которые часто приходится обновлять. Лучше поставить куда-нибудь в безопасное место, чтобы не запороть работающую систему. Например, /home/username/cuda подойдет отлично. Надоест эксперементировать с CUDA, просто удалите эту папку и все. И не надо заботиться, что какие-то зависимости нарушились в системе.

Шаг 1 — проверяем nvidia драйвер

Исходим из того, что Nvidia карточка у ва есть и nvidia драйвер установлен в систему и запущен.

lspci | grep -i nvidia
04:00.0 3D controller: NVIDIA Corporation GM108M [GeForce 840M] (rev a2)

Проверяем:
lsmod | grep -i nvidia
вывод должен быть похожим на следующий:

lsmod | grep -i nvidia
nvidia_uvm            880640  0
nvidia_drm             45056  4
nvidia_modeset       1118208  2 nvidia_drm
nvidia              19472384  88 nvidia_uvm,nvidia_modeset
ipmi_msghandler        53248  2 ipmi_devintf,nvidia
drm_kms_helper        172032  2 nvidia_drm,i915
drm                   401408  7 drm_kms_helper,nvidia_drm,i915

Далее определяем версию nvidia драйвера с помощью команды modinfo:

modinfo nvidia| grep -i "^version"
version:        435.21

Есть еще один способ определить версию драйвера. Для этого воспользуемся утилитой nvidia-smi:

 nvidia-smi | grep -i "driver version"
| NVIDIA-SMI 435.21       Driver Version: 435.21       CUDA Version: 10.1     |

Nvidia-smi так же выдала версию 435.21.
Если nvidia-smi не будет в вашей системе, то пользуйтесь способом с modinfo.

Шаг 2 — качаем CUDA Toolkit

Между весрией Nvidia драйвера и версией CUDA Toolkit существует связь. Для определенной версии Nvidia драйвера нужно скачивать и устанавливать строго соответствующий пакет CUDA Toolkit, иначе ничего не получится. Опять же есть два способа определить версию CUDA Toolkit.

Первый способ:
идем на страницу cuda toolkit release notes и в таблице «Table 1. CUDA Toolkit and Compatible Driver Versions» ищем нужное соотвествие между версией драйвера и версией CUDA Toolkit:

Например, на моем ноуте установлен nvidia драйвер версии 435.21, значит мне подойдут все версии CUDA Toolkit кроме 10.2. Иными словами 10.1 включительно и ниже.
Если у вас драйвер версии 390, то CUDA Toolkit надо скачивать версии 9.1 и ниже.

Второй способ:
можно снова воспользоваться утилитой nvidia-smi:

nvidia-smi | grep -i "driver version"
| NVIDIA-SMI 435.21       Driver Version: 435.21       CUDA Version: 10.1     |

здесь четко написано, для вашего драйвера нужна CUDA 10.1.

После того, как определились с версией CUDA Toolkit идем и скачиваем его со страницы:
https://developer.nvidia.com/cuda-toolkit-archive


Здесь выбираем:
Linux -> x86_64 -> Ubuntu -> 18.04 -> runfile (local)

После скачивания в директории для загрузок появится файл:
cuda_10.1.105_418.39_linux.run

Шаг 3 — устанавливаем CUDA Toolkit

Инсталлер скачан. Сделаем его исполняемым:

 
chmod +x cuda_10.1.105_418.39_linux.run

И сразу же запускаем:

 ./cuda_10.1.105_418.39_linux.run

Запускается долго (наверняка происходит самораспаковка).

После соглашения с EULA появляется экран:

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

Далее наводи курсор на «CUDA Toolkit 10.1» и жмем букву «A», тем самым переходя к расширенным настройкам:

Здесь делаем неактивными все позиции, как на скриншоте и переходим в «Change Toolkit Installation Path» и вводим имя директории для установки:

в прцессе установки нужно будет еще ввести «Root install path» вводим туже саму директорию:

Когда установка завершится нужно будет дать системе знать куда установлена CUDA, для этого в файл ~/.bashrc прописываем следующие строки:

export PATH=/home/username/cuda/bin:$PATH
export LD_LIBRARY_PATH=/home/username/cuda/lib64:$LD_LIBRARY_PATH

На этом установка закончена.

Шаг 4 — Тест

Тестируем связку CUDA и драйвера Nvidia. Для этого воспользуемся примеры из устанвки CUDA.
Возьмем тест с частицами.

Sample: particles
Minimum spec: SM 3.0
This sample uses CUDA to simulate and visualize a large set of particles and their physical interaction. Adding "-particles=" to the command line will allow users to set # of particles for simulation. This example implements a uniform grid data structure using either atomic operations or a fast radix sort from the Thrust library

Key concepts:
Graphics Interop
Data Parallel Algorithms
Physically-Based Simulation
Performance Strategies
cd /home/username/cuda/samples/5_Simulations/particles
make
./particles

Как видно из рисунка, тест запустился и судя по выводу nvidia-smi на 24% нагружает видеокарту. Буковки C+G перед ./particles говорят о том, что задействованы и вычислительные (С) и графические (G) ресурсы видеокарты.

Выводы

В данной статье приведено описание способа установки CUDA библиотек в Linux в случае, когда графический драйвер уже установлен, а у пользователя нет прав администратора.

Почитать еще: