Вопрос или проблема
Я провел пару дней, размышляя об этом, и не знаю, как дальше двигаться.
У меня есть 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
-
Откройте терминал и выполните следующие команды, чтобы удалить все установленные драйвера NVIDIA:
sudo apt-get purge nvidia*
-
После этого отключите графический интерфейс:
sudo service lightdm stop
Шаг 2: Установка необходимых зависимостей
Перед установкой драйвера NVIDIA и CUDA, установите необходимые пакеты и зависимости:
sudo apt-get update
sudo apt-get install build-essential linux-headers-$(uname -r) dkms
Шаг 3: Установка драйвера NVIDIA
-
Перейдите на официальный сайт NVIDIA и загрузите актуальную версию драйвера для вашей видеокарты. Например, для GeForce 940M выберите последнюю версию драйвера.
-
Сохраните файл и установите его, выполнив следующие команды в TTY (вы можете войти в TTY, нажав
Ctrl + Alt + F1
):cd /path/to/your/driver sudo sh NVIDIA-Linux-x86_64-*.run
Во время установки следуйте инструкциям на экране и убедитесь, что вы собираетесь устанавливать драйвер и не выбираете установку модуля X.
Шаг 4: Настройка CUDA Toolkit
-
После установки драйвера NVIDIA загрузите CUDA Toolkit 8.0 с официального сайта NVIDIA. Выберите
Runfile
версию. -
Установите CUDA Toolkit, выполнив следующие команды в TTY:
cd /path/to/your/cuda sudo sh cuda_8.0*.run
Во время установки следуйте инструкциям и убедитесь, что вы соглашаетесь на установку драйвера, если это будет предложено.
Шаг 5: Настройка окружения
-
После завершения установки добавьте пути 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
-
Перезагрузите компьютер, чтобы изменения вступили в силу.
Шаг 6: Проверка установки
После перезагрузки проверьте, работает ли драйвер NVIDIA и CUDA:
-
Выполните команду для проверки драйвера:
nvidia-smi
Эта команда должна вывести информацию о вашей графической карте, версиях драйвера и памяти.
-
Проверьте версию CUDA:
nvcc --version
Вы должны увидеть версию CUDA 8.0.
Шаг 7: Компиляция примеров CUDA
Попробуйте скомпилировать примеры CUDA, чтобы убедиться, что всё работает:
-
Перейдите в каталог примеров CUDA:
cd /usr/local/cuda-8.0/samples/1_Utilities/deviceQuery sudo make
-
Запустите пример:
./deviceQuery
Если установка прошла успешно, вы увидите сообщение о том, что устройство CUDA обнаружено.
Заключение
Если у вас продолжат возникать проблемы, убедитесь, что вы используете совместимые версии драйверов и CUDA. Также проверьте, что вы работаете в среде, не загрязненной старыми версиями драйверов или библиотек. Ваша видеокарта GeForce 940M должна быть поддержана CUDA 8.0, и указанные шаги помогут вам успешно настроить систему для работы с deep learning инструментами, такими как TensorFlow или Theano.