簡體   English   中英

在 PyTorch 中查找函數/類定義

[英]Finding function/class definitions in PyTorch

我想找出在 PyTorch(和其他庫)中定義某些類和函數的位置。

不幸的是,以下方法不起作用:

import inspect
import torch

inspect.getsource(torch.tensor)

它引發以下錯誤:

TypeError: module, class, method, function, traceback, frame, or code object was expected, got builtin_function_or_method

更重要的是,在 PyCharm 中,我通常會執行“gd”(在 vim 模式下)來查找函數/類定義,但這對於 Z95B88F180E9EB5678E0F9EBAC2CBE643 也不起作用。

請幫助我理解這里的問題是什么,更重要的是,我一般如何找到這些定義。

這實際上很復雜。 Pytorch/libtorch 是一個龐大的項目,它依賴於許多已在 C/Cuda 中實現的內置低級函數。 大多數低級內核(例如數學運算)甚至有幾個實現,以便針對 CPU 和 GPU 等進行不同的優化。所以這個庫中有很多不是 python 代碼,並且inspect將有一個困難時期。

如果您想查找源文件,您可能需要自己深入 github 存儲庫,並充分利用grep等工具並find . 然而, torch.nn模塊幾乎完全是 python,所以我認為inspect將在其功能上正常工作(如數據集、數據加載器、模塊、優化器等)

最后,如果您需要,這里是torch.tensor的文件,您會在其中找到 python 代碼與對 C api 的調用混合在一起: torch 源代碼

關於下面評論中的問題:

我無法提供完整的答案,因為這超出了我對在 Torch 中接口的 python 和 C++ 代碼到底如何的理解。 但我會盡力而為(如果有人對此有任何更正或改進,請這樣做)。

C 源代碼和 python 代碼之間存在根本區別:C/C++ 已編譯,因此在這些語言中實現的功能作為已編譯的匯編代碼提供。 換句話說,當您的 python 代碼從底層 C 代碼調用函數/對象時,它會調用不再是人類可讀的匯編函數。 因此計算機可以進行調用,但是查找源代碼(供您閱讀)的inspect功能無法工作,因為該代碼不再存在(至少不在inspect所在的位置)。 您將需要其他專門用於分析匯編指令的工具,例如反匯編器、調試器等(如果您足夠勇敢,還可以學習 x86-64 匯編語言編程:D)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM