pytorch - "conv1d"在哪里实施?

Aer*_*rin 5 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但仍然无法' t找到计算发生的位置.

我的问题是双重的.

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

  2. 一般来说,如果我想检查模块的实现方式,最好找的地方在哪里?任何指向文档的指针将不胜感激.谢谢.

Jat*_*aki 7

  1. 这取决于后端(GPU,CPU,分布式等),但在最有趣的GPU情况下,它是从cuDNN中提取的,它以二进制格式发布,因此您无法检查其源代码.对于CPU MKLDNN来说,这是一个类似的故事.我不知道PyTorch会在哪个地方"处理"它自己的卷积内核,但我可能错了.编辑:的确,我在下面的答案中指出错了.
  2. 如果不了解PyTorch的结构,很难.大量的代码实际上是被自动生成基于各种标记文件,如解释在这里.弄清楚这需要大量的跳跃.例如,conv.cpp您链接的文件使用 torch::conv1d,此处定义并使用at::convolution其依次使用at::_convolution,例如,调度到多个变体at::cudnn_convolution.at::cudnn_convolution我相信,它是通过标记文件在这里创建的,只是直接插入cuDNN实现(虽然我无法在发生这种情况时查明代码中的确切点).