在ipyparallel

时间:2017-08-28 21:33:01

标签: python conda jupyterhub

我正在尝试使用ipyparallel和我在conda环境中安装的自定义内核。我的工具是用matplotlib 2.0.2构建的。我在Jupyter Hub上运行,默认的Python3内核指向matplotlib 1.5.3。我可以通过这个例子看到各个引擎的matplotlib版本:

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']

正如我所料,因为我在Python 3默认内核中运行。我已经构建了一个名为" cetb3"的定制内核。通过使用我想要的工具创建自定义内核,激活它,并使用以下命令创建kernelspec文件:

ipython kernel install --user --name cetb3

在cetb3环境中,我可以运行python,导入matplotlib,我看到版本是matplotlib 2.0.2。从这个相同的cetb3 env,我还创建了一个测试配置文件:

ipython profile create --parallel --profile=MJBtest

在Jupyter Hub中,我可以将内核切换到cetb3,导入matplotlib并查看它是在v2.0.2。但是,当我从MJBtest启动一个集群,并尝试使用cetb3内核运行与上面相同的代码时,单元格会在"现在调用map_sync"之后挂起。行并且永不返回:

Local:  2.0.2
Now calling map_sync

我认为我可能必须创建一个使用我的自定义内核的ipython配置文件,并且我尝试将我的配置文件的名称添加到cetb3 kernelspec文件中:" - profile = MJBtest"但是当我这样做时,内核甚至无法启动。我不清楚是否必须告诉我的内核有关我的个人资料,反之亦然(以及我如何做到这一点),或者是否还有一些其他机制将我的自定义环境推送到我的ipyparallel引擎。

所以我在我们的超级计算机上使用了sys admin,结果发现他们已经配置了一些使用ipengine命令启动引擎集群的自定义ipython配置文件。在ipcluster_config.py文件中,在ipengine命令之前,我能够通过将我的conda env bin路径添加到PATH env变量的开头来指定我的自定义环境,然后为我想要的conda env调用source activate可在每台发动机上使用。

0 个答案:

没有答案