CUDA 与 Theano 集成

CUDA 与 Theano 集成

我正在与西阿诺,一个深度学习基准,在新安装的 Ubuntu Mate 16.04 机器上。Theano 可以使用 GPU 加速来加快计算速度。我有一块支持 CUDA 且安装正确的 NVIDIA K2200M 显卡,如下命令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,但从官方 Ubuntu Mate repo 安装nvidia-cuda-*不会创建这些文件夹。尽管如此,Theano 提供了一个 Python 代码,可以帮助确定计算是使用 CPU 还是 GPU 进行的,令人惊讶的是,Theano 找到了 CUDA 安装。

问题来了:系统识别了 CUDA,但是 CUDA 似乎找不到我的 GPU,所以出现错误WARNING (theano.sandbox.cuda): CUDA is installed, but device gpu is not available (error: cuda unavailable)

我写信askubuntu.com给 Theano 开发者,而不是他们,因为在发现这个问题后,我卸载了nvidia-cuda-*NVIDIA 提供的官方软件包,然后安装了 CUDA。指南,这样就/usr/local/cuda创建了上述内容,并且 Theano 代码再次识别了 CUDA 安装,但它仍然找不到我的 GPU。这就是为什么我认为这可能是 Ubuntu 问题,而不是 Theano 方面的错误实现。

答案1

我有点弄清楚这不是 Ubuntu 的问题而是 Theano 的问题,因为我再次从我在 OP 中提到的来源安装了 CUDA,并且我设法正确运行了 NVIDIA 提供的 CUDA 包中的示例数据,排除了(以我缺乏经验的观点)NVIDIA-cuda-toolkit 和 NVIDIA 驱动程序之间的集成问题。

对于那些(将来)遇到与我相同问题的人,问题似乎出在模块中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++

如果 theano GPU 测试代码有错误:

错误(theano.sandbox.cuda):无法编译 cuda_ndarray.cu:libcublas.so.7.5:无法打开共享对象文件:没有此文件或目录警告(theano.sandbox.cuda):CUDA 已安装,但设备 gpu 不可用(错误:cuda 不可用)

只需使用ldconfig命令链接 CUDA 7.5 的共享对象:

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

相关内容