Listed below are a number of common issues users face with the various parts of the C++ API.
Undefined symbol errors from PyTorch/ATen¶
Problem: You import your extension and get an
ImportError stating that
some C++ symbol from PyTorch or ATen is undefined. For example:
>>> import extension Traceback (most recent call last): File "<stdin>", line 1, in <module> ImportError: /home/user/.pyenv/versions/3.7.1/lib/python3.7/site-packages/extension.cpython-37m-x86_64-linux-gnu.so: undefined symbol: _ZN2at19UndefinedTensorImpl10_singletonE
Fix: The fix is to
import torch before you import your extension. This will make
the symbols from the PyTorch dynamic (shared) library that your extension
depends on available, allowing them to be resolved once you import your extension.
I created a tensor using a function from
at:: and get errors¶
Problem: You created a tensor using e.g.
any other tensor factory from the
at:: namespace and are getting errors.
torch:: for factory function calls. You
should never use factory functions from the
at:: namespace, as they will
create tensors. The corresponding
torch:: functions will create variables,
and you should only ever deal with variables in your code.