如果我理解正确的话,Pytorch的API在补丁版本之间是稳定的,所以它的下游包应该仍然可以与交错的补丁版本一起工作。例如,torchaudio 2.0.2和torch 2.0.1应该是兼容的。但是这三个包都需要完全匹配的pytorch版本,例如torch==2.0.2。Pytorch这么做有什么原因吗?
torch==2.0.2
xqkwcwgp1#
因为他们在C级别集成了PyTorch。每个库都有用C编写的扩展模块,这些扩展模块与libtorch链接。例如,TorchVision使用libjpegturbo和libpng实现图像I/O,将常见的图像格式转换为PyTorchTensor。TorchAudio有音频/视频处理器,TorchText有JavaScript和其他用C编写的NLP相关实用程序。问题是libtorch没有稳定的ABI(而不是API),PyTorch没有C接口的稳定ABI策略。如果你试图导入这些不匹配的PyTorch库,你会得到一些像undefined symbol: _znk3c104type14issubtypeofextest10shared_ptris0_epso这样的神秘错误消息。这基本上意味着“在构建时找到的PyTorch的这个C++函数在运行时PyTorch中找不到。我无法继续。”
undefined symbol: _znk3c104type14issubtypeofextest10shared_ptris0_epso
1条答案
按热度按时间xqkwcwgp1#
因为他们在C级别集成了PyTorch。每个库都有用C编写的扩展模块,这些扩展模块与libtorch链接。例如,TorchVision使用libjpegturbo和libpng实现图像I/O,将常见的图像格式转换为PyTorchTensor。
TorchAudio有音频/视频处理器,TorchText有JavaScript和其他用C编写的NLP相关实用程序。
问题是libtorch没有稳定的ABI(而不是API),PyTorch没有C接口的稳定ABI策略。
如果你试图导入这些不匹配的PyTorch库,你会得到一些像
undefined symbol: _znk3c104type14issubtypeofextest10shared_ptris0_epso
这样的神秘错误消息。这基本上意味着“在构建时找到的PyTorch的这个C++函数在运行时PyTorch中找不到。我无法继续。”