PBS多节点Julia并行处理
我正在寻找一种方法来跨PBS集群中的多个节点运行简单的并行进程(一个函数使用不同的参数运行多次,进程之间没有通信) 目前,我可以在单个节点上运行它,通过PBS脚本中的环境变量设置线程数,并使用for循环@thread.threads 我已经找到了对clustermanager.jl的引用,但是没有关于如何在PBS上使用它的清晰的工作示例。 例如:文件中的PBS多节点Julia并行处理,julia,cluster-computing,pbs,Julia,Cluster Computing,Pbs,我正在寻找一种方法来跨PBS集群中的多个节点运行简单的并行进程(一个函数使用不同的参数运行多次,进程之间没有通信) 目前,我可以在单个节点上运行它,通过PBS脚本中的环境变量设置线程数,并使用for循环@thread.threads 我已经找到了对clustermanager.jl的引用,但是没有关于如何在PBS上使用它的清晰的工作示例。 例如:文件中的addprocs\u pbs是否也负责脚本部分,或者我是否仍需要像往常一样运行pbs脚本,并且此函数在julia文件中调用 这是我现在使用的代码
addprocs\u pbs
是否也负责脚本部分,或者我是否仍需要像往常一样运行pbs脚本,并且此函数在julia文件中调用
这是我现在使用的代码结构。理想情况下,它将或多或少保持不变,但并行进程可以跨多个节点运行
using JLD
include("path/to/library/with/function.jl")
seed = 342;
n = 18; # number of simulations
changing_parameter = [1,2,3,4];
input_file = "some file"
CSV.read(string(input_files_folder,input_file));
# I should also parallelise this external for loop
# it currently runs 18 simulations per run, and saves the results each time
for P in changing_parameter
Random.seed!(seed);
seeds = rand(1:100000,n)
results = []
Threads.@threads for i = 1:n
push!(results,function(some_fixed_parameters, P=P, seed=seeds[i]);)
end
# get the results
# save the results
JLD.save(filename,to_save,compress=true)
end
对于分布式计算,通常需要使用多处理而不是多线程(尽管如果需要,也可以使用多线程并行进程) 因此,您需要做的是使用
ClustersManagers
库来使用集群管理器为集群分配进程
我一直在使用Julia和Cray集群,使用SLURM,所以不完全是PBS,但是,因为您的问题仍然没有答案,所以我在这里使用我的工作代码。您将使用看起来结构非常相似的addprocs\u pbs
using ClusterManagers
addprocs_slurm(36,job_name="jobname", account="some_acc_name", time="01:00:00", exename="/lustre/tetyda/home/pszufe/julia/usr/bin/julia")
添加工作进程后,剩下的就是使用
分布式
包来协调您的工作负载。谢谢!我的理解是,addprocs\u slurm
pbs/slurm脚本的工作是否正确?这是否意味着我可以简单地从终端启动julia脚本,或者我仍然需要准备一个pbs脚本,保留正确数量的节点和进程ecc?在addprocs\u slurm
的情况下,它完成了slurm的全部工作,因此我不需要做任何其他事情。我希望PBS也能做到这一点。请注意,在某些计算机中,工作节点与访问节点具有不同的硬件-因此在我的例子中,最繁琐的事情是使用工作节点及其古老的库配置来编译Julia。我必须通过exename
param提供julia,但不需要编写SLURM内容。