gpt4 book ai didi

ipython-notebook - 将局部变量传递给 ipyparallel 集群的最佳方法

转载 作者:行者123 更新时间:2023-12-04 23:18:48 26 4
gpt4 key购买 nike

我在一个 ipython notebook 中运行一个模拟,它由七个相互依赖的函数组成,需要 13 个不同的参数。一些函数在其他函数中被调用,以允许一个函数运行整个模拟。模拟涉及操作两个参数,总共 > 20k 次迭代。两个模拟可以异步运行。由于每次迭代大约需要 1.5 秒,我正在研究并行处理。

当我第一次尝试 ipyparallel 时,我得到了一个未定义的全局名称错误。找不到本地对象是有道理的。为了避免花费大量时间进入兔子洞,将一大堆对象传递给所有 worker 的最简单方法是什么?以这种方式使用 ipyparallel 时还有其他需要考虑的问题吗?

最佳答案

this related question 中有更多细节,但要点是:交互式定义的模块在交互式命名空间( __main__ )中解析,这在引擎和客户端上是不同的。您可以使用 view.push(dict(func=func, func2=func2)) 将函数发送到引擎,在这种情况下它们会被发现。另一种方法是在您确保安装在所有引擎上的模块或包中定义您的函数。

例如,在脚本中:

def bar(x):
return x * x

def foo(y):
return bar(y)

view.apply(foo, 5) # NameError on bar
view.push(dict(bar=bar)) # send bar
view.apply(foo, 5) # 25

通常,当从笔记本或更大的脚本并行使用 IPython 时,早期步骤之一是为引擎的命名空间播种:
rc[:].push(dict(
f1=f1,
f2=f2,
const=const,
))

如果您有多个名称要以这种方式推送,则可能是时候考虑在模块中定义这些函数,并改为分发它们。

关于ipython-notebook - 将局部变量传递给 ipyparallel 集群的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33047952/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com