复现论文代码时Jupyter运行报错NameError: name '__current_graph' is not defined
首先明确:你看到的_base.py报错根本不是这个文件本身出了问题,它只是Python多任务框架把并行子任务里的异常往上抛的中间层,完全不用动这个系统文件,真正的问题是子任务里报了__current_graph未定义的错。
这个变量是PyTorch Geometric(PyG)这类图学习框架维护的线程级全局变量,出现这个报错基本就是下面几个原因,按顺序排查就行:
- 先确认你Jupyter用的内核真是side虚拟环境:很多人装了虚拟环境但没给Jupyter注册内核,实际跑的时候用的还是base环境的依赖,才会出版本不匹配的问题。激活side环境后执行
ipython kernel install --user --name=side,重启Jupyter后切换到side内核再跑代码试试。 - 再看是不是DataLoader开了多进程的问题:找到你代码里的DataLoader定义,把
num_workers改成0,单进程跑一遍,要是能跑通就说明是多进程下PyG的上下文没传递到子进程。要是必须用多进程加速,就在你自定义数据集的__getitem__方法里加个上下文管理器包一下原有逻辑就行:from torch_geometric import graph_settings def __getitem__(self, idx): with graph_settings(current_graph=None): # 你原来的读取、处理数据的代码 - 最后核对依赖版本:激活side环境后执行
pip show torch_geometric,看版本和论文要求的是不是一致,老版本PyG本身就有这个全局变量传递的bug,换对版本直接就解决了。
内容的提问来源于stack exchange,提问作者world2vec
相关产品推荐
相关产品推荐

