PBS多节点Julia并行处理

PBS多节点Julia并行处理,julia,cluster-computing,pbs,Julia,Cluster Computing,Pbs,我正在寻找一种方法来跨PBS集群中的多个节点运行简单的并行进程(一个函数使用不同的参数运行多次,进程之间没有通信) 目前,我可以在单个节点上运行它,通过PBS脚本中的环境变量设置线程数,并使用for循环@thread.threads 我已经找到了对clustermanager.jl的引用,但是没有关于如何在PBS上使用它的清晰的工作示例。 例如:文件中的addprocs\u pbs是否也负责脚本部分,或者我是否仍需要像往常一样运行pbs脚本,并且此函数在julia文件中调用 这是我现在使用的代码

我正在寻找一种方法来跨PBS集群中的多个节点运行简单的并行进程(一个函数使用不同的参数运行多次,进程之间没有通信)

目前,我可以在单个节点上运行它,通过PBS脚本中的环境变量设置线程数,并使用for循环@thread.threads

我已经找到了对clustermanager.jl的引用,但是没有关于如何在PBS上使用它的清晰的工作示例。 例如:文件中的
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内容。