使用非 root 用户时使用 CUDA 安装 Theano 的问题
Problems with Theano installation using CUDA when using non-root user
我按照说明从源代码(git 版本)在系统文件夹中安装了 Theano 和 GPUArray(不是作为用户)。 GPUArray 测试 运行 没有错误。
问题是如果我 运行 作为 root,Theano 只能与 GPU 一起工作。 运行 example to test gpu:
(python35) rll@ip-30-92:~$ THEANO_FLAGS=device=cuda python temp.py
ERROR (theano.gpuarray): Could not initialize pygpu, support disabled
Traceback (most recent call last):
File "/usr/local/lib/python3.5/dist-packages/theano/gpuarray/__init__.py", line 179, in <module>
use(config.device)
File "/usr/local/lib/python3.5/dist-packages/theano/gpuarray/__init__.py", line 166, in use
init_dev(device, preallocate=preallocate)
File "/usr/local/lib/python3.5/dist-packages/theano/gpuarray/__init__.py", line 73, in init_dev
context.cudnn_handle = dnn._make_handle(context)
File "/usr/local/lib/python3.5/dist-packages/theano/gpuarray/dnn.py", line 83, in _make_handle
cudnn = _dnn_lib()
File "/usr/local/lib/python3.5/dist-packages/theano/gpuarray/dnn.py", line 70, in _dnn_lib
raise RuntimeError('Could not find cudnn library (looked for v5* or v6*)')
RuntimeError: Could not find cudnn library (looked for v5* or v6*)
[Elemwise{exp,no_inplace}(<TensorType(float64, vector)>)]
Looping 1000 times took 3.201078 seconds
Result is [ 1.23178032 1.61879341 1.52278065 ..., 2.20771815 2.29967753
1.62323285]
Used the cpu
如果 运行 作为 root 它可以工作,尽管仍然存在与 cuDNN 无法识别设备相关的错误可能:
(python35) rll@ip-30-92:~$ sudo THEANO_FLAGS=device=cuda python3 temp.py
Can not use cuDNN on context None: cannot compile with cuDNN. We got this error:
b'/tmp/try_flags_bg7m03hd.c:4:19: fatal error: cudnn.h: No such file or directory\ncompilation terminated.\n'
Mapped name None to device cuda: TITAN X (Pascal) (0000:01:00.0)
[GpuElemwise{exp,no_inplace}(<GpuArrayType<None>(float64, vector)>), HostFromGpu(gpuarray)(GpuElemwise{exp,no_inplace}.0)]
Looping 1000 times took 0.390976 seconds
Result is [ 1.23178032 1.61879341 1.52278065 ..., 2.20771815 2.29967753
1.62323285]
Used the gpu
这台机器上有 2 个 Titan X。与 TensorFlow 配合良好。我没有使用 .theanorc 文件,但我同时设置了:
(python35) rll@ip-30-92:~$ echo $LD_LIBRARY_PATH
/usr/local/cuda-8.0/lib64
(python35) rll@ip-30-92:~$ echo $CUDA_ROOT
/usr/local/cuda-8.0/
我按照说明做了一切,尽管有一些警告,但没有任何错误。
我不认为这是编译目录 .theano
上的权限错误,因为如果我 chown .theano
目录,行为是相同的。
我该如何解决这个问题?
终于找到问题所在了。安装 Theano 的说明中缺少一个方面,即您必须验证是否设置了 LIBRARY_PATH
并将 cuda 库添加到它(注意它不是 LD_LIBRARY_PATH
)。
如果未设置,只需将其导出即可。所以对于临时修复:
export LIBRARY_PATH=/usr/local/cuda-8.0/lib64
持久化可能取决于系统,但一般情况下可以添加到/etc/environment
,添加一行:
LIBRARY_PATH=/usr/local/cuda-8.0/lib64
这修复了 root 时的消息,并修复了普通用户的 cuda。
我按照说明从源代码(git 版本)在系统文件夹中安装了 Theano 和 GPUArray(不是作为用户)。 GPUArray 测试 运行 没有错误。
问题是如果我 运行 作为 root,Theano 只能与 GPU 一起工作。 运行 example to test gpu:
(python35) rll@ip-30-92:~$ THEANO_FLAGS=device=cuda python temp.py
ERROR (theano.gpuarray): Could not initialize pygpu, support disabled
Traceback (most recent call last):
File "/usr/local/lib/python3.5/dist-packages/theano/gpuarray/__init__.py", line 179, in <module>
use(config.device)
File "/usr/local/lib/python3.5/dist-packages/theano/gpuarray/__init__.py", line 166, in use
init_dev(device, preallocate=preallocate)
File "/usr/local/lib/python3.5/dist-packages/theano/gpuarray/__init__.py", line 73, in init_dev
context.cudnn_handle = dnn._make_handle(context)
File "/usr/local/lib/python3.5/dist-packages/theano/gpuarray/dnn.py", line 83, in _make_handle
cudnn = _dnn_lib()
File "/usr/local/lib/python3.5/dist-packages/theano/gpuarray/dnn.py", line 70, in _dnn_lib
raise RuntimeError('Could not find cudnn library (looked for v5* or v6*)')
RuntimeError: Could not find cudnn library (looked for v5* or v6*)
[Elemwise{exp,no_inplace}(<TensorType(float64, vector)>)]
Looping 1000 times took 3.201078 seconds
Result is [ 1.23178032 1.61879341 1.52278065 ..., 2.20771815 2.29967753
1.62323285]
Used the cpu
如果 运行 作为 root 它可以工作,尽管仍然存在与 cuDNN 无法识别设备相关的错误可能:
(python35) rll@ip-30-92:~$ sudo THEANO_FLAGS=device=cuda python3 temp.py
Can not use cuDNN on context None: cannot compile with cuDNN. We got this error:
b'/tmp/try_flags_bg7m03hd.c:4:19: fatal error: cudnn.h: No such file or directory\ncompilation terminated.\n'
Mapped name None to device cuda: TITAN X (Pascal) (0000:01:00.0)
[GpuElemwise{exp,no_inplace}(<GpuArrayType<None>(float64, vector)>), HostFromGpu(gpuarray)(GpuElemwise{exp,no_inplace}.0)]
Looping 1000 times took 0.390976 seconds
Result is [ 1.23178032 1.61879341 1.52278065 ..., 2.20771815 2.29967753
1.62323285]
Used the gpu
这台机器上有 2 个 Titan X。与 TensorFlow 配合良好。我没有使用 .theanorc 文件,但我同时设置了:
(python35) rll@ip-30-92:~$ echo $LD_LIBRARY_PATH
/usr/local/cuda-8.0/lib64
(python35) rll@ip-30-92:~$ echo $CUDA_ROOT
/usr/local/cuda-8.0/
我按照说明做了一切,尽管有一些警告,但没有任何错误。
我不认为这是编译目录 .theano
上的权限错误,因为如果我 chown .theano
目录,行为是相同的。
我该如何解决这个问题?
终于找到问题所在了。安装 Theano 的说明中缺少一个方面,即您必须验证是否设置了 LIBRARY_PATH
并将 cuda 库添加到它(注意它不是 LD_LIBRARY_PATH
)。
如果未设置,只需将其导出即可。所以对于临时修复:
export LIBRARY_PATH=/usr/local/cuda-8.0/lib64
持久化可能取决于系统,但一般情况下可以添加到/etc/environment
,添加一行:
LIBRARY_PATH=/usr/local/cuda-8.0/lib64
这修复了 root 时的消息,并修复了普通用户的 cuda。