Настройка CUDA 8.0 на Ubuntu 16.04, проблема с драйвером NVIDIA

Вопрос или проблема

Я провел пару дней, размышляя об этом, и не знаю, как дальше двигаться.

У меня есть ASUS Zenbook UX303UB с двойной загрузкой Windows 10 и Ubuntu 16.04. Он оснащен выделенным графическим процессором NVIDIA GeForce 940M с 2 ГБ памяти. Я в основном использую Ubuntu для программирования. Я хочу поэкспериментировать с некоторыми инструментами глубокого обучения, такими как TensorFlow и Theano, для чего мне нужно, чтобы CUDA работал. Только CUDA 8.0rc официально поддерживается в Ubuntu 16.04.

Сначала я посетил сайт NVIDIA и скачал исполняемый файл установки CUDA 8.0. Я следовал их инструкциям по установке и делал это в TTY1, включая добавление nouveau в черный список и добавление

export PATH=/usr/local/cuda-8.0/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-8.0/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}

в конец файла .bashrc.

Когда я пробую тестовый пример, который предоставляет NVIDIA,

$ cd NVIDIA_CUDA-8.0_Samples/5_Simulations/nbody
$ make

мой вывод:

>>> WARNING - libGLU.so не найден, смотрите руководство по началу работы с CUDA, чтобы узнать, как его найти и установить. <<<
>>> WARNING - gl.h не найден, смотрите руководство по началу работы с CUDA, чтобы узнать, как его найти и установить. <<<
>>> WARNING - glu.h не найден, смотрите руководство по началу работы с CUDA, чтобы узнать, как его найти и установить. <<<
[@] /usr/local/cuda-8.0/bin/nvcc -ccbin g++ -I../../common/inc -m64 -ftz=true -gencode arch=compute_20,code=sm_20 -gencode arch=compute_30,code=sm_30 -gencode arch=compute_35,code=sm_35 -gencode arch=compute_37,code=sm_37 -gencode arch=compute_50,code=sm_50 -gencode arch=compute_52,code=sm_52 -gencode arch=compute_60,code=sm_60 -gencode arch=compute_60,code=compute_60 -o bodysystemcuda.o -c bodysystemcuda.cu
[@] /usr/local/cuda-8.0/bin/nvcc -ccbin g++ -I../../common/inc -m64 -ftz=true -gencode arch=compute_20,code=sm_20 -gencode arch=compute_30,code=sm_30 -gencode arch=compute_35,code=sm_35 -gencode arch=compute_37,code=sm_37 -gencode arch=compute_50,code=sm_50 -gencode arch=compute_52,code=sm_52 -gencode arch=compute_60,code=sm_60 -gencode arch=compute_60,code=compute_60 -o nbody.o -c nbody.cpp
[@] /usr/local/cuda-8.0/bin/nvcc -ccbin g++ -I../../common/inc -m64 -ftz=true -gencode arch=compute_20,code=sm_20 -gencode arch=compute_30,code=sm_30 -gencode arch=compute_35,code=sm_35 -gencode arch=compute_37,code=sm_37 -gencode arch=compute_50,code=sm_50 -gencode arch=compute_52,code=sm_52 -gencode arch=compute_60,code=sm_60 -gencode arch=compute_60,code=compute_60 -o render_particles.o -c render_particles.cpp
[@] /usr/local/cuda-8.0/bin/nvcc -ccbin g++ -m64 -gencode arch=compute_20,code=sm_20 -gencode arch=compute_30,code=sm_30 -gencode arch=compute_35,code=sm_35 -gencode arch=compute_37,code=sm_37 -gencode arch=compute_50,code=sm_50 -gencode arch=compute_52,code=sm_52 -gencode arch=compute_60,code=sm_60 -gencode arch=compute_60,code=compute_60 -o nbody bodysystemcuda.o nbody.o render_particles.o -L/usr/lib/nvidia-361 -lGL -lGLU -lX11 -lglut
[@] mkdir -p ../../bin/x86_64/linux/release
[@] cp nbody ../../bin/x86_64/linux/release

когда я затем выполняю

$ ./nbody -benchmark -numbodies=256000 -device=0

я получаю сообщение

bash: ./nbody: Нет такого файла или каталога

В процессе диагностики я понял две вещи:

1) nvidia-smi, похоже, не работает (nvidia-smi: команда не найдена)

2) Когда я выполняю cat /proc/driver/nvidia/version, я получаю cat: /proc/driver/nvidia/version: Нет такого файла или каталога

Тогда я решил, что может быть проблема с драйвером NVIDIA. Поэтому я следовал инструкциям на
Проблемы с графическим драйвером Nvidia и CUDA после apt-get upgrade

В основном, нужно удалить все драйверы NVIDIA, отключить lightdm, войти в runlevel3 и установить исполняемый файл драйвера NVIDIA с сайта NVIDIA.

Однако, возникла ошибка при установке, и она завершилась аварийно.

Я затем перезагрузил систему и удалил все драйверы NVIDIA и выполнил sudo apt-get install nvidia-367

Теперь я вернулся к началу. Дополнительная диагностическая информация, приведенная ниже:

$ sudo nvidia-modprobe
sudo: nvidia-modprobe: команда не найдена

$ uname -r
4.4.0-36-generic

$ dpkg -l | grep ii | grep -i linux-headers
ii  linux-headers-4.4.0-31                      4.4.0-31.50                                                 all          Заголовочные файлы, относящиеся к версии ядра Linux 4.4.0
ii  linux-headers-4.4.0-31-generic              4.4.0-31.50                                                 amd64        Заголовочные файлы ядра Linux для версии 4.4.0 на 64-битной архитектуре x86 SMP
ii  linux-headers-4.4.0-34                      4.4.0-34.53                                                 all          Заголовочные файлы, относящиеся к версии ядра Linux 4.4.0
ii  linux-headers-4.4.0-34-generic              4.4.0-34.53                                                 amd64        Заголовочные файлы ядра Linux для версии 4.4.0 на 64-битной архитектуре x86 SMP
ii  linux-headers-4.4.0-36                      4.4.0-36.55                                                 all          Заголовочные файлы, относящиеся к версии ядра Linux 4.4.0
ii  linux-headers-4.4.0-36-generic              4.4.0-36.55                                                 amd64        Заголовочные файлы ядра Linux для версии 4.4.0 на 64-битной архитектуре x86 SMP
ii  linux-headers-generic                       4.4.0.36.38                                                 amd64        Обобщенные заголовочные файлы ядра Linux

$ dpkg -l | grep -i nvidia
ii  bbswitch-dkms                               0.8-3ubuntu1                                                amd64        Интерфейс для включения и отключения питания на видеокартах NVIDIA Optimus
ii  libcuda1-367                                367.44-0ubuntu0~gpu16.04.1                                  amd64        Библиотека времени выполнения NVIDIA CUDA
ii  nvidia-367                                  367.44-0ubuntu0~gpu16.04.1                                  amd64        Двоичный драйвер NVIDIA - версия 367.44
ii  nvidia-opencl-icd-367                       367.44-0ubuntu0~gpu16.04.1                                  amd64        NVIDIA OpenCL ICD
ii  nvidia-prime                                0.8.2                                                       amd64        Инструменты для включения Prime от NVIDIA
ii  nvidia-settings                             370.23-0ubuntu0~gpu16.04.1                                  amd64        Инструмент для настройки графического драйвера NVIDIA

$ nvcc --version
nvcc: NVIDIA (R) Компилятор CUDA
Copyright (c) 2005-2016 NVIDIA Corporation
Собран в среду, 4 мая 2016 года, 21:01:56 CDT
Инструменты компиляции Cuda, релиз 8.0, V8.0.26

Буду признателен за любую помощь, так как я много раз близок к поломке ubuntu!!

Я решил проблему, следуя этому учебнику: http://kislayabhi.github.io/Installing_CUDA_with_Ubuntu/

Следуйте ему примерно, т.е. скачайте и установите последнюю версию драйвера с сайта nvidia вместо того, чтобы скачивать и устанавливать nvidia-367, как рекомендует учебник.

Ответ или решение

Для установки CUDA 8.0 на Ubuntu 16.04 и исправления проблем с драйверами NVIDIA, вам нужно выполнить следующие шаги. Я постараюсь описать процесс детально и на русском языке, чтобы вам было удобнее следовать инструкциям.

Шаг 1: Удаление существующих драйверов NVIDIA

  1. Откройте терминал и выполните следующие команды, чтобы удалить все установленные драйвера NVIDIA:

    sudo apt-get purge nvidia*
  2. После этого отключите графический интерфейс:

    sudo service lightdm stop

Шаг 2: Установка необходимых зависимостей

Перед установкой драйвера NVIDIA и CUDA, установите необходимые пакеты и зависимости:

sudo apt-get update
sudo apt-get install build-essential linux-headers-$(uname -r) dkms

Шаг 3: Установка драйвера NVIDIA

  1. Перейдите на официальный сайт NVIDIA и загрузите актуальную версию драйвера для вашей видеокарты. Например, для GeForce 940M выберите последнюю версию драйвера.

  2. Сохраните файл и установите его, выполнив следующие команды в TTY (вы можете войти в TTY, нажав Ctrl + Alt + F1):

    cd /path/to/your/driver
    sudo sh NVIDIA-Linux-x86_64-*.run

    Во время установки следуйте инструкциям на экране и убедитесь, что вы собираетесь устанавливать драйвер и не выбираете установку модуля X.

Шаг 4: Настройка CUDA Toolkit

  1. После установки драйвера NVIDIA загрузите CUDA Toolkit 8.0 с официального сайта NVIDIA. Выберите Runfile версию.

  2. Установите CUDA Toolkit, выполнив следующие команды в TTY:

    cd /path/to/your/cuda
    sudo sh cuda_8.0*.run

    Во время установки следуйте инструкциям и убедитесь, что вы соглашаетесь на установку драйвера, если это будет предложено.

Шаг 5: Настройка окружения

  1. После завершения установки добавьте пути CUDA в ваш .bashrc файл:

    echo 'export PATH=/usr/local/cuda-8.0/bin${PATH:+:${PATH}}' >> ~/.bashrc
    echo 'export LD_LIBRARY_PATH=/usr/local/cuda-8.0/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}' >> ~/.bashrc
    source ~/.bashrc
  2. Перезагрузите компьютер, чтобы изменения вступили в силу.

Шаг 6: Проверка установки

После перезагрузки проверьте, работает ли драйвер NVIDIA и CUDA:

  1. Выполните команду для проверки драйвера:

    nvidia-smi

    Эта команда должна вывести информацию о вашей графической карте, версиях драйвера и памяти.

  2. Проверьте версию CUDA:

    nvcc --version

    Вы должны увидеть версию CUDA 8.0.

Шаг 7: Компиляция примеров CUDA

Попробуйте скомпилировать примеры CUDA, чтобы убедиться, что всё работает:

  1. Перейдите в каталог примеров CUDA:

    cd /usr/local/cuda-8.0/samples/1_Utilities/deviceQuery
    sudo make
  2. Запустите пример:

    ./deviceQuery

    Если установка прошла успешно, вы увидите сообщение о том, что устройство CUDA обнаружено.

Заключение

Если у вас продолжат возникать проблемы, убедитесь, что вы используете совместимые версии драйверов и CUDA. Также проверьте, что вы работаете в среде, не загрязненной старыми версиями драйверов или библиотек. Ваша видеокарта GeForce 940M должна быть поддержана CUDA 8.0, и указанные шаги помогут вам успешно настроить систему для работы с deep learning инструментами, такими как TensorFlow или Theano.

Оцените материал
Добавить комментарий

Капча загружается...