我想看看 conv1d 模块是如何实现的https://pytorch.org/docs/stable/_modules/torch/nn/modules/conv.html#Conv1d https://pytorch.org/docs/stable/_modules/torch/nn/modules/conv.html#Conv1d。所以我查看了function.py,但仍然找不到循环和互相关计算。
然后我通过关键字‘conv1d’搜索了Github,检查了conv.cpphttps://github.com/pytorch/pytorch/blob/eb5d28ecefb9d78d4fff5fac099e70e5eb3fbe2e/torch/csrc/api/src/nn/modules/conv.cpp https://github.com/pytorch/pytorch/blob/eb5d28ecefb9d78d4fff5fac099e70e5eb3fbe2e/torch/csrc/api/src/nn/modules/conv.cpp1 但仍然无法找到计算发生的位置。
我的问题有两个方面。
“conv1d”实现的源代码在哪里?
一般来说,如果我想检查模块是如何实现的,哪里是最好的地方?任何指向文档的指针将不胜感激。谢谢。
- 它取决于后端(GPU、CPU、分布式等),但在最有趣的 GPU 情况下,它是从cuDNN https://developer.nvidia.com/cudnn它以二进制格式发布,因此您无法检查其源代码。 CPU 也有类似的情况MKLDNN https://github.com/intel/mkl-dnn。我不知道 PyTorch 会“handroll”它自己的卷积核的任何地方,但我可能是错的。EDIT:确实,正如下面的答案所指出的那样,我错了。
- 如果不知道 PyTorch 的结构,这会很困难。正如所解释的,许多代码实际上是根据各种标记文件自动生成的here https://github.com/pytorch/pytorch/blob/1b93cb7631bf084ffb68c86992e98931634b59b7/aten/src/ATen/native/README.md。弄清楚这一点需要大量跳跃。例如,
conv.cpp
您正在链接的文件uses https://github.com/pytorch/pytorch/blob/eb5d28ecefb9d78d4fff5fac099e70e5eb3fbe2e/torch/csrc/api/src/nn/modules/conv.cpp#L83 torch::conv1d
,其定义为here https://github.com/pytorch/pytorch/blob/517c7c98610402e2746586c78987c64c28e024aa/aten/src/ATen/native/Convolution.cpp#L225和用途at::convolution https://github.com/pytorch/pytorch/blob/517c7c98610402e2746586c78987c64c28e024aa/aten/src/ATen/native/Convolution.cpp#L228进而使用at::_convolution https://github.com/pytorch/pytorch/blob/517c7c98610402e2746586c78987c64c28e024aa/aten/src/ATen/native/Convolution.cpp#L272,例如,它会分派到多个变体at::cudnn_convolution https://github.com/pytorch/pytorch/blob/517c7c98610402e2746586c78987c64c28e024aa/aten/src/ATen/native/Convolution.cpp#L352. at::cudnn_convolution
我相信,是被创造的here https://github.com/pytorch/pytorch/blob/b7bc49ad703faf3ea92aaef804351126e63158da/aten/src/ATen/native/native_functions.yaml#L494通过标记文件并直接插入cuDNN
实现(尽管我无法确定发生这种情况时代码中的确切位置)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)