Search code examples
pythonpycharmmxnet

How to make pycharm use a different cuda toolkit


I want to run an MXNet module in GPU.

I have a system which has Ubuntu 18.04 along Cuda 10.0 installed. Apparently this is not covered yet by MXNet binary files so I was focusing on installing 2 cuda versions in my pc (see also here).

Anyway I now have 2 cuda toolkits in my pc in different folders. I need a way to direct my system to use Cuda 9.2 when run from PyCharm. The funny thing is that from a typical console I can run it just fine (at least the MXNet loading part that is of course).

In the module I want to run the program is stuck in:

import mxnet as mx

which leads to base.py in MXNet:

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

the strange thing is that lib_path[0] just points to the location of libmxnet.so (which is correct by the way) and suddenly it throws an error:

OSError: libcudart.so.9.2: cannot open shared object file: No such file or directory

Even if I follow the error trace the last command is this:

self._handle = _dlopen(self._name, mode)

with self._name being the same location of libmxnet.so.

I have tried to make it work by changing the system variable with

os.environ["LD_LIBRARY_PATH"] = "/usr/local/cuda-9.2/lib64"

as the second line of the module (the 1st is of course import os!) but this does not seem to work. Apparently it's taken into consideration.

So, how can I bypass this? Any solution would be acceptable being on the MXNet side or pyCharm side.


Solution

  • Well, to make this available to anyone facing the same problem I will post my solution.

    I managed to make it work by defining the environmental variable inside pycharm from the run configuration menu (the one that it's available from Run->Run... or Alt+Shift+F10) and defining it there as environmental variable.

    LD_LIBRARY_PATH: /usr/local/cuda-9.2/lib64

    I am not sure why for that case pycharm is working fine while when the same variable is defined inside the code it does not though (any explanation welcome).