常见问题#
下面列出了用户在使用 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::ones
或 at::randn
或 at::
命名空间中的任何其他张量工厂函数创建了一个张量,并遇到了错误。
解决方法:对于工厂函数调用,将 at::
替换为 torch::
。永远不要使用 at::
命名空间中的工厂函数,因为它们会创建张量(tensors)。相应的 torch::
函数会创建变量(variables),你的代码中应该只处理变量。