Интеграция CUDA с Theano

Интеграция CUDA с Theano

Я работаю сТеано, тест глубокого обучения, на свежеустановленной машине Ubuntu Mate 16.04. Theano может использовать ускорение GPU для ускорения вычислений. У меня есть видеокарта NVIDIA K2200M, которая поддерживает CUDA и установлена ​​правильно, как nvidia-smiпоказывает команда:

+------------------------------------------------------+                       
| NVIDIA-SMI 361.42     Driver Version: 361.42         |                       
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  Quadro K2200M       Off  | 0000:01:00.0     Off |                  N/A |
| N/A   31C    P8    N/A /  N/A |    212MiB /  2047MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID  Type  Process name                               Usage      |
|=============================================================================|
|    0      1090    G   /usr/lib/xorg/Xorg                             200MiB |
|    0      7931    G   /usr/lib/firefox/firefox                         1MiB |
+-----------------------------------------------------------------------------+

Немного предыстории: Theano необходимо настроить так, чтобы определить несколько переменных окружения, таких как $CUDA_ROOT, и они ссылаются на , /usr/local/cudaно установка nvidia-cuda-*из официального репозитория Ubuntu Mate не создает эти папки. Тем не менее, Theano предлагает код Python, который может помочь определить, производятся ли вычисления с помощью CPU или GPU, и, что удивительно, Theano находит установку CUDA.

Вот в чем проблема: система распознает CUDA, но CUDA не может найти мой графический процессор, и я получаю сообщение об ошибке WARNING (theano.sandbox.cuda): CUDA is installed, but device gpu is not available (error: cuda unavailable).

Я пишу здесь askubuntu.com, а не разработчикам Theano, потому что, обнаружив эту проблему, я удалил nvidia-cuda-*и установил CUDA из официального пакета, предоставленного NVIDIA, следуяэтотруководство, так что вышеупомянутое /usr/local/cudaбыло создано и, опять же, код Theano распознал установку CUDA, но он все еще не мог найти мой GPU. Вот почему я думаю, что это может быть проблема Ubuntu, а не неисправная реализация на стороне Theano.

решение1

Я как-то понял, что это проблема не Ubuntu, а Theano, поскольку я снова установил CUDA из источника, который я упомянул в OP, и мне удалось правильно запустить образцы данных из пакета CUDA, предоставленного NVIDIA, исключив (по моему неопытному мнению) проблему интеграции между NVIDIA-cuda-toolkit и NVIDIA-drivers.

Для тех (в будущем), у кого возникнет та же проблема, что и у меня, проблема, похоже, в модуле theano.sandbox.cuda, когда __init__.pyон пытается скомпилировать cuda_ndarray.cuв строках 168-175 (я полагаю, так как я немного изменил файл), когда этот файл вызывает функцию compiler.compile_str(...), которая, как я полагаю, была создана командой разработчиков Theano. NVCC работает правильно, но есть проблемы с компиляцией cuda_ndarray.

Поэтому я отмечу этот вопрос как решенный, как только askubuntu позволит мне это сделать.

решение2

Если вы используете CUDA 7.5, обязательно следуйте официальным инструкциям:

CUDA 7.5 не поддерживает версию g++ по умолчанию. Установите поддерживаемую версию и сделайте ее версией по умолчанию.

sudo apt-get install g++-4.9

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.9 20
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-5 10

sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.9 20
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-5 10

sudo update-alternatives --install /usr/bin/cc cc /usr/bin/gcc 30
sudo update-alternatives --set cc /usr/bin/gcc

sudo update-alternatives --install /usr/bin/c++ c++ /usr/bin/g++ 30
sudo update-alternatives --set c++ /usr/bin/g++

Если в тестовом коде GPU theano обнаружена ошибка:

ОШИБКА (theano.sandbox.cuda): Не удалось скомпилировать cuda_ndarray.cu: libcublas.so.7.5: невозможно открыть файл общих объектов: Такого файла или каталога нет ПРЕДУПРЕЖДЕНИЕ (theano.sandbox.cuda): CUDA установлена, но графический процессор устройства недоступен (ошибка: cuda недоступен)

Просто используем ldconfigкоманду для привязки общего объекта CUDA 7.5:

sudo ldconfig /usr/local/cuda-7.5/lib64

Связанный контент