【求助】使用 Jupyter 学习 MachineLearning 时遇见异常

在使用 jupyter 做深度学习作业时的时候出现了如下错误

File “C:\Users\Administrator\anaconda3\Lib\multiprocessing\spawn.py”, line 122, in spawn_main
exitcode = _main(fd, parent_sentinel)
^^^^^^^^^^^^^^^^^^^^^^^^^^
File “C:\Users\Administrator\anaconda3\Lib\multiprocessing\spawn.py”, line 132, in _main
self = reduction.pickle.load(from_parent)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AttributeError: Can’t get attribute ‘MyDataset’ on <module ‘main’ (built-in)>

经查询疑似是在 windows 系统上使用多进程时报错 AttributeError,但代码内并未使用 multiprocessing,不知是否是 numworker 导致的错误

代码参考 李宏毅深度学习 2021 春 HW4 实验四,Strong Baseline,使用 Conformer_李宏毅老师深度学习语音预测 hw 如何 change transformer to conformer-CSDN 博客 的源码

PS:直接运行助教给的 simple baseline 的代码也出现同样报错

看错误的文件路径:

File“C:\Users\Administrator\anaconda3\Lib\multiprocessing\spawn.py”, line 122, in spawn_main

显然是间接调用了 multiprocessing 的。我比较怀疑是 Windows 下 Python 创建子进程时地址空间的问题。

multiprocessing 模块官方文档应该有提到,Windows 下创建进程的方式是 spawn 而不是 fork,子进程不继承父进程地址空间,也许 get attribute 正是因此失败的。如果真是这个原因的话,由于 Windows 平台 Python 不支持 fork 创建子进程,我的建议是换到 POSIX 平台上运行。

经实践,用 pycharm 直接运行代码可行,但是仍未找到如何在 jupyter 上运行的方法

futurewarning 让人看着很难受

说明 codebase 太老了,应该降级依赖

maybe related to: AttributeError: Can't get attribute 'NewsSummaryDataset' on <module '__main__' (built-in)> · Lightning-AI/pytorch-lightning · Discussion #15350 · GitHub