我想在GPU中运行MXNet module。
我有一个系统,安装了Cuda 10.0的Ubuntu 18.04。显然MXNet二进制文件还没有涵盖这一点,所以我专注于我的电脑中的installing 2 cuda versions(另请参阅here)。
无论如何,我现在在我的电脑中有2个cuda工具包在不同的文件夹中。我需要一种方法来指导我的系统在从PyCharm运行时使用Cuda 9.2。有趣的是,从一个典型的控制台我可以运行它很好(至少MXNet加载部分,当然)。
在我想运行的模块中,程序卡在:
import mxnet as mx
这导致MXNet中的base.py
:
def _load_lib():
"""Load library by searching possible path."""
lib_path = libinfo.find_lib_path()
lib = ctypes.CDLL(lib_path[0], ctypes.RTLD_LOCAL) # <- This is where is throws the error.
# DMatrix functions
lib.MXGetLastError.restype = ctypes.c_char_p
return lib
奇怪的是,lib_path[0]
只是指向libmxnet.so
的位置(顺便说一句,这是正确的),突然它抛出一个错误:
OSError:libcudart.so.9.2:无法打开共享对象文件:没有这样的文件或目录
即使我按照错误跟踪,最后一个命令是这样的:
self._handle = _dlopen(self._name, mode)
与self._name
是libmxnet.so
相同的位置。
我试图通过更改系统变量使其工作
os.environ["LD_LIBRARY_PATH"] = "/usr/local/cuda-9.2/lib64"
作为模块的第二行(第1行当然是import os
!)但这似乎不起作用。显然它被考虑在内。
那么,我该如何绕过这个呢?在MXNet端或pyCharm端可以接受任何解决方案。
好吧,为了让任何面临同样问题的人可以使用它,我将发布我的解决方案。
我设法通过在运行配置菜单中定义pycharm中的环境变量(它可以从Run-> Run ...或Alt + Shift + F10中获得)并在那里将其定义为环境变量。
LD_LIBRARY_PATH:/usr/local/cuda-9.2/lib64
我不确定为什么在这种情况下pycharm工作正常,而在代码中定义相同的变量时它不会(任何解释欢迎)。