使用粘着很多Jupyter笔记本

概述

当工作在一个Jupyter笔记本会话可以使用会话的输出有利于启动工作,或进行并行处理任务。本教程演示了两种方法的推出粘工作在很多Jupyter笔记本。

SLURM-MAGIC

python包slurm-magic允许完整的工作脚本内部构造Jupyter笔记本和提交给集群资源管理器。建议安装slurm-magic相同conda环境在你安装Jupyter笔记本,因为它将使用这个环境和任何安装包执行脚本工作。

安装slurm-magic:

conda激活myenv模块加载git-gccpip安装git + https://github.com/NERSC/slurm-magic.git

“myenv”的名字是conda环境你打算运行Jupyter笔记本。开始工作后开始一个交互式粘会话很多(例如使用“srun”),开始Jupyter笔记本,创建一个新的笔记本和单个单元中输入以下:

% load_ext slurm_magic进口警告warnings.filterwarnings(“忽略”)

进入上面的代码后,点击“转移”和“回归”在一起。现在,您可以创建下一个细胞内的工作脚本。例如,这里有一个情况我们提交一个脚本将运行在GPU节点:

% % sbatch# SBATCH——作业名= myGPUTeset= 1 # SBATCH——节点# SBATCH——ntasks-per-node = 1# SBATCH——cpus-per-task = 1# SBATCH——格蕾丝= gpu: 1# SBATCH——邮件类型=# SBATCH(电子邮件保护)python /home/u/user/gpuTask.py - i /划痕/用户/用户/ myInput。dat - o /划痕/用户/用户/ gpuTask.out

再次点击“转移”和“回归”提交工作。(确保代替实际的脚本或命令行开始“python”。

注意:试着把第一和第二代码块,因为这可能会产生一个错误。确保“% load_ext slurm_magic”语句被执行之前创建你的工作脚本。

本质上,您可以使用任何常见的粘指令以这种方式很多,没有特殊的关键字或限制。然而请注意,无论您执行的代码将受到包安装在相同的conda环境用于启动Jupyter笔记本。因此,加载其他Python模块(例如)可能会导致意想不到的错误或其他问题。

一旦提交作业脚本,您可以检查状态使用“squeue - u用户名”命令在另一个终端。

这里还有一个例子,演示如何提交一个多节点使用slurm-magic MPI的工作。假设我们有一个脚本名为“mpiTest。py”包含以下:

进口ipyparallel ippdef mpi_example ():从mpi4py进口MPI通讯= MPI.COMM_WORLD从排名返回f“Hello World {comm.Get_rank ()}。总排名= {comm.Get_size ()}。主机= {MPI.Get_processor_name ()}”与24 #请求一个MPI集群引擎ipp。集群(controller_ip = " * ",引擎= mpi, n = 24) rc:#得到broadcast_view在集群上的是最好的#适合MPI计算方式视图= rc.broadcast_view ()# mpi_example函数在所有引擎并行运行r = view.apply_sync (mpi_example)#从引擎中检索和打印结果print (" \ n " . join (r))#在这一点上,集群的过程已经被关闭

如果你安装了必要的先决条件conda环境用于发射Jupyter笔记本(例如,ipyparallel mpi4py, mpich,等等)可以提交这个用slurm-magic以下:

% % sbatch# SBATCH——作业名= myMPITest= 3 # SBATCH——节点# SBATCH——ntasks-per-node = 8# SBATCH——ntasks = 24# SBATCH——邮件类型=# SBATCH(电子邮件保护)python /home/u/user/mpiTest.py

记得先加载slurm-magic扩展试图运行上面的代码。这个工作分配3节点,在8核上为每个(24)和运行在这些节点(参见我们的MPI脚本使用MPI Jupyter的更多信息)。

SUBMITIT

python / conda包”submitit“还可以用于提交工作粘资源管理器里面很多Jupyter笔记本。与“slurm-magic”不同,“submitit”独特的符号用于构建和提交工作。文档“submitit”并不广泛,和一些常见的粘指令可能不是很多。Submitit也是设计更多的是一个“内联”代码的一部分,而不是一个独立的工作脚本。

安装submitit:

conda激活myenvconda安装submitit

接下来,启动交互式粘会话,开始很多Jupyter笔记本。然后创建一个新的笔记本,并输入您的代码在一个单元中。

在下面的例子中,我们创建一个名为“添加”,然后提交它的函数与参数使用submitit集群:

进口submitit导入系统进口操作系统def质数(nprimes):操作系统。系统(Python模块加载)n = nprimesp的范围(n + 1):因为我在范围(2,p):如果p % i = = 0:打破其他:打印(p),打印(“做”)log_folder = " log_test / % j”遗嘱执行人= submitit.AutoExecutor(文件夹= log_folder)遗嘱执行人。update_parameters (slurm_job_name =“PrimesTest tasks_per_node = 1,节点= 1,gpus_per_node = 1, timeout_min = 300, slurm_partition =“defq”)工作=执行人。提交(质数,1000000)打印(job.job_id) # ID的你的工作输出= job.result ()

在本例中,我们创建一个函数“素数”计算素数直到到达“n”的价值。我们需要创建一个“log_folder submitit——这是所有工作的相关文件将存储,包括输出,错误,和工作提交脚本。接下来,创建一个名为“执行者”的submitit反对。这是用于指定的工作参数如上所示。最后,我们创建一个名为“工作”——这实际上提交的提交对象函数“素数”集群作为一份工作,用一个函数的输入值的“1000000”。将显示“打印”语句jobid和“输出”对象用于捕获任何错误或警告信息应该工作失败。

一旦代码是所有进入细胞,达到“狗屎”和“回归”执行。除非你的函数是用来生成输出指定位置,它将被发现在一个*。文件在你的“log_test”目录下对应的jobid刚才提交的工作。

更多的信息


CategoryHPC