Juypter中带有cython的Dask:ModuleNotFoundError:没有名为'的模块_仙人掌魔术
我得到: 被杀害的工人:(“(‘来自熊猫-1445321946b8a22fc0ada720fb002544',4)”,”tcp://127.0.0.1:45940") 我已经阅读了关于后一个错误消息的文章,但这与stacktrace顶部的错误消息一起出现时令人困惑: distributed.utils-错误-工作进程已存在tcp://127.0.0.1:35780 实际错误通过管道传输到运行my notebook的Juypter中带有cython的Dask:ModuleNotFoundError:没有名为'的模块_仙人掌魔术,cython,dask,Cython,Dask,我得到: 被杀害的工人:(“(‘来自熊猫-1445321946b8a22fc0ada720fb002544',4)”,”tcp://127.0.0.1:45940") 我已经阅读了关于后一个错误消息的文章,但这与stacktrace顶部的错误消息一起出现时令人困惑: distributed.utils-错误-工作进程已存在tcp://127.0.0.1:35780 实际错误通过管道传输到运行my notebook的Jupyter notebook命令的终端: ModuleNotFoundErro
Jupyter notebook
命令的终端:
ModuleNotFoundError:没有名为“\u cython\u magic\u faba6120a194ab58ae9efd1da474433f”的模块
既然我在我的案例中发现了详细的错误,那么我将自己研究如何解决这个问题。关于这种特殊配置的精确提示会很好,但我想将所有cython代码提取到笔记本之外的python代码更明智,与其让dask了解cython magic命令,不如说具体的cython错误看起来确实是源于将编译配置为对工作人员可见的问题。执行
%%cython
时,将创建并构建一个临时扩展,并将其导入本地(客户端)会话,而不安装到python环境中。我不确定这到底是怎么发生的
您至少应该确保在编译cython单元后创建客户端,然后它们可能会继承所需的环境,但是很有可能cell magic的monkey补丁太复杂了,在任何情况下都无法工作。特定的cython错误看起来确实是源于将编译配置为对工作人员可见的问题。执行
%%cython
时,将创建并构建一个临时扩展,并将其导入本地(客户端)会话,而不安装到python环境中。我不确定这到底是怎么发生的
您至少应该确保在编译cython cell后创建客户端,然后它们可能会继承所需的环境,但cell magic的猴子补丁很有可能在任何情况下都太复杂而无法工作。下面是一个完整的玩具示例(使用SLURM集群在JupyterLab上测试)。 本例使用Cython编译了一个简单的函数,该函数对两个整数求和,但当然可以对复杂(更有用)的代码应用相同的技术。
这里的关键技巧是必须设置工作人员来查找和导入Cython库。
这需要导入
pyximport
,调用pyximport.install()
,然后在每个辅助进程上导入Cython生成的模块。这是使用注册\u worker\u callback()
完成的。
请注意,Cython生成的模块放在
中,这里是一个完整的玩具示例(使用SLURM集群在JupyterLab上测试)。
本例使用Cython编译了一个简单的函数,该函数对两个整数求和,但当然可以对复杂(更有用)的代码应用相同的技术。
这里的关键技巧是必须设置工作人员来查找和导入Cython库。
这需要导入pyximport
,调用pyximport.install()
,然后在每个辅助进程上导入Cython生成的模块。这是使用注册\u worker\u callback()
完成的。
请注意,Cython生成的模块位于中,非常感谢。因此,一般来说,如果我们不使用Jupyter cell magic,并且我们所有的cython代码都是在python库代码中定义的(并且可能只在Jupyter笔记本中从那里运行),那么在daskapply
中使用cython函数安全吗?cython函数应该像任何其他python函数一样序列化或可导入,所以成功地进入了员工的记忆空间。非常感谢。因此,一般来说,如果我们不使用Jupyter cell magic,并且我们所有的cython代码都是在python库代码中定义的(并且可能只在Jupyter笔记本中从那里运行),那么在daskapply
中使用cython函数安全吗?cython函数应该像任何其他python函数一样序列化或可导入,所以成功地进入了员工的记忆空间。非常感谢。显然,我当时放弃了这个,但我认为这个答案现在应该是一个宝贵的资源。我想知道slurm是如何融入其中的,我只是最近才意识到这一点,如果你能在那里多加几句关于集成的话,或者只是在一个简短的评论中,那就太好了。例如,要在跨越多台机器的slurm集群上运行此任务,是否需要比上述更多的资源,也就是说作为分布式而不是本地并发作业?非常感谢。显然,我当时放弃了这个,但我认为这个答案现在应该是一个宝贵的资源。我想知道slurm是如何融入其中的,我只是最近才意识到这一点,如果你能在那里多加几句关于集成的话,或者只是在一个简短的评论中,那就太好了。例如,要在跨越多台机器的slurm集群上运行此任务,是否需要比上述更多的资源,也就是说作为分布式而不是本地并发作业?