gpt4 book ai didi

parallel-processing - ipython 笔记本 : how to parallelize external script

转载 作者:行者123 更新时间:2023-12-05 00:25:26 28 4
gpt4 key购买 nike

我正在尝试使用 ipython 并行库中的并行计算。但是我对此知之甚少,而且我发现很难从对并行计算一无所知的人那里阅读该文档。

有趣的是,我发现的所有教程都只是重复使用文档中的示例,并使用相同的解释,从我的角度来看,这是无用的。

基本上我想做的是在后台运行几个脚本,以便它们同时执行。在 bash 中它会是这样的:

for my_file in $(cat list_file); do
python pgm.py my_file &
done

但是 Ipython notebook 的 bash 解释器不处理后台模式。

似乎解决方案是使用 ipython 的并行库。

我试过 :
from IPython.parallel import Client
rc = Client()
rc.block = True
dview = rc[:2] # I take only 2 engines

但后来我被困住了。我不知道如何同时运行两次(或更多)相同的脚本或 pgm。

谢谢。

最佳答案

一年后,我终于得到了我想要的东西。

1) 使用您想要在不同 cpu 上执行的操作创建一个函数。这里它只是使用 ! 从 bash 调用脚本。魔术 ipython 命令。我想它可以与 call() 一起使用功能。

def my_func(my_file):
!python pgm.py {my_file}

不要忘记 {}使用 !

还要注意 my_file 的路径应该是绝对的,因为集群是您启动笔记本的位置(在执行 jupyter notebookipython notebook 时),不一定是您所在的位置。

2) 使用您想要的 CPU 数量启动您的 ipython notebook 集群。
等待 2s 并执行以下单元格:
from IPython import parallel
rc = parallel.Client()
view = rc.load_balanced_view()

3) 获取要处理的文件列表:
files = list_of_files

4) 将您的函数与所有文件异步映射到 view您刚刚创建的引擎。 (不确定措辞)。
r = view.map_async(my_func, files)

当它运行时,您可以在笔记本上做其他事情(它在“ 背景 中运行!)。您也可以调用 r.wait_interactive()它以交互方式枚举已处理的文件数、到目前为止花费的时间以及剩余的文件数。这将阻止您运行其他单元格(但您可以中断它)。

如果你的文件比引擎多,不用担心,一旦引擎完成 1 个文件,它们就会被处理。

希望这对其他人有帮助!

本教程可能会有所帮助:

http://nbviewer.ipython.org/github/minrk/IPython-parallel-tutorial/blob/master/Index.ipynb

另请注意,我还有 IPython 2.3.1 ,不知道自从 Jupyter之后有没有变化.

编辑:仍然适用于 Jupyter,请参阅 here for difference and potential issues you may encounter

请注意,如果您在函数中使用外部库,则需要在不同的引擎上导入它们:
%px import numpy as np

或者
%%px
import numpy as np
import pandas as pd

与变量和其他函数相同,您需要将它们推送到引擎 namespace :
rc[:].push(dict(
foo=foo,
bar=bar))

关于parallel-processing - ipython 笔记本 : how to parallelize external script,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24312284/

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