balbasty / nitorch

Neuroimaging in PyTorch
Other
86 stars 14 forks source link

issues with nitorch._C.spatial #50

Closed marksgraham closed 3 years ago

marksgraham commented 3 years ago

Hi,

I'm trying to get nitorch running so that I can use Mikael's UniRes tool. I've tried both install nitorch in a conda env as per your instructions, and using a docker container as per the instructions on the UniRes repo. Either way I get issues relating to nitorch._C.spatial when I try to import nitorch in python. In the conda env I get:

>>> import nitorch as ni
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/mark/tools/nitorch/nitorch/__init__.py", line 8, in <module>
    from . import core
  File "/home/mark/tools/nitorch/nitorch/core/__init__.py", line 5, in <module>
    from . import kernels      # convolution kernels
  File "/home/mark/tools/nitorch/nitorch/core/kernels.py", line 12, in <module>
    from . import utils
  File "/home/mark/tools/nitorch/nitorch/core/utils.py", line 10, in <module>
    from nitorch._C.grid import GridCount, GridPull
  File "/home/mark/tools/nitorch/nitorch/_C/grid.py", line 4, in <module>
    from nitorch._C.spatial import (
ModuleNotFoundError: No module named 'nitorch._C.spatial'

and when I try to run the UniRes docker container I get:

docker run -it --rm -v $PWD/data:/home/docker/app/data unires:1.0
Traceback (most recent call last):
  File "/home/docker/app/env/bin/unires", line 5, in <module>
    from unires._cli import run
  File "/home/docker/app/env/lib/python3.6/site-packages/unires/_cli.py", line 4, in <module>
    from unires.run import preproc
  File "/home/docker/app/env/lib/python3.6/site-packages/unires/run.py", line 6, in <module>
    from nitorch.spatial import (affine_grid, grid_pull, voxel_size)
  File "/home/docker/app/env/lib/python3.6/site-packages/nitorch/__init__.py", line 8, in <module>
    from . import core
  File "/home/docker/app/env/lib/python3.6/site-packages/nitorch/core/__init__.py", line 5, in <module>
    from . import kernels      # convolution kernels
  File "/home/docker/app/env/lib/python3.6/site-packages/nitorch/core/kernels.py", line 12, in <module>
    from . import utils
  File "/home/docker/app/env/lib/python3.6/site-packages/nitorch/core/utils.py", line 10, in <module>
    from nitorch._C.grid import GridCount, GridPull
  File "/home/docker/app/env/lib/python3.6/site-packages/nitorch/_C/grid.py", line 4, in <module>
    from nitorch._C.spatial import (
ImportError: /home/docker/app/env/lib/python3.6/site-packages/nitorch/_C/../lib/./libnitorch_cpu.so: undefined symbol: _ZN2at5zerosEN3c108ArrayRefIlEENS0_13TensorOptionsE

Any ideas on how I might solve this would be appreciated! Thanks, Mark

brudfors commented 3 years ago

Hi @marksgraham

I just replied to your email actually, but I will reply here too :) I suspect it has to do with CUDA version, as the nitorch package compiles its own CUDA code. Basically, you need to ensure that your computer's CUDA version matches your PyTorch's CUDA version. I use CUDA 10.2 and PyTorch 1.7.1 (on Ubuntu 18.04):

https://pytorch.org/get-started/previous-versions/

marksgraham commented 3 years ago

Sorry for the spam! I did some more investigation this morning and decided it was probably a nitorch issue, which is why I posted here. Thanks for this - I'll give it a try