python - Theano 无法导入 pygpu/cudnn(macOS、CUDA 8)

标签 python theano theano-cuda

问题是我无法导入theano。我知道关于同一问题还有其他几个问题,但没有一个对我有用,通常它们要么使用旧版本,要么使用不同的操作系统。几天来我一直在尝试解决这个问题,并且我已经尝试了我能找到的所有修复和技巧,所以除了在这里询问之外,我想不出还有什么可以尝试的。

如果我在不使用 sudo 的情况下尝试 python3 -c "import theano" ,我会得到以下结果:

ERROR (theano.gpuarray): Could not initialize pygpu, support disabled
Traceback (most recent call last):
  File "/Users/np/miniconda3/lib/python3.6/site-packages/theano/gpuarray/__init__.py", line 164, in <module>
    use(config.device)
  File "/Users/np/miniconda3/lib/python3.6/site-packages/theano/gpuarray/__init__.py", line 151, in use
    init_dev(device)
  File "/Users/np/miniconda3/lib/python3.6/site-packages/theano/gpuarray/__init__.py", line 68, in init_dev
    context.cudnn_handle = dnn._make_handle(context)
  File "/Users/np/miniconda3/lib/python3.6/site-packages/theano/gpuarray/dnn.py", line 86, in _make_handle
    raise RuntimeError("error creating cudnn handle")
RuntimeError: error creating cudnn handle

使用 sudo 我得到

ERROR (theano.gpuarray): Could not initialize pygpu, support disabled
Traceback (most recent call last):
  File "/Users/np/miniconda3/lib/python3.6/site-packages/theano/gpuarray/__init__.py", line 164, in <module>
    use(config.device)
  File "/Users/np/miniconda3/lib/python3.6/site-packages/theano/gpuarray/__init__.py", line 151, in use
    init_dev(device)
  File "/Users/np/miniconda3/lib/python3.6/site-packages/theano/gpuarray/__init__.py", line 66, in init_dev
    avail = dnn.dnn_available(name)
  File "/Users/np/miniconda3/lib/python3.6/site-packages/theano/gpuarray/dnn.py", line 175, in dnn_available
    if not dnn_present():
  File "/Users/np/miniconda3/lib/python3.6/site-packages/theano/gpuarray/dnn.py", line 158, in dnn_present
    dnn_present.avail, dnn_present.msg = _dnn_check_version()
  File "/Users/np/miniconda3/lib/python3.6/site-packages/theano/gpuarray/dnn.py", line 131, in _dnn_check_version
    v = version()
  File "/Users/np/miniconda3/lib/python3.6/site-packages/theano/gpuarray/dnn.py", line 339, in version
    profile=False)
  File "/Users/np/miniconda3/lib/python3.6/site-packages/theano/compile/function.py", line 326, in function
    output_keys=output_keys)
  File "/Users/np/miniconda3/lib/python3.6/site-packages/theano/compile/pfunc.py", line 486, in pfunc
    output_keys=output_keys)
  File "/Users/np/miniconda3/lib/python3.6/site-packages/theano/compile/function_module.py", line 1795, in orig_function
    defaults)
  File "/Users/np/miniconda3/lib/python3.6/site-packages/theano/compile/function_module.py", line 1661, in create
    input_storage=input_storage_lists, storage_map=storage_map)
  File "/Users/np/miniconda3/lib/python3.6/site-packages/theano/gof/link.py", line 699, in make_thunk
    storage_map=storage_map)[:3]
  File "/Users/np/miniconda3/lib/python3.6/site-packages/theano/gof/vm.py", line 1047, in make_all
    impl=impl))
  File "/Users/np/miniconda3/lib/python3.6/site-packages/theano/gof/op.py", line 935, in make_thunk
    no_recycling)
  File "/Users/np/miniconda3/lib/python3.6/site-packages/theano/gof/op.py", line 839, in make_c_thunk
    output_storage=node_output_storage)
  File "/Users/np/miniconda3/lib/python3.6/site-packages/theano/gof/cc.py", line 1190, in make_thunk
    keep_lock=keep_lock)
  File "/Users/np/miniconda3/lib/python3.6/site-packages/theano/gof/cc.py", line 1131, in __compile__
    keep_lock=keep_lock)
  File "/Users/np/miniconda3/lib/python3.6/site-packages/theano/gof/cc.py", line 1586, in cthunk_factory
    key=key, lnk=self, keep_lock=keep_lock)
  File "/Users/np/miniconda3/lib/python3.6/site-packages/theano/gof/cmodule.py", line 1159, in module_from_key
    module = lnk.compile_cmodule(location)
  File "/Users/np/miniconda3/lib/python3.6/site-packages/theano/gof/cc.py", line 1489, in compile_cmodule
    preargs=preargs)
  File "/Users/np/miniconda3/lib/python3.6/site-packages/theano/gof/cmodule.py", line 2325, in compile_str
    return dlimport(lib_filename)
  File "/Users/np/miniconda3/lib/python3.6/site-packages/theano/gof/cmodule.py", line 302, in dlimport
    rval = __import__(module_name, {}, {}, [module_name])
ImportError: dlopen(/Users/np/.theano/compiledir_Darwin-16.5.0-x86_64-i386-64bit-i386-3.6.1-64/tmp3r02thlc/m3d1cf20adb1014f04986e6a344a55bde.so, 2): Library not loaded: @rpath/libcudnn.6.dylib
  Referenced from: /Users/np/.theano/compiledir_Darwin-16.5.0-x86_64-i386-64bit-i386-3.6.1-64/tmp3r02thlc/m3d1cf20adb1014f04986e6a344a55bde.so
  Reason: image not found

我知道这是动态链接的问题,但我不明白为什么它不起作用。

我尝试了以下方法:

  • 已禁用 SIP
  • 现在大概重新安装了 CUDA 和 cudnn 10 次左右
    • cudnn 文件位于 /Developer/NVIDIA/CUDA-8.0/lib/usr/local/cuda/lib
  • 现在也重新安装了 python、conda、theano、pygpu 大约 10 次
  • 从头开始编译 libgpuarray
  • 重新启动几次以确保不是这样
  • 执行update_dyld_shared_cache以查看是否是缓存问题
  • 尝试将 libcudnn.6.dylib 与 install_name_tool 链接到 pygpu .so,但没有执行任何操作

这是我的 .zshrc 路径:

export CUDA_HOME=/usr/local/cuda
export DYLD_LIBRARY_PATH=/usr/local/cuda/lib:/usr/local/cuda/extras/CUPTI/lib
export LD_LIBRARY_PATH=$DYLD_LIBRARY_PATH
export PATH=$CUDA_HOME/bi:$DYLD_LIBRARY_PATH:$PATH

.theanorc

[global]
floatX = float32
device = cuda
force_device = True
allow_gc = False
optimizer_including=cudnn

[cuda]
root = /usr/local/cuda

[dnn]
enabled = True
include_path=/usr/local/cuda/include
library_path=/usr/local/cuda/lib

版本号:

  • macOS 10.12.4
  • CUDA 8.0 和 cudnn 6.0
  • Python 3.6.1
  • Theano 0.9.0
  • libgpuarray 0.6.4
  • pygpu 0.6.4

最佳答案

我终于能够通过将 libcudnn* 文件移动到 /usr/lib 来解决这个问题。我完全不知道为什么 pygpu 无法与/usr/local/cuda/lib 一起使用。如果没有 sudo,我仍然会收到 RuntimeError:创建 cudnn 句柄时出错 错误,但现在它至少可以与 sudo 一起使用。

虽然现在我正在与Segmentation failure: 11作斗争,但我猜这是一个不同的问题。 Theano 绝对是...

关于python - Theano 无法导入 pygpu/cudnn(macOS、CUDA 8),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43951039/

相关文章:

python - 通过 ssh 可以替代 "python3 sample_program.py &"的方法是什么?

Python3 在打印十六进制值时添加了额外的字节

python - 如何更改 Keras 后端(json 文件在哪里)?

python - 当 channel 数增加时,ResNet 快捷连接的零填充

python - 从 GPU 核心/线程的角度理解 Theano 示例

python - Theano 简单线性回归在 CPU 而不是 GPU 上运行

python - 如何根据Python中列的行列表中存在的值来过滤数据框?

python - 使用 numpy 加载和存储稀疏数据的性能

python - Keras 编写一个接受图像的循环层

python - theano.test() : optimization failure due to constant_folding (on ubuntu)