评价此页

常见问题#

下面列出了一些用户在使用 C++ API 的各个部分时遇到的常见问题。

C++ 扩展#

来自 PyTorch/ATen 的未定义符号错误#

问题:导入扩展时收到一个 ImportError,声称 PyTorch 或 ATen 的某个 C++ 符号未定义。例如

>>> 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

解决方法:解决方法是在导入扩展之前 import torch。这将使你的扩展所依赖的 PyTorch 动态(共享)库中的符号可用,从而在你导入扩展时能够解析它们。

我使用 at:: 中的函数创建了一个张量,但出现了错误#

问题:你使用例如 at::onesat::randnat:: 命名空间中的任何其他张量工厂函数创建了一个张量,并遇到了错误。

解决方法:将工厂函数调用中的 at:: 替换为 torch::。你应该永远不要使用 at:: 命名空间中的工厂函数,因为它们会创建张量。相应的 torch:: 函数会创建变量,而你应该只在代码中处理变量。