Python 在ipyparallel中运行时,自定义内核挂起
我正在尝试将ipyparallel与我已安装在conda env中的自定义内核一起使用。我的工具是用matplotlib 2.0.2构建的。我在一个Jupyter集线器上运行,默认的Python3内核指向matplotlib 1.5.3。我可以通过以下示例从各个引擎中看到matplotlib的版本:Python 在ipyparallel中运行时,自定义内核挂起,python,conda,jupyterhub,Python,Conda,Jupyterhub,我正在尝试将ipyparallel与我已安装在conda env中的自定义内核一起使用。我的工具是用matplotlib 2.0.2构建的。我在一个Jupyter集线器上运行,默认的Python3内核指向matplotlib 1.5.3。我可以通过以下示例从各个引擎中看到matplotlib的版本: import ipyparallel import matplotlib def myFunc(n): import matplotlib status = "mpl versio
import ipyparallel
import matplotlib
def myFunc(n):
import matplotlib
status = "mpl version=%s, and num=%d" % (matplotlib.__version__,
n * 10)
return status
rc=ipyparallel.Client(profile='MJBtest')
all_proc = rc[:]
all_proc.block=True
print("Local: ", matplotlib.__version__)
inlist = [i for i in range(3)]
print("Now calling map_sync")
result = all_proc.map_sync(myFunc, inlist)
print("Parallel result : ", result)
返回
Local: 1.5.3
Now calling map_sync
Parallel result : ['mpl version=1.5.3, and num=0', 'mpl version=1.5.3, and num=10', 'mpl version=1.5.3, and num=20']
正如我所期望的,因为我是在Python3默认内核中运行的。通过使用我想要的工具创建一个自定义内核,激活它,并使用以下命令创建一个kernelspec文件,我构建了一个名为“cetb3”的自定义内核:
ipython kernel install --user --name cetb3
在cetb3环境中,我可以运行python,导入matplotlib,我看到版本是matplotlib 2.0.2。从同一个cetb3环境中,我还创建了一个测试配置文件:
ipython profile create --parallel --profile=MJBtest
在Jupyter Hub中,我可以将内核切换到cetb3,导入matplotlib,并查看它是否位于v2.0.2。但是,当我从MJBtest启动集群,并尝试使用cetb3内核运行与上述相同的代码时,该单元挂起在“Now calling map_sync”行之后,并且永远不会返回:
Local: 2.0.2
Now calling map_sync
我想我可能必须创建一个使用自定义内核的ipython配置文件,我尝试将我的配置文件的名称添加到cetb3 kernelspec文件中:“--profile=MJBtest”,但当我这样做时,内核甚至无法启动。我不清楚我是否必须告诉我的内核我的配置文件,或者反过来告诉我的内核我的配置文件(以及我可能如何做),或者是否有其他机制将我的定制环境推到我的ipyparallel引擎
因此,我在我们的超级计算机上与sys管理员合作,结果发现他们配置了一些定制的ipython配置文件,这些配置文件使用ipengine命令启动引擎集群。在ipcluster_config.py文件中,在执行ipengine命令之前,我可以通过将我的conda env bin路径添加到path env变量的开头,然后为我希望在每个引擎上可用的conda env调用source activate来指定我的自定义环境。而不是创建自己的内核,为什么不将
ipykernel
安装到环境中,以消除您的所有依赖关系?我不确定您的意思,您能详细解释一下吗?我想我必须制作自己的内核,因为jupyterhub提供给我的默认内核只是一些Python2和Python3的默认安装。ipykernel
是一个将IPython内核安装到您的环境中的包,这样您就可以从Jupyter笔记本访问它。只是一个想法:-)这不是“ipython内核安装”命令所做的吗?运行该命令并重新加载jupyter控制台后,我可以很好地切换到新内核,并且可以很好地看到安装在这个环境中的包。当我试着将它们推到ipyparallel的多个引擎时,问题就出现了。这是挂起的步骤。对不起,我不确定这里发生了什么:-(