pytorch-“ conv1d”在哪里实现?

时间:2018-12-26 04:16:46

标签: pytorch

我想看看conv1d模块是如何实现的 https://pytorch.org/docs/stable/_modules/torch/nn/modules/conv.html#Conv1d。因此,我查看了functional.py,但仍然找不到循环和互相关计算。

然后我用关键字“ conv1d”搜索了Github,检查了conv.cpp https://github.com/pytorch/pytorch/blob/eb5d28ecefb9d78d4fff5fac099e70e5eb3fbe2e/torch/csrc/api/src/nn/modules/conv.cpp 1,但仍然无法找到计算的位置。

我的问题有两个方面。

  1. 在哪里实现“ conv1d”的源代码?

  2. 通常,如果我想检查模块的实现方式,哪里是最好的地方?任何指向该文档的指针将不胜感激。谢谢。

2 个答案:

答案 0 :(得分:7)

  1. 这取决于后端(GPU,CPU,分布式等),但是在GPU最有趣的情况下,它是从cuDNN中提取的,它以二进制格式发布,因此您无法检查其源代码。对于CPU MKLDNN,情况与此类似。我不知道PyTorch会“手动”使用它自己的卷积内核的任何地方,但是我可能是错的。 EDIT :的确,我在下面的回答中指出是错误的。
  2. 不了解PyTorch的结构是很困难的。实际上,很多代码都是根据各种标记文件自动生成的,如here所述。要弄清楚这一点,就需要跳很多步。例如,您要链接的uses conv.cpp torch::conv1d文件,该文件定义为here,并且使用at::convolution,而at::_convolution则使用at::cudnn_convolution,分派给多个变体,例如here。我相信at::cudnn_convolution是通过标记文件创建的,case 2 of Master theorem只是直接插入cuDNN的实现中(尽管在发生这种情况时我无法查明代码的确切点)。

答案 1 :(得分:2)

以下是我从pytorch discussion board获得的答案:

我相信这里定义了“手卷”编辑的卷积:https://github.com/pytorch/pytorch/blob/master/aten/src/THNN/generic/SpatialConvolutionMM.c 3

NN模块的实现在这里:https://github.com/pytorch/pytorch/tree/master/aten/src GPU版本在THCUNN中,CPU版本在THNNNN