未定义符号:THPVariableClaload_textures.cpython-37m-x86_64-linux-gnu.so:未定义符号:THPVariableClass

问题描述

您知道我该如何解决吗?我正在尝试使用https://github.com/benjiebob/SMALViewer/issues/3回购,但是在Neuro_renderer端口上出现错误

$ python smal_viewer.py 
Traceback (most recent call last):
  File "smal_viewer.py",line 2,in <module>
    import pyqt_viewer
  File "/home/mona/research/3danimals/SMALViewer/pyqt_viewer.py",line 13,in <module>
    from smal.smal3d_renderer import SMAL3DRenderer
  File "/home/mona/research/3danimals/SMALViewer/smal/smal3d_renderer.py",line 6,in <module>
    import neural_renderer as nr
  File "/home/mona/anaconda3/lib/python3.7/site-packages/neural_renderer/__init__.py",line 3,in <module>
    from .load_obj import load_obj
  File "/home/mona/anaconda3/lib/python3.7/site-packages/neural_renderer/load_obj.py",line 8,in <module>
    import neural_renderer.cuda.load_textures as load_textures_cuda
ImportError: /home/mona/anaconda3/lib/python3.7/site-packages/neural_renderer/cuda/load_textures.cpython-37m-x86_64-linux-gnu.so: undefined symbol: THPVariableClass

以下是一些详细信息:

$ python
Python 3.7.6 (default,Jan  8 2020,19:59:22) 
[GCC 7.3.0] :: Anaconda,Inc. on linux
Type "help","copyright","credits" or "license" for more information.
>>> import torch
>>> torch.__version__
'1.6.0'
>>> torch.version.cuda
'10.1'
>>> torch.cuda.is_available()
True


$ gcc --version
gcc (Ubuntu 9.3.0-10ubuntu2) 9.3.0
copyright (C) 2019 Free Software Foundation,Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or fitness FOR A PARTIculaR PURPOSE.


$ lsb_release -a
LSB Version:    core-11.1.0ubuntu2-noarch:security-11.1.0ubuntu2-noarch
distributor ID: Ubuntu
Description:    Ubuntu 20.04.1 LTS
Release:    20.04
Codename:   focal

这是神经渲染器git repo:https://github.com/daniilidis-group/neural_renderer

我使用pip install neural_renderer_pytorch

安装了神经渲染器

解决方法

您似乎不是自己动手制作neural_renderer_pytorch,而是使用滚轮。但是,此滚轮是使用较旧的pytorch版本构建的,不适用于您计算机上当前的pytorch版本。

使用当前的pytorch版本从源代码(在卸载neural_renderer之后,从源代码构建neural_renderer

$ pip uninstall neural-renderer-pytorch

$ pip install https://github.com/daniilidis-group/neural_renderer/zipball/master

它应该可以工作。


在pytorch 1.5之前,它一直使用某种在Linux上构建扩展的脆弱方法:尽管依赖于torch,但扩展并未明确链接到libtorch.so。仅由于import torchlibtorch.so加载了RTLD_GLOBAL,从而使其全局可见/可访问,因此提供了丢失的符号-这就是为什么在加载这些扩展名之前的原因(例如{{1} },就像here一样,必须导入neural_renderer_pytorch

在第一次导入torch之前,可以强制执行旧的行为设置RTLD_GLOBAL

torch

但是,使用import sys; import ctypes; sys.setdlopenflags(sys.getdlopenflags() | ctypes.RTLD_GLOBAL) import torch # now all symbols of torch # have global visibility and can be used in # other extensions 非常危险,因为它可能会插入不相关的符号并导致细微的错误甚至崩溃。

因此,由于1.5 pytorch不再使用RTLD_GLOBAL,而是明确指向RTLD_GLOBAL的链接(请参阅此commit),并且使用较早的pytorch版本构建的扩展名将无效。

,

我能够通过首先找到所有AT_CHECK并将其转换为AT_ASSERT来解决此问题。检出at_assert_fix分支并不能解决我的问题。我正在使用PyTorch 1.6和CUDA 10.1

https://github.com/daniilidis-group/neural_renderer/search?q=AT_CHECK

(base) mona@mona:~/neural_renderer/neural_renderer/cuda$ vi create_texture_image_cuda.cpp 
(base) mona@mona:~/neural_renderer/neural_renderer/cuda$ vi load_textures_cuda.cpp 
(base) mona@mona:~/neural_renderer/neural_renderer/cuda$ vi rasterize_cuda.cpp 

(base) mona@mona:~/neural_renderer$ pip install .
Processing /home/mona/neural_renderer
Building wheels for collected packages: neural-renderer-pytorch
  Building wheel for neural-renderer-pytorch (setup.py) ... done
  Created wheel for neural-renderer-pytorch: filename=neural_renderer_pytorch-1.1.3-cp37-cp37m-linux_x86_64.whl size=6215781 sha256=fbd9e8ef7340fa71b9fcd69da8ee06a1079ebbe5b4c2c3ce92e8124bc8cea7c5
  Stored in directory: /tmp/pip-ephem-wheel-cache-tddilaof/wheels/c6/9b/9b/d2cda4f9ac2127278c21ea5c5e23c3354fe0e63365b7af7842
Successfully built neural-renderer-pytorch
Installing collected packages: neural-renderer-pytorch
Successfully installed neural-renderer-pytorch-1.1.3
(base) mona@mona:~/neural_renderer$ python examples/example1.py 
Drawing: 100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 90/90 [00:04<00:00,19.37it/s]

https://github.com/daniilidis-group/neural_renderer/issues/94