2016-11-03 107 views
0

目標:SLURM:如何在同一個計算節點或不同節點上並行運行不同的可執行文件?

  1. 學習如何運行或共同計劃或執行操作/使用或者SRUN或的mpirun

研究與sbatch作業提交

  • 應用:

    代碼段:

    #!/bin/bash 
    #SBATCH --job-name LEBT 
    #SBATCH --partition=angel 
    #SBATCH --nodelist=node38 
    #SBATCH --sockets-per-node=1 
    #SBATCH --cores-per-socket=1 
    #SBATCH --time 00:10:00 
    #SBATCH --output LEBT.out 
    
    # the slurm module provides the srun command 
    module load openmpi 
    
    
    srun -n 1 ./LU.exe -i 100 -s 100 & 
    srun -n 1 ./BT.exe & 
    
    wait 
    

    Man Pag es:

    [srun]-->[https://computing.llnl.gov/tutorials/linux_clusters/man/srun.txt] 
    
    [mpirun]-->[https://www.open-mpi.org/doc/v1.8/man1/mpirun.1.php] 
    
  • +0

    如果您至少需要兩個任務,請求'--ntasks = 2' – damienfrancois

    +0

    @damienfrancois我能夠存儲兩個應用程序的輸出,並在下面提供答案I。它們似乎是並行執行的,這使我認爲線程正在正常工作,因爲它們正在同時執行。顯然,如果我執行應用程序A(20s)和應用程序B(50s),如果他們並行運行,那麼工作應該在B(50s)左右的地方完成。我對麼?現在,以這種方式執行應用程序可以嗎?還是我在做一些與衆不同的事情? – abeltre1

    +0

    如果是這種情況,則意味着您的Slurm安裝不會將作業限制在分配的CPU上。在設置了cpusets或cgroups的羣集上,你的腳本需要70s(除非他們只是睡覺) – damienfrancois

    回答

    1

    經過廣泛研究後,我得出結論:「srun」是您想用於並行運行作業的命令。而且,你需要一個輔助腳本來充分執行整個過程。我寫了下面的腳本來在一個節點中執行應用程序,沒有任何問題。

    #!/usr/bin/python 
    #SBATCH --job-name TPython 
    #SBATCH --output=ALL.out 
    #SBATCH --partition=magneto 
    #SBATCH --nodelist=node1 
    
    
    import threading 
    import os 
    
    addlock = threading.Lock() 
    
    class jobs_queue(threading.Thread): 
        def __init__(self,job): 
          threading.Thread.__init__(self,args=(addlock,)) 
          self.job = job 
        def run(self): 
          self.job_executor(self.job) 
    
        def job_executor(self,cmd): 
          os.system(cmd) 
    
    if __name__ == __main__: 
    
        joblist = ["srun ./executable2", 
           "srun ./executable1 -i 20 -s 20"] 
    
        #creating a thread of jobs 
        threads = [jobs_queue(job) for job in joblist] 
    
        #starting jobs in the thread 
        [t.start() for t in threads] 
    
        #no interruptions 
        [t.join() for t in threads] 
    

    在我的特殊情況下,特定標誌激活的兩個可執行文件每個都會產生大約55秒的時間。但是,當它們並行運行時,它們都會產生59秒的執行時間。

    2

    您的腳本將以小調整爲模。如果你,如果你的程序運行在同一節點上與否無所謂,加#SBATCH --ntasks=2

    #!/bin/bash 
    #SBATCH --job-name LEBT 
    #SBATCH --ntasks=2 
    #SBATCH --partition=angel 
    #SBATCH --nodelist=node38 
    #SBATCH --sockets-per-node=1 
    #SBATCH --cores-per-socket=1 
    #SBATCH --time 00:10:00 
    #SBATCH --output LEBT.out 
    
    # the slurm module provides the srun command 
    module load openmpi 
    
    srun -n 1 --exclusive ./LU.exe -i 100 -s 100 & 
    srun -n 1 --exclusive ./BT.exe & 
    
    wait 
    

    --exclusive參數srun有沒有告訴srun與整個分配的一個子集看到srun manpage運行。

    如果要同時處理到山姆節點上運行,使用--cpus-per-task=2

    #!/bin/bash 
    #SBATCH --job-name LEBT 
    #SBATCH --cpus-per-task=2 
    #SBATCH --partition=angel 
    #SBATCH --nodelist=node38 
    #SBATCH --sockets-per-node=1 
    #SBATCH --cores-per-socket=1 
    #SBATCH --time 00:10:00 
    #SBATCH --output LEBT.out 
    
    # the slurm module provides the srun command 
    module load openmpi 
    
    srun -c 1 --exclusive ./LU.exe -i 100 -s 100 & 
    srun -c 1 --exclusive ./BT.exe & 
    
    wait 
    

    注意,那麼,你必須用-c 1而不是-n 1運行srun

    +0

    第二個選項是我想要做的,但我得到以下錯誤。srun:錯誤: - 必須使用--exclusive設置--ntasks srun:錯誤: - 必須使用--exclusive設置--ntasks – abeltre1

    +0

    您是否只是在運行腳本?你應該使用sbatch – damienfrancois

    +0

    提交它是的,我使用sbatch來提交作業。當我嘗試它沒有sbatch它失敗。相反,由於srun不允許並行執行,您可以使用「mpirun」將它設置爲並行運行嗎? – abeltre1

    相關問題