PyTorch - “conv1d”实现在哪里?

6

我想了解conv1d模块是如何实现的,参考链接:https://pytorch.org/docs/stable/_modules/torch/nn/modules/conv.html#Conv1d。我查看了functional.py文件,但仍然找不到循环和交叉相关计算的位置。

然后,我通过关键词“conv1d”在Github上进行了搜索,检查了conv.cpphttps://github.com/pytorch/pytorch/blob/eb5d28ecefb9d78d4fff5fac099e70e5eb3fbe2e/torch/csrc/api/src/nn/modules/conv.cpp的代码,但仍然找不到计算发生的位置。

我的问题有两个:

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

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

2个回答

8
  1. 这取决于后端(GPU、CPU、分布式等),但在最有趣的GPU情况下,它是从cuDNN中提取的,该软件以二进制格式发布,因此无法检查其源代码。对于CPU,MKLDNN也是类似的情况。我不知道PyTorch是否会“自己编写”卷积核,但我可能是错的。 编辑:确实如下面的答案所指出的那样,我错了。
  2. 没有了解PyTorch结构的情况下,这很困难。实际上,基于各种标记文件,有许多代码是自动生成的,如此处所述here。弄清楚这一点需要跳来跳去。例如,你链接的conv.cpp文件使用torch::conv1d,它在这里被定义,并使用at::convolution,后者又使用at::_convolution,它分派给多个变体,例如at::cudnn_convolution。我认为at::cudnn_convolution是通过标记文件here创建的,并直接插入到cuDNN实现中(尽管我无法确定代码的确切位置)。

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接