„PRACE User Support” változatai közötti eltérés

Innen: KIFÜ Wiki
(chaned sge to slurm, translation in progress ;))
214. sor: 214. sor:
 
* -stripe Use this parameter to initiate a “striped” GridFTP transfer that uses more than one node at the source and destination. As multiple nodes contribute to the transfer, each using its own network interface, a larger amount of the network bandwidth can be consumed than with a single system. Thus, at least for “big” (> 100 MB) files, striping can considerably improve performance.
 
* -stripe Use this parameter to initiate a “striped” GridFTP transfer that uses more than one node at the source and destination. As multiple nodes contribute to the transfer, each using its own network interface, a larger amount of the network bandwidth can be consumed than with a single system. Thus, at least for “big” (> 100 MB) files, striping can considerably improve performance.
  
==Usage of the Sun Grid Engine scheduler ==
+
==Usage of the SLURM scheduler ==
  
 +
The schedule of the HPCs are CPU hour based. This means that the available core hours are divided between users on a monthly basis. All UNIX users are connected to one or more account. This scheduler account is connected to an HPC project and a UNIX group. HPC jobs can only be sent by using one of the accounts. The core hours are calculated by the multiplication of wall time (time spent running the job) and the CPU cores requested.
 +
For example reserving 2 nodes (48 cpu cores) at the NIIFI SC for 30 minutes gives 48 * 30 = 1440 core minutes = 24 core hours. Core hours are measured between the start and and the end of the jobs.
  
Basically the SGE is a scheduler, which divides the resources, computers into resource partitions. These are called queues. A queue can’t be larger than a physical resource; it can’t expand its borders. SGE registers a waiting list for the resources managed by itself, to which the posted computing tasks are directed. The scheduler searches for the resource defined by the description of the task and starts it. The task-resource coupling depends on the ability of the resources and the parameters of the tasks. In case the resources are overloaded, the tasks have to wait while the requested processor and memory becomes available.
+
'''It is very important to be sure the application maximally uses the allocated resources. An emty or non-optimal job will consume allocated core time very fast. If the account run out of the allocated time, no new jobs can be submitted until the beginning of the next accounting period. Account limits are regenerated the beginning of each month.'''
 
 
 
 
The detailed documentation of the SGE can be found [http://docs.oracle.com/cd/E24901_01/doc.62/e21976.pdf here].
 
 
 
 
 
SGE version on all HPC sites: [http://gridscheduler.sourceforge.net/documentation.html Open Grid Scheduler (OGS/GE 2011.11p1)]
 
 
 
 
 
=== The most simple commands ===
 
 
 
The most simple SGE command is the display of the cluster data:     
 
 
 
<code>
 
    qhost
 
</code>
 
 
 
A possible outcome of this command can be:   
 
{| class="wikitable" border="1"
 
|-  
 
|HOSTNAME
 
|ARCH
 
|NCPU
 
|LOAD
 
|MEMTOT
 
|MEMUSE
 
|SWAPTO
 
|SWAPUS
 
|-
 
|global                 
 
|<nowiki>-</nowiki>       
 
 
 
|<nowiki>-</nowiki> 
 
|<nowiki>-</nowiki> 
 
|<nowiki>-</nowiki> 
 
 
 
|<nowiki>-</nowiki>
 
 
 
|<nowiki>-</nowiki> 
 
|<nowiki>-</nowiki>
 
|-
 
|cn01                     
 
|linux-x64 
 
|24 
 
|5.00
 
|62.9G 
 
|8.6G   
 
|0.0   
 
|0.0
 
|-
 
|cn02                     
 
|linux-x64 
 
|24 
 
|0.01
 
|62.9G 
 
|1.2G   
 
|0.0   
 
|0.0
 
|-
 
|cn03                     
 
|linux-x64 
 
|24 
 
|0.03
 
|62.9G 
 
|1.5G   
 
|0.0   
 
|0.0
 
|}
 
 
 
The first two columns define the names and types of the computers, which are in the cluster. The NCPU column shows the number of the available processor cores. LOAD shows the computer’s load for the moment (this value equals with the value demonstrated by the uptime UNIX command). The rest of the cells are: overall physical memory, the actual used memory, the available swap-memory, and the used swap. The global line marks all the information in total regarding the cluster.
 
 
 
We can have a look at the available queue-s with the following command:     
 
 
 
<code>
 
    qconf -sql
 
</code>
 
 
 
One probable outcome of the command:   
 
 
 
<code>
 
    parallel.q
 
    serial.q     
 
    test.q
 
</code>
 
 
 
To get more info about the state of the system use 
 
 
 
<code> 
 
    qstat -f
 
</code>
 
 
 
It shows which jobs run in which queues, and you can also get detailed info about the queues themselves (state, environment). The command can be used without the -f switch too, but it is less informative, since in this case only the jobs’ states will appear. The command’s outcome:                 
 
 
 
<code>
 
    queuename                      qtype resv/used/tot. load_avg arch      states     
 
    --------------------------------------------------------------------------------
 
    test.q@cn.32                      BIP  0/3/24          3.15          linux-x64             
 
    905 1.00000 PI_SEQ_TES stefan      r    06/04/2011 09:12:14    1             
 
</code>
 
 
 
The first column of this table shows the name of the row, the second column marks the type (B-batch, I-interactive, C-checkpointing, P-parallel environment, E-error state). The third part of the column shows how many jobs can be run at the same time in the row. All in all, these values fit to the number of overall processor cores in the system. The second item of the column shows the free compartments at the moment.
 
 
 
If a running (scheduled) job is to be found in the queue, it is directly next to the name of the row, like the recent "PI_SEQ_TES", which runs in the test.q row. The tasks waiting for the resources, because it is overwhelmed or the preliminary conditions are not prompt, appear behind the sum row, listed as pending jobs. For example:   
 
 
 
<code>
 
    queuename                      qtype resv/used/tot. load_avg arch      states     
 
    --------------------------------------------------------------------------------- 
 
    parallel.q@cn31                BIP  0/24/24          22.3          linux-x64         
 
    ---------------------------------------------------------------------------------
 
    test.q@cn32                    BIP  0/24/24          23.5          linux-x64   
 
    ############################################################################
 
    - PENDING JOBS - PENDING JOBS - PENDING JOBS - PENDING JOBS - PENDING JOBS     
 
    ############################################################################
 
        905 0.00000 PI_SEQ_TES stefan      qw    06/04/2011 09:12:04    1       
 
</code>
 
 
 
Each task is given an identifier, which is a number (a job ID, or j_id), this is followed by the job’s priority (0 in both cases), then the job’s name, and the user who posted the job, and the qw marks, that the job is waiting for the queue. Finally the date of the registration for the waiting queue is next
 
 
 
When a job finishes running, this is created: jobname.ojobnumber in our actual catalog, which contains the error messages and stapled outputs created by the program..
 
 
 
=== Job submission ===
 
Back then, the SGE scheduler was designed to be able to operate different types of architectures. That’s why you can’t post binary files directly, only scripts, like the   
 
 
 
<code>
 
    qsub script.sh
 
</code>
 
 
 
command. The script describes the task, the main parameters of it, and its running. For example in the following script, the described ''hostname.sh'' task:   
 
 
 
<code>
 
    #!/bin/sh     
 
    #$ -N HOSTNAME     
 
    /bin/hostname
 
</code>
 
 
 
can be posted with the following command:     
 
 
 
<code>
 
    qsub hostname.sh
 
</code>
 
 
 
The scripts can be used for separating the different binaries:     
 
 
 
<code>
 
    #!/bin/sh       
 
    case `uname` in         
 
    SunOS) ./pi_sun         
 
    FreeBSD) ./pi_bsd       
 
    esac
 
</code>
 
 
 
With the following command, we can define the queue where the scheduler puts the job:
 
  
 +
Information about an account can be listed with the following command:
 
<code>
 
<code>
     qsub -q serial.q range.sh
+
     sbalance
 
</code>
 
</code>
  
The command qsub can be issued with a number of different switches, which are gathered in the following table:
+
==== Example ====
 
+
After executing the command, the following table shows up for Bob. The user can access, and run jobs by using two differnt accounts (foobar,barfoo). He can see his name marked with * in the table. He shares both accounts with alice (Account column). The consumed core hours for the users are displayed in the second row (Usage), and the consumption for the jobs ran as the account is displayed in the 4th row. The last two row defines the allocated maximum time (Account limit), and the time available for the machine (Available).
{| class="wikitable" border="1"
 
|-
 
|Parameter
 
|Possible example
 
|Result
 
|-
 
| -N name
 
| -N Flow
 
|The job will appear under this name in the queue.
 
|-
 
| -cwd
 
| -cwd
 
|The output and the error files will appear in this actual catalog.
 
|-
 
| -S shell
 
| -S /bin/tcsh
 
|The shell in which the scripts run.
 
|-
 
| -j {y,n}
 
| -j y
 
|Joining the error and the output in one file.
 
|-
 
| -r {y,n}
 
| -r y
 
|After a restart, should the job restart too (from the beginning).
 
|-
 
| -M e-mail
 
| -M stefan@niif.hu
 
|Scheduler information will be sent to this address about the job.
 
|-
 
| -l
 
| -l h_cpu=0:15:0
 
|Chooses a queue for the job where 15 minutes of CPU time could be ensured. (hour:minute:second)
 
|-
 
| -l
 
| -l h_vmem=1G
 
|Chooses a computer for the job where 1 GB memory is available. In the case of parallel jobs its value is extended with the required number of slots. If this parameter is not given, the default setting will be the number of the maximum memory cores set up in the computers.
 
|-
 
| -l
 
| -l in
 
|Consuming resources, complex request. (This will be defined in the documentation written for the system administrators)
 
|-
 
| -binding
 
| -binding linear:4
 
|Chooses 4 CPU cores on the worker node-on and assignes in a fix way. Further information: [http://docs.oracle.com/cd/E24901_01/doc.62/e21976/chapter2.htm#autoId75 here].
 
|-
 
| -l
 
| -l exclusive=true
 
|Demand of exclusive task execution (another job will not be scheduled on the chosen computers).  
 
|-
 
| -P
 
| -P niifi
 
|Chooses  a HPC project. This command will list the available HPC projects: ''qconf -sprjl''
 
|-
 
| -R
 
| -R y
 
|Resource reservation. This will cause that bigger parallel jobs will get higher priority.
 
|}
 
  
qsub command arguments can be added to the ~/.sge_request file. If this file exists then it will be added to the qsub arument list.
+
<pre>
 +
Scheduler Account Balance
 +
---------- ----------- + ---------------- ----------- + ------------- -----------
 +
User            Usage |          Account      Usage | Account Limit  Available (CPU hrs)
 +
---------- ----------- + ---------------- ----------- + ------------- -----------
 +
alice                0 |          foobar          0 |            0          0
 +
bob *                0 |          foobar          0 |            0          0
  
Sometimes we want to delete a job before its running. For this you can use the     
+
bob *                7 |          barfoo          7 |        1,000        993
 +
alice                0 |          barfoo          7 |        1,000        993
 +
</pre>
  
 +
=== A gépidő becslése ===
 +
Nagyüzemi (production) futtatások előtt gépidőbecslést érdemes végezni. Ehhez a következő parancs használható:
 
<code>
 
<code>
     qdel job_id
+
     sestimate -N NODES -t WALLTIME
 
</code>
 
</code>
 +
ahol a <code>NODES</code> a lefoglalni kívánt node-ok száma, a <code>WALLTIME</code> pedig a futás maximális ideje.
  
command.    
+
'''Fontos, hogy a lefoglalni kívánt gépidőt a lehető legpontosabban adjuk meg, mivel az ütemező ez alapján is rangsorolja a futtatásra váró feladatokat. Általában igaz, hogy a rövidebb job hamarabb sorra kerül. Érdemes minden futás idejét utólag az <code>sacct</code> paranccsal is ellenőrizni.'''
  
<code>
+
==== Példa ====
    qdel 903
+
Alice 2 nap 10 órára és 2 node-ra szeretne foglalást kérni, megnézi van-e elég gépidő a számláján:
</code>
+
<pre>
 +
sestimate -N 2 -t 2-10:00:00
  
The example deletes the job number 903.    
+
Estimated CPU hours: 2784
 +
</pre>
 +
Sajnos ebben a hónapban erre már nem telik.
  
 +
=== Állapotinformációk ===
 +
Az ütemezőben lévő jobokról az <code>squeue</code>, a klaszter általános állapotáról az <code>sinfo</code> parancs ad tájékoztatást. Minden beküldött jobhoz egy egyedi azonosítószám (JOBID) rendelődik. Ennek ismeretében további információkat kérhetünk. Feladott vagy már futó job jellemzői:
 
<code>
 
<code>
     qdel -f 903
+
     scontrol show job JOBID
 
</code>
 
</code>
  
It can delete the running jobs immediately.
+
Minden job egy ún. számlázási adatbázisba (accounting) is bekerül. Ebből az adatbázisból visszakereshetők a lefuttatott feladatok jellemzői és erőforrás-felhasználás statisztikái. A részletes statisztikát a következő paranccsal tudjuk megnézni:
 
 
For pending and then continuing jobs, use qmod {-s,-us}.    
 
 
 
 
<code>
 
<code>
     qmod -s 903     
+
     sacct -l -j JOBID
    qmod -us 903
 
 
</code>
 
</code>
  
The previous one suspends the running of number 903 (SIGSTOP), while the latter one allows (SIGCONT).
+
A felhasznált memóriáról a következő parancs ad tájékoztatást:
 
 
If there is a need to change the features (resource requirements) of a job put into the waiting list, it can be done with the command: ''qalter''     
 
 
 
 
<code>
 
<code>
     qalter -l h_cpu=0:12:0 903
+
     smemory JOBID
 
</code>
 
</code>
  
The previous command alternates the hard-CPU requirements of the job number 903 (h_cpu) and changes it to 12 minutes. The switches of the qalter command are mainly overlap the ones of the qsub command.
+
A lemezhasználatról pedig a
 
 
In a special case, we have to execute the same task, but on different data. These tasks are the array jobs. With SGE we can upload several jobs to the waiting. For example in the pi task shown in previous chapter, it can be posted multiple times, with different parameters, with the following script:''array.sh''     
 
 
 
 
<code>
 
<code>
     #!/bin/sh     
+
     sdisk JOBID
    #$ -N PI_ARRAY_TEST     
 
    ./pi_gcc `expr $SGE_TASK_ID \* 100000`
 
 
</code>
 
</code>
  
The SGE_TASK_ID is an internal integer used by the SGE, which created values for each running job. The interval can be set up when posting the block:     
+
==== Példa ====
 +
Az ütemezőben 3 feladat van. Az első egy arrayjob, éppen erőforrásra vár (PENDING). A második egy MPI job, ami 4 node-on fut már 25 perce (TIME). A harmadik egy egy node-os OMP futtatás, éppen most indult el. A feladatik nevei (NAME) egyénileg adható meg. Rövid, informatív neveket érdemes adni.
 +
<pre>
 +
    squeue -l
  
<code>
+
Wed Oct 16 08:30:07 2013             
     qsub -t 1-7 array.sh
+
    JOBID PARTITION     NAME    USER    STATE      TIME TIMELIMIT  NODES NODELIST(REASON)
</code>
+
591_[1-96]    normal    array    alice  PENDING      0:00    30:00      1 (None)
 +
      589    normal      mpi      bob  RUNNING      25:55  2:00:00      4 cn[05-08]
 +
      590    normal      omp    alice  RUNNING      0:25  1:00:00      1 cn09
 +
</pre>
  
meaning that the array.sh program will run in seven issues, and the SGE_TASK_ID will have the value of 1, 2, ..., 7 in every running issue. The qstat -f shows how the block tasks are split:      
+
Ennek a 2 node-os batch jobnak a jellemző memóriaterhelés a következő volt: kb. 10GB virtuális és 6.5GB RSS memóriát használt el node-onként.
 +
<pre>
 +
     smemory 430
  
<code>
+
MaxVMSize  MaxVMSizeNode  AveVMSize     MaxRSS MaxRSSNode     AveRSS
     ---------------------------------------------------------------------------------
+
---------- -------------- ---------- ---------- ---------- ----------
     parallel.q@cn30                BIP  0/0/24          0        linux-x64       
+
10271792K          cn06  10271792K   6544524K       cn06  6544524K 
    ---------------------------------------------------------------------------------
+
10085152K          cn07  10085152K  6538492K       cn07  6534876K
    test.q@cn32                    BIP   0/7/24          7.15      linux-x64       
+
</pre>
    907 1.00000 PI_ARRAY_T stefan       r    06/04/2011 10:34:14    1 1         
 
    907 0.50000 PI_ARRAY_T stefan       t    06/04/2011 10:34:14    1 2         
 
    907 0.33333 PI_ARRAY_T stefan      t    06/04/2011 10:34:14    1 3         
 
    907 0.25000 PI_ARRAY_T stefan      t    06/04/2011 10:34:14    1 4         
 
    907 0.20000 PI_ARRAY_T stefan      t    06/04/2011 10:34:14    1 5         
 
    907 0.16667 PI_ARRAY_T stefan      t    06/04/2011 10:34:14    1 6         
 
    907 0.14286 PI_ARRAY_T stefan      t    06/04/2011 10:34:14    1 7   
 
</code>
 
 
 
It is clear, that behind the tasks there are their array index with which we can refer to the components to the task. For example, in the case of block tasks, there is a possibility to delete particular parts of the block. If we want to delete the subtasks from 5-7 of the previous task, the command     
 
  
 +
==== Feladatok ellenőrzése ====
 +
Nagyon fontos meggyőződni arról, hogy az alkalmazás kihasználja-e a rendelkezésre álló gépidőt. Egy futó alkalmazás a következő paranccsal tudunk monitorozni:
 
<code>
 
<code>
     qdel -f 907.5-7
+
     sjobcheck JOBID
 
</code>
 
</code>
  
will delete chosen components, but leaves the tasks 907.1-4 intact.
+
===== Példa =====
The result of the running is seven individual files, with seven different running solutions:
+
Ez a job 4 node-on fut. A LOAD csoport a gép általános terheléséről ad információt és kb. a core-ok számával egyezik meg. A helyes felhasználásról a CPU csoport ad tájékoztatást. Ideális esetben a <code>User</code> oszlop értékei 90 fölött vannak. Ez alatt valamilyen probléma lépett fel és a futást érdemes megszakítani. A példa job rendkívűl jól kihasználja a gépet (kimaxolja).
 
+
<pre>
It can happen; that the task placed in the queue won’t start. This case the:     
+
Hostname                    LOAD                      CPU              Gexec 
 +
CPUs (Procs/Total) [    1,    5, 15min] [  User,  Nice, System, Idle, Wio]
 +
cn08    24 (  25/  529) [ 24.83, 24.84, 20.98] [  99.8,  0.0,  0.2,  0.0,  0.0] OFF
 +
cn07    24 (  25/  529) [ 24.93, 24.88, 20.98] [  99.8,  0.0,  0.2,   0.0,  0.0] OFF
 +
cn06    24 (  25/  529) [ 25.00, 24.90, 20.97] [  99.9,  0.0,  0.1,  0.0,  0.0] OFF
 +
cn05    24 (  25/  544) [ 25.11, 24.96, 20.97] [  99.8,  0.0,  0.2,  0.0,  0.0] OFF
 +
</pre>
  
 +
==== Licenszek ellenőrzése ====
 +
Az elérhető és éppen használt licenszekről a következő parancs ad információt:
 
<code>
 
<code>
     qstat -j job_id
+
     slicenses
 
</code>
 
</code>
  
command will show the detailed scheduling information, containing which running parameters are unfulfilled by the task.
+
==== Karbantartás ellenőrzése ====
 
+
A karbantartási időablakban az ütemező nem indít új jobokat, de beküldeni lehet. A karbantartások időpontjairól a következő parancs ad tájékoztatást:
The priority of the different tasks only means the gradiation listed in the pending jobs. The scheduler will analyze the tasks in this order. Since it requires the reservation of resources, it is not sure, that the tasks will run exactly the same order.
 
 
 
If we wonder why a certain job won’t start, here’s how you can get information:    
 
 
 
 
<code>
 
<code>
     qalter -w v job_id
+
     sreservations
 
</code>
 
</code>
  
One possible outcome     
+
=== Feladatok futtatása ===
 +
Alkalmazások futtatása a szupergépeken kötegelt (batch) üzemmódban lehetséges. Ez azt jelenti, hogy minden futtatáshoz egy job szkriptet kell elkészíteni, amely tartalmazza az igényelt erőforrások leírását és a futtatáshoz szükséges parancsokat. Az ütemező paramétereit (erőforrás igények) a <code>#SBATCH</code> direktívával kell megadni. Az ütemezők összehasonlításáról és a Slurm-ban elérhető direktívákról a következő [http://slurm.schedmd.com/rosetta.pdf táblázat] ad bővebb tájékoztatást.
  
<code>
+
==== Kötelező paraméterek ====
    Job 53505 cannot run in queue "parallel.q" because it is not contained in its hard queue list (-q)     
+
A következő paramétereket minden esetben meg kell adni:
    Job 53505 (-l NONE) cannot run in queue "cn30.budapest.hpc.niif.hu" because exclusive resource (exclusive) is already in use     
+
<pre>
    Job 53505 (-l NONE) cannot run in queue "cn31.budapest.hpc.niif.hu" because exclusive resource (exclusive) is already in use     
+
#!/bin/bash
    Job 53505 cannot run in PE "mpi" because it only offers 0 slots     
+
#SBATCH -A ACCOUNT
    verification: no suitable queues
+
#SBATCH --job-name=NAME
</code>
+
#SBATCH --time=TIME
 
+
</pre>
You can check with this command where the jobs are running: 
+
ahol az <code>ACCOUNT</code> a terhelendő számla neve (elérhető számláinkről az <code>sbalance</code> parancs ad felvilágosítást), a <code>NAME</code> a job rövid neve, a <code>TIME</code> pedig a maximális walltime idő (<code>DD-HH:MM:SS</code>).
  
 +
A jobok feladását a következő parancs végzi:
 
<code>
 
<code>
     qhost -j -q
+
     sbatch jobscript.sh
 
</code>
 
</code>
  
<code>
+
Sikeres feladás esetén a következő kimenetet kapjuk:
    HOSTNAME                ARCH        NCPU  LOAD  MEMTOT  MEMUSE  SWAPTO  SWAPUS
+
<pre>
    -------------------------------------------------------------------------------
+
Submitted batch job JOBID
    global                  -              -    -      -      -      -      -
+
</pre>
    cn01                linux-x64          24  24.43  62.9G    3.0G    0.0    0.0   
+
ahol a <code>JOBID</code> a feladat egyedi azonosítószáma.
    serial.q            BI    0/42/48           
 
    120087 0.15501 run.sh    roczei      r    09/23/2012 14:25:51 MASTER 22   
 
    120087 0.15501 run.sh    roczei      r    09/23/2012 15:02:21 MASTER 78   
 
    120087 0.15501 run.sh    roczei      r    10/01/2012 07:58:21 MASTER 143   
 
    120087 0.15501 run.sh    roczei      r    10/01/2012 08:28:51 MASTER 144   
 
    120087 0.15501 run.sh    roczei      r    10/04/2012 17:41:51 MASTER 158   
 
    120340 0.13970 pwhg.sh    roczei      r    09/24/2012 23:24:51 MASTER 3   
 
    120340 0.13970 pwhg.sh    roczei      r    09/24/2012 23:24:51 MASTER 5   
 
    120340 0.13970 pwhg.sh    roczei      r    09/24/2012 23:24:51 MASTER 19   
 
    120340 0.13970 pwhg.sh    roczei      r    09/24/2012 23:24:51 MASTER 23   
 
    120340 0.13970 pwhg.sh    roczei      r    09/24/2012 23:24:51 MASTER 31   
 
    120340 0.13970 pwhg.sh    roczei      r    09/24/2012 23:24:51 MASTER 33   
 
    120340 0.13970 pwhg.sh    roczei      r    09/26/2012 13:42:51 MASTER 113   
 
    120340 0.13970 pwhg.sh    roczei      r    10/01/2012 07:43:06 MASTER 186   
 
    120340 0.13970 pwhg.sh    roczei      r    10/01/2012 07:58:36 MASTER 187   
 
    ...
 
</code>
 
 
 
=== Queue types ===
 
 
 
''parallel.q'' - for paralel jobs (jobs can run maximum 31 days)
 
''serial.q'' - for serial jobs (jobs can run maximum 31 days)
 
''test.q'' - test queue, the job will be killed after 2 hours
 
 
 
Getting information on the waiting line’s status:
 
  
 +
A feladat leállítását a következő parancs végzi:
 
<code>
 
<code>
     qstat -g c 
+
     scancel JOBID
 
</code>
 
</code>
  
<code>
+
==== Feladat sorok ====
    CUSTER QUEUE        CQLOAD  USED    RES  AVAIL  TOTAL aoACDS  cdsuE 
+
A szupergépeken két, egymást nem átfedő, sor (partíció) áll rendelkezésre, a <code>test</code> sor és a <code>prod</code> sor. Utóbbi az éles számolásokra való, előbbi fejlesztés és tesztelés céljára használható. A teszt sorban összesen 1 node-ot, maximum fél órára lehet lefoglalni. Az alapértelmezett sor a <code>prod</code>. A teszt partíciót a következő direktívával lehet kiválasztani:
    --------------------------------------------------------------------------------
+
<pre>
    parallel.q            0.52    368    0    280    648    0      0
+
#SBATCH --partition=test
    serial.q              0.05      5    0    91    96    0      0 
+
</pre>
    test.q                0.00      0    0    24    24    0      0
 
</code>
 
 
 
=== Running PVM job ===
 
 
 
 
 
To run the previously shown and translated gexample application, we need the following task-describing ''gexample.sh'' script: 
 
 
 
<code>  
 
    #!/bin/sh     
 
    #$ -N GEXAMPLE     
 
    ./gexample << EOL     
 
    30     
 
    5     
 
    EOL
 
</code>
 
 
 
We can submit this with the following command:     
 
 
 
<code>
 
    qsub -pe pvm 5 gexample.sh
 
</code>
 
 
 
The -pe pvm 5 command will tell to the SGE to create a PVM parallel computer machine with 5 virtual processors, and run the application in this.      
 
 
 
<code>
 
   
 
    parallel.q@cn31        BIP  0/5/24              5.15    linux-x64     
 
    908 1.00000 GEXAMPLE  stefan      r    06/04/2011 13:05:14    5
 
</code>
 
  
Also note that after the running two output files were created: one containing an attached standard error and standard output (GEXAMPLE.o908), another describing the working method of the (GEXAMLE.po908). The latter one is mainly for finding errors.
+
==== A szolgáltatás minősége (QOS) ====
 +
Lehetőség van alacsony prioritású jobok feladására is. Az ilyen feladatokat bármilyen normál prioritású job bármikor megszakíthatja, cserébe az elhasznált gépidő fele számlázódik csak. A megszakított jobok automatikusan újraütemeződnek. Fontos, hogy olyan feladatokat indítsunk alacsony prioritással, amelyek kibírják a véletlenszerű megszakításokat, rendszeresen elmentik az állapotukat (checkpoint) és ebből gyorsan újra tudnak indulni. A szolgáltatást alapértelmezett minősége <code>normal</code>, azaz nem megszakítható a futás.
  
=== Running MPI jobs ===
 
  
 +
Az alacsony prioritás kiválasztását a következő direktívával tehetjük meg:
 +
<pre>
 +
#SBATCH --qos=lowpri
 +
</pre>
  
All computers are set up with several installations of the MPI system: vendor-specific MPI implementations, and MPICH system too. The default setup is the vendor-specific MPI.
+
==== Memória beállítások ====
 +
Alapértelmezetten 1 CPU core-hoz 1000 MB memória van rendelve, ennél többet a következő direktívával igényelhetünk:
 +
<pre>
 +
#SBATCH --mem-per-cpu=MEMORY
 +
</pre>
 +
ahol <code>MEMORY</code> MB egységben van megadva. Budapesten a maximális memória/core 2600 MB.
  
Running in the MPI environment is similar to the PVM environment. Let’s have a look at the example shown in the previous chapter connectivity. A very simple task which tests the MPI tasks’internal communication. Use the following connectivity.sh script to run it:     
+
==== Email értesítés ====
 +
Levél küldése job állapotának változásakor (elindulás,leállás,hiba):
 +
<pre>
 +
#SBATCH --mail-type=ALL
 +
#SBATCH --mail-user=EMAIL
 +
</pre>
 +
ahol az <code>EMAIL</code> az értesítendő emial cím.
  
<code>
+
==== Tömbfeladatok (arrayjob) ====
    #!/bin/sh     
+
Tömbfeladatokra akkor van szükségünk, egy szálon futó (soros) alkalmazást szeretnénk egyszerre sok példányban (más-más adatokkal) futtatni. A példányok számára az ütemező a <code>SLURM_ARRAY_TASK_ID</code> környezeti változóban tárolja az egyedi azonosítót. Ennek lekérdezésével lehet az arrayjob szálait elkülöníteni. A szálak kimenetei a <code>slurm-SLURM_ARRAY_JOB_ID-SLURM_ARRAY_TASK_ID.out</code> fájlokba íródnak. Az ütemező a feltöltést szoros pakolás szerint végzi. Ebben az esetben is érdemes a processzorszám többszörösének választani a szálak számát. [http://slurm.schedmd.com/job_array.html Bővebb ismertető]
    #$ -N CONNECTIVITY
 
</code>
 
  
<code>    
+
===== Példa =====
    mpirun -np $NSLOTS ./connectivity
+
Alice felhasználó a foobar számla terhére, maximum 24 órára ad fel 96 db soros jobot. A <code>#SBATCH --array=1-96</code> direktíva jelzi, hogy tömbfeladatról van szó. Az alkalmazást az <code>srun</code> paranccsal kell indítani. Ebben az esetben ez egy shell szkript.
</code>
+
<pre>
 +
#!/bin/bash
 +
#SBATCH -A foobar
 +
#SBATCH --time=24:00:00
 +
#SBATCH --job-name=array
 +
#SBATCH --array=1-96
 +
srun envtest.sh
 +
</pre>
  
Here, the $NLOTS variable indicates that how many processors should be used in the MPI environment. This equals with that number what we have reuired for  the parallel environment.  
+
==== MPI feladatok ====
 +
MPI feladatok esetén meg kell adnunk az egy node-on elinduló MPI processzek számát is (<code>#SBATCH --ntasks-per-node=</code>). A leggyakoribb esetben ez az egy node-ban található CPU core-ok száma. A párhuzamos programot az <code>mpirun</code> paranccsal kell indítani.
  
The job can be submitted with the following command:    
+
===== Példa =====
 +
Bob felhasználó a barfoo számla terhére 2 node-ot, 12 órára foglal le egy MPI job számára. Az egyes node-okon 24 MPI szálat fog elindítani. A program stdout kimenetét a <code>slurm.out</code> fájlba irányítja (<code>#SBATCH -o</code>).
 +
<pre>
 +
#!/bin/bash
 +
#SBATCH -A barfoo
 +
#SBATCH --job-name=mpi
 +
#SBATCH -N 2
 +
#SBATCH --ntasks-per-node=24
 +
#SBATCH --time=12:00:00
 +
#SBATCH -o slurm.out
 +
mpirun ./a.out
 +
</pre>
  
<code>
+
==== CPU binding ====
    qsub -pe mpi 20 connectivity.sh
+
Az MPI programok teljesítménye általában javítható a processzek CPU magokhoz kötésével. Ilyenkor a párhuzamos program szálait az operációs rendszer nem ütemezi a CPU magok között, ezért javulhat a memória lokalizáció (kevesebb cache miss). A kötés használata ajánlott. Tesztekkel meg kell győződni, hogy egy adott alkalmazás esetén melyik kötési stratégia adja a legjobb eredményt. A következő beállítások az OpenMPI környezetre vontakoznak. A kötésekről részletes információt a <code>--report-bindings</code> MPI opcióval kaphatunk. Az indítási parancsok melett a részletes binding információ néhány sora is látható. Fontos, hogy az ütemező task binding-ját nem kell használni!
</code>
 
  
With this command we instruct the scheduler to create a parallel MPI environment containing 20 processors, and reserve space for it in one of the queues. Once the space is available, the job starts:
+
===== Kötés CPU magonként =====
 +
Ebben az esetben az MPI szálak (rank) sorban töltik fel a CPU magokat.
 +
<pre>
 +
Indítási parancs: mpirun --bind-to-core --bycore
  
<code>
+
[cn05:05493] MCW rank 0 bound to socket 0[core 0]: [B . . . . . . . . . . .][. . . . . . . . . . . .]
    parallel.q@cn31          BIP          0/20/24              20.30    linux-x64           
+
[cn05:05493] MCW rank 1 bound to socket 0[core 1]: [. B . . . . . . . . . .][. . . . . . . . . . . .]
    910 1.00000 CONNECTOVI stefan      r    06/04/2011 14:03:14    20     
+
[cn05:05493] MCW rank 2 bound to socket 0[core 2]: [. . B . . . . . . . . .][. . . . . . . . . . . .]
</code>
+
[cn05:05493] MCW rank 3 bound to socket 0[core 3]: [. . . B . . . . . . . .][. . . . . . . . . . . .]
 +
</pre>
  
Running the program will result in two files: the first one (CONNECTIVITY.o910) is the overlap of the result of the already run program standard output and standard error, while the second one (CONNECTIVITY.po910) is for the follow-up of the operation of the parallel environment. If the running is successful, this file is empty. The command -pe mpi 20 can be given in the script too with the directive #$ -pe mpi 20
+
===== Kötés CPU foglalat szerint =====
 +
Ebben az esetben az MPI szálak váltakozva töltik fel a CPU-kat.
 +
<pre>
 +
Indítási parancs: mpirun --bind-to-core --bysocket
  
=== Running OpenMP jobs ===
+
[cn05:05659] MCW rank 0 bound to socket 0[core 0]: [B . . . . . . . . . . .][. . . . . . . . . . . .]
 +
[cn05:05659] MCW rank 1 bound to socket 1[core 0]: [. . . . . . . . . . . .][B . . . . . . . . . . .]
 +
[cn05:05659] MCW rank 2 bound to socket 0[core 1]: [. B . . . . . . . . . .][. . . . . . . . . . . .]
 +
[cn05:05659] MCW rank 3 bound to socket 1[core 1]: [. . . . . . . . . . . .][. B . . . . . . . . . .]
 +
</pre>
  
There are applications that either use the solutions of the operation system for multi-threaded program execution, or use a special library designed for this, like OpenMP. These applications have to be instructed how many threads they can use. The matrix multiplication algorithm presented in the previous chapter can be described with the following ''omp_mm.sh'' script     
+
===== Kötés node-ok szerint =====
 +
Ebben az esetben az MPI szálak váltakozva töltik fel a node-okat. Lagalább 2 node foglalása szükséges.
 +
<pre>
 +
Indítási parancs: mpirun --bind-to-core --bynode
  
<code>
+
[cn05:05904] MCW rank 0 bound to socket 0[core 0]: [B . . . . . . . . . . .][. . . . . . . . . . . .]
    #!/bin/sh     
+
[cn05:05904] MCW rank 2 bound to socket 0[core 1]: [. B . . . . . . . . . .][. . . . . . . . . . . .]
    #$ -N OPENMP_MM     
+
[cn06:05969] MCW rank 1 bound to socket 0[core 0]: [B . . . . . . . . . . .][. . . . . . . . . . . .]
</code>
+
[cn06:05969] MCW rank 3 bound to socket 0[core 1]: [. B . . . . . . . . . .][. . . . . . . . . . . .]
 +
</pre>
  
 +
==== OpenMP (OMP) feladatok ====
 +
OpenMP párhuzamos alkalmazásokhoz 1 node-ot kell lefoglalni és meg kell adni az OMP szálák számát a <code>OMP_NUM_THREADS</code> környezeti változóval. A változót vagy az alkamazás elé kell írni (ld. példa), vagy exportálni kell az alkalmazást indító parancs előtt:
 
<code>
 
<code>
    ./omp_mm
+
  export OMP_NUM_THREADS=24
 
</code>
 
</code>
  
it can be submitted with this command which will use 6 threads
+
===== Példa =====
 
+
Alice felhasználó a foobar számla terhére, maximum 6 órára indít el egy 24 szálas OMP alkalmazást.
<code>
+
<pre>
    qsub -pe openmp 6 omp_mm.sh
+
#!/bin/bash
</code>
+
#SBATCH -A foobar
 +
#SBATCH --job-name=omp
 +
#SBATCH --time=06:00:00
 +
#SBATCH -N 1
 +
OMP_NUM_THREADS=24 ./a.out
 +
</pre>
  
 +
==== Hibrid MPI-OMP feladatok ====
 +
Hibrid MPI-OMP módról akkor beszélünk, ha a párhuzamos alkalmazás MPI-t és OMP-t is használ. Érdemes tudni, hogy az Intel MKL-el linkelt programok MKL hívásai OpenMP képesek. Általában a következő elosztás javasolt: az MPI processzek száma 1-től az egy node-ban található CPU foglalatok száma, az OMP szálak ennek megfelelően az egy node-ban található összes CPU core szám vagy annak fele, negyede (értelem szerűen). A jobszkipthez a fenti két mód paramétereit kombinálni kell.
  
=== Checkpointing support ===
+
===== Példa =====
 +
Alice felhasználó a foobar számla terhére, 8 órára, 2 node-ra küldött be egy hibrid jobot. Egy node-on egyszerre csak 1 db MPI processz fut ami node-onként 24 OMP szálat használ. A 2 gépen összesen 2 MPI proceszz és 2 x 24 OMP szál fut.
 +
<pre>
 +
#!/bin/bash
 +
#SBATCH -A foobar
 +
#SBATCH --job-name=mpiomp
 +
#SBATCH -N 2
 +
#SBATCH --time=08:00:00
 +
#SBATCH --ntasks-per-node=1
 +
#SBATCH -o slurm.out
 +
export OMP_NUM_THREADS=24
 +
mpirun ./a.out
 +
</pre>
  
 +
==== Maple Grid feladatok ====
 +
Maple-t az OMP feladatokhoz hasonlóan 1 node-on lehet futtatni. Használatához be kell tölteni a maple modult is. A Maple kliens-szerver üzemmódban működik ezért a Maple feladat futtatása előtt szükség van a grid szerver elindítására is (<code>${MAPLE}/toolbox/Grid/bin/startserver</code>). Ez az alkalmazás licensz köteles, amit a jobszkriptben meg kell adni (<code>#SBATCH --licenses=maplegrid:1</code>). A Maple feladat indátását a <code>${MAPLE}/toolbox/Grid/bin/joblauncher</code> paranccsal kell elvégezni.
  
At the moment the system doesn’t support any automatic checkpointing/restarting mechanism. If it is need, the application has to take care of it.
+
===== Példa =====
 +
Alice felhasználó a foobar számla terhére, 6 órára indítja el a Maple Grid alkalmazást:
 +
<pre>
 +
#!/bin/bash
 +
#SBATCH -A foobar
 +
#SBATCH --job-name=maple
 +
#SBATCH -N 1
 +
#SBATCH --ntasks-per-node=24
 +
#SBATCH --time=06:00:00
 +
#SBATCH -o slurm.out
 +
#SBATCH --licenses=maplegrid:1
 +
${MAPLE}/toolbox/Grid/bin/startserver
 +
${MAPLE}/toolbox/Grid/bin/joblauncher ${MAPLE}/toolbox/Grid/samples/Simple.mpl
 +
</pre>

A lap 2013. november 4., 17:14-kori változata

User Guide to obtain a digital certificate

This document gives a short overview about how to require a digital certificate from NIIF CA for users, if the pre-registration form has been filled.

This guide is valid only for the Hungarian users.

If you are from a foreign country, and would like to get a certificate, here you can found your country's certification authority.


Installing NIIF CA root certificate

The first step is to download the "root certificate" ("NIIF CA Root Certificate" part), in the the format, which is known for the used browser or other SSL-using program. The browser asks wether to install/accept the certificate or not - accept or install the certificate in any cases. In addition, activate or allow the option which permits the browser to use the certificate to authenticate websites. Without that, it is not possible to reach the CA's web interface with secure protocol (https). The downloaded/installed certificate can be found in the certificate management modul of the browser.


Request a certificate

Request a certificate with openssl

  • Sing in into the certification registration website of the NIIF CA with our email address and password stored in the directory.
  • This site uses secure protocol (https), which the browser often indicates with a warning window - they should be acknowledged implicitly.
  • In the opening page - which is the public web surface of the CMS certificate management software - choose the "OpenSSL kliens kérelem benyújtása (PKCS#10)" (request an OpenSSL client) option. This leads to the datasheet, which must be filled in accordance with the printed datasheet. First, according to the purpose of the request, the corresponding field must be choosen (CSIRT, GRID, NIIF felhasználó, Független kutató, HBONE).
  • Copy the public part of our certificate in the field "PKCS#10". You can find a user guide about How to create a PKCS#10 certificate with openssl, which suitable for the NIIF CA requirements below.
  • A Challenge and a Request passwords must be given - both of them must be at least 8 characters long. Note them, because they needed for cancellation the certificate, or for the personal authentication.
  • Fill the other fields (name, email address, phone, organisation), and if there is anything, the CA operator should know, fill the last field with it. If everything is done, after a last check, click on the Elküld ("send") button on the bottom of the page.
  • In case of a successful PKCS#10 key-uploading, a page is opening with the confirmation of the successful certification request.

User Guide to create a PKCS#10 digital certification request with openssl

This paragraph gives a short overview about how to require a digital certificate from NIIF CA for users using openssl with the PKCS#10 format.The latest version of the openssl program can be downloaded from: Windows, Linux.

1. Download the openssl configuration file
To generate the CSR, there is a prewritten niif_ca_user_openssl.cnf file on the NIIF CA website.
The following modifications must be done in the config:


#purpose of the certificate

1.organizationalUnitName = Organizational Unit Name
1.organizationalUnitName_default = GRID # For example: GRID, HBONE, General Purpose
2.organizationalUnitName = Second Organizational Unit Name
2.organizationalUnitName_default = NIIF # For example: BME, ELTE, SZFKI, SZTAKI, NIIF, ...
commonName = Common Name (YOUR name) # User Name.
commonName_max = 64A


2. Create PKCS#10 reqquest
  • No existing secret key:

Run the

   openssl req -newkey rsa:1024 -config ./niif_ca_user_openssl.cnf -out new_csr.pem 

command, and answer the appearing questions at the prompt. The Institute (NIIF CA) and country (HU) datas should not be changed, or the request is going to be invalid. The certification request and the corresponding private key will be saved in the new_csr.pem and privkey.pem files. To gain acces to the private key, during the generating given "pass phrase" password must be used. In case of a forgotten password, the certificate will be unusable.

  • Existing private key (extend)

If there is an existing, previously generated private key (it must be at least a 1024 bit RSA key), which can be found in the old_key.pem file, then the following command creates the CSR

   openssl req -new -key ./old_key.pem -config ./niif_ca_user_openssl.cnf -out new_csr.pem


Personal Authentication

After the successful registration on the website, please visit the NIIF CA Registration Office personally with the copy of the pre-registration datasheet, the Request password and an ID document (ID card, passport).

Address:

NIIF Iroda
(RA Administrator)
Victor Hugo Str. 18-22.
H-1132 Budapest, HUNGARY
email: ca (at) niif (dot) hu
RA opening hours: Monday, 14:00 - 16:30 (CET)

During the authentication, the colleagues of the Registration Office verify the datas of the certificate and the user, and after the successful identification, they take the next steps in order to create the certification (it is not needed to wait for it).


Downloading the certificate

An email is going to arrive after the valid certificate has been completed (to the given email address during the request), and clicking on the URL in the email, the certificate can be downloaded. The saved certificate does not contain the private key.

If the certificate is installed into the browser, it is advised to export it with the private key in PKCS#12 format, so there will be a common backup with the private key and the certificate. Handle this backup carefully! If the private key lost, or gets into unauthorized hands, immediately request a certificate cancellation at the registration interface "Tanúsítvány visszavonása" (certificate cancellation) or at the Registration Office, and inform the concerned people!

Access with GSI-SSH

A user can access to the supercomputers by using the GSI-SSH protocol.

It requires a machine with a Globus installation that provides the gsissh client.

The needed credentials (these mean the private and public keys) must be created before entering the machine with the

   grid-proxy-init

or

   arcproxy

commands.

By default, the proxies are valid for 12 hours. It is possible to modify this default value with the following commands:

   arcproxy -c validityPeriod=86400

or

   grid-proxy-init -hours 24

Both of the previous commands set the validation of the proxies to 24 hours. Using the arcproxy, the validation time must be given in seconds.


To enter the site, the

   gsissh -p 2222 prace-login.sc.niif.hu

command has to be used.


GridFTP file transfer

In order to use GridFTP for file transfer, one needs a GridFTP client program that provides the interface between the user and a remote GridFTP server. There are several clients available for GridFTP, one of which is globus-url-copy, a command line tool which can transfer files using the GridFTP protocol as well as other protocols such as http and ftp. globus-url-copy is distributed with the Globus Toolkit and usually available on machines that have the Globus Toolkit installed.


Syntax

   globus-url-copy [options] sourceURL destinationURL

  • [options] The optional command line switches as described later.
  • sourceURL The URL of the file(s) to be copied. If it is a directory, it must end with a slash (/), and all files within that directory will be copied.
  • destURL The URL to which to copy the file(s). To copy several files to one destination URL, destURL must be a directory and be terminated with a slash (/).


Globus-url-copy supports multiple protocols, so the format of the source and destination URLs can be either

   file://path 


when you refer to a local file or directory or

   protocol://host[:port]/path


when you refer to a remote file or directory.

globus-url-copy is supporting other protocols such as http, https, ftp and gsiftp as well.


  • Example:

   globus-url-copy file://task/myfile.c gsiftp://prace-login.sc.niif.hu/home/prace/pr1hrocz/myfile.c 

This command uploads the myfile.c file from the locak task folder to the remote machine's home/task folder.


Command line options for globus-url-copy [options]

  • -help Prints usage information for the globus-url-copy program.
  • -version Prints the version of the globus-url-copy program.
  • -vb During the transfer, displays: (1) number of bytes transferred (2) performance since the last update (every 5 seconds) (3) average performance for the whole transfer


The following table lists parameters which you can set to optimize the performance of your data transfer:

  • -tcp-bs <size>Specifies the size (in bytes) of the TCP buffer to be used by the underlying GridFTP data channels.
  • -p <number of parallel streams> Specifies the number of parallel streams to be used in the GridFTP transfer.
  • -stripe Use this parameter to initiate a “striped” GridFTP transfer that uses more than one node at the source and destination. As multiple nodes contribute to the transfer, each using its own network interface, a larger amount of the network bandwidth can be consumed than with a single system. Thus, at least for “big” (> 100 MB) files, striping can considerably improve performance.

Usage of the SLURM scheduler

The schedule of the HPCs are CPU hour based. This means that the available core hours are divided between users on a monthly basis. All UNIX users are connected to one or more account. This scheduler account is connected to an HPC project and a UNIX group. HPC jobs can only be sent by using one of the accounts. The core hours are calculated by the multiplication of wall time (time spent running the job) and the CPU cores requested. For example reserving 2 nodes (48 cpu cores) at the NIIFI SC for 30 minutes gives 48 * 30 = 1440 core minutes = 24 core hours. Core hours are measured between the start and and the end of the jobs.

It is very important to be sure the application maximally uses the allocated resources. An emty or non-optimal job will consume allocated core time very fast. If the account run out of the allocated time, no new jobs can be submitted until the beginning of the next accounting period. Account limits are regenerated the beginning of each month.

Information about an account can be listed with the following command:

   sbalance

Example

After executing the command, the following table shows up for Bob. The user can access, and run jobs by using two differnt accounts (foobar,barfoo). He can see his name marked with * in the table. He shares both accounts with alice (Account column). The consumed core hours for the users are displayed in the second row (Usage), and the consumption for the jobs ran as the account is displayed in the 4th row. The last two row defines the allocated maximum time (Account limit), and the time available for the machine (Available).

Scheduler Account Balance
---------- ----------- + ---------------- ----------- + ------------- -----------
User             Usage |          Account       Usage | Account Limit   Available (CPU hrs)
---------- ----------- + ---------------- ----------- + ------------- -----------
alice                0 |           foobar           0 |             0           0
bob *                0 |           foobar           0 |             0           0

bob *                7 |           barfoo           7 |         1,000         993
alice                0 |           barfoo           7 |         1,000         993

A gépidő becslése

Nagyüzemi (production) futtatások előtt gépidőbecslést érdemes végezni. Ehhez a következő parancs használható:

   sestimate -N NODES -t WALLTIME

ahol a NODES a lefoglalni kívánt node-ok száma, a WALLTIME pedig a futás maximális ideje.

Fontos, hogy a lefoglalni kívánt gépidőt a lehető legpontosabban adjuk meg, mivel az ütemező ez alapján is rangsorolja a futtatásra váró feladatokat. Általában igaz, hogy a rövidebb job hamarabb sorra kerül. Érdemes minden futás idejét utólag az sacct paranccsal is ellenőrizni.

Példa

Alice 2 nap 10 órára és 2 node-ra szeretne foglalást kérni, megnézi van-e elég gépidő a számláján:

sestimate -N 2 -t 2-10:00:00

Estimated CPU hours: 2784

Sajnos ebben a hónapban erre már nem telik.

Állapotinformációk

Az ütemezőben lévő jobokról az squeue, a klaszter általános állapotáról az sinfo parancs ad tájékoztatást. Minden beküldött jobhoz egy egyedi azonosítószám (JOBID) rendelődik. Ennek ismeretében további információkat kérhetünk. Feladott vagy már futó job jellemzői:

   scontrol show job JOBID

Minden job egy ún. számlázási adatbázisba (accounting) is bekerül. Ebből az adatbázisból visszakereshetők a lefuttatott feladatok jellemzői és erőforrás-felhasználás statisztikái. A részletes statisztikát a következő paranccsal tudjuk megnézni:

   sacct -l -j JOBID

A felhasznált memóriáról a következő parancs ad tájékoztatást:

   smemory JOBID

A lemezhasználatról pedig a

   sdisk JOBID

Példa

Az ütemezőben 3 feladat van. Az első egy arrayjob, éppen erőforrásra vár (PENDING). A második egy MPI job, ami 4 node-on fut már 25 perce (TIME). A harmadik egy egy node-os OMP futtatás, éppen most indult el. A feladatik nevei (NAME) egyénileg adható meg. Rövid, informatív neveket érdemes adni.

    squeue -l

Wed Oct 16 08:30:07 2013              
     JOBID PARTITION     NAME     USER    STATE       TIME TIMELIMIT  NODES NODELIST(REASON)
591_[1-96]    normal    array    alice  PENDING       0:00     30:00      1 (None)
       589    normal      mpi      bob  RUNNING      25:55   2:00:00      4 cn[05-08]
       590    normal      omp    alice  RUNNING       0:25   1:00:00      1 cn09

Ennek a 2 node-os batch jobnak a jellemző memóriaterhelés a következő volt: kb. 10GB virtuális és 6.5GB RSS memóriát használt el node-onként.

    smemory 430

 MaxVMSize  MaxVMSizeNode  AveVMSize     MaxRSS MaxRSSNode     AveRSS
---------- -------------- ---------- ---------- ---------- ----------
10271792K           cn06  10271792K   6544524K       cn06   6544524K   
10085152K           cn07  10085152K   6538492K       cn07   6534876K 

Feladatok ellenőrzése

Nagyon fontos meggyőződni arról, hogy az alkalmazás kihasználja-e a rendelkezésre álló gépidőt. Egy futó alkalmazás a következő paranccsal tudunk monitorozni:

   sjobcheck JOBID

Példa

Ez a job 4 node-on fut. A LOAD csoport a gép általános terheléséről ad információt és kb. a core-ok számával egyezik meg. A helyes felhasználásról a CPU csoport ad tájékoztatást. Ideális esetben a User oszlop értékei 90 fölött vannak. Ez alatt valamilyen probléma lépett fel és a futást érdemes megszakítani. A példa job rendkívűl jól kihasználja a gépet (kimaxolja).

Hostname                     LOAD                       CPU              Gexec  
 CPUs (Procs/Total) [     1,     5, 15min] [  User,  Nice, System, Idle, Wio]
cn08    24 (   25/  529) [ 24.83, 24.84, 20.98] [  99.8,   0.0,   0.2,   0.0,   0.0] OFF
cn07    24 (   25/  529) [ 24.93, 24.88, 20.98] [  99.8,   0.0,   0.2,   0.0,   0.0] OFF
cn06    24 (   25/  529) [ 25.00, 24.90, 20.97] [  99.9,   0.0,   0.1,   0.0,   0.0] OFF
cn05    24 (   25/  544) [ 25.11, 24.96, 20.97] [  99.8,   0.0,   0.2,   0.0,   0.0] OFF

Licenszek ellenőrzése

Az elérhető és éppen használt licenszekről a következő parancs ad információt:

   slicenses

Karbantartás ellenőrzése

A karbantartási időablakban az ütemező nem indít új jobokat, de beküldeni lehet. A karbantartások időpontjairól a következő parancs ad tájékoztatást:

   sreservations

Feladatok futtatása

Alkalmazások futtatása a szupergépeken kötegelt (batch) üzemmódban lehetséges. Ez azt jelenti, hogy minden futtatáshoz egy job szkriptet kell elkészíteni, amely tartalmazza az igényelt erőforrások leírását és a futtatáshoz szükséges parancsokat. Az ütemező paramétereit (erőforrás igények) a #SBATCH direktívával kell megadni. Az ütemezők összehasonlításáról és a Slurm-ban elérhető direktívákról a következő táblázat ad bővebb tájékoztatást.

Kötelező paraméterek

A következő paramétereket minden esetben meg kell adni:

#!/bin/bash
#SBATCH -A ACCOUNT
#SBATCH --job-name=NAME
#SBATCH --time=TIME

ahol az ACCOUNT a terhelendő számla neve (elérhető számláinkről az sbalance parancs ad felvilágosítást), a NAME a job rövid neve, a TIME pedig a maximális walltime idő (DD-HH:MM:SS).

A jobok feladását a következő parancs végzi:

   sbatch jobscript.sh

Sikeres feladás esetén a következő kimenetet kapjuk:

Submitted batch job JOBID

ahol a JOBID a feladat egyedi azonosítószáma.

A feladat leállítását a következő parancs végzi:

   scancel JOBID

Feladat sorok

A szupergépeken két, egymást nem átfedő, sor (partíció) áll rendelkezésre, a test sor és a prod sor. Utóbbi az éles számolásokra való, előbbi fejlesztés és tesztelés céljára használható. A teszt sorban összesen 1 node-ot, maximum fél órára lehet lefoglalni. Az alapértelmezett sor a prod. A teszt partíciót a következő direktívával lehet kiválasztani:

#SBATCH --partition=test

A szolgáltatás minősége (QOS)

Lehetőség van alacsony prioritású jobok feladására is. Az ilyen feladatokat bármilyen normál prioritású job bármikor megszakíthatja, cserébe az elhasznált gépidő fele számlázódik csak. A megszakított jobok automatikusan újraütemeződnek. Fontos, hogy olyan feladatokat indítsunk alacsony prioritással, amelyek kibírják a véletlenszerű megszakításokat, rendszeresen elmentik az állapotukat (checkpoint) és ebből gyorsan újra tudnak indulni. A szolgáltatást alapértelmezett minősége normal, azaz nem megszakítható a futás.


Az alacsony prioritás kiválasztását a következő direktívával tehetjük meg:

#SBATCH --qos=lowpri

Memória beállítások

Alapértelmezetten 1 CPU core-hoz 1000 MB memória van rendelve, ennél többet a következő direktívával igényelhetünk:

#SBATCH --mem-per-cpu=MEMORY

ahol MEMORY MB egységben van megadva. Budapesten a maximális memória/core 2600 MB.

Email értesítés

Levél küldése job állapotának változásakor (elindulás,leállás,hiba):

#SBATCH --mail-type=ALL
#SBATCH --mail-user=EMAIL

ahol az EMAIL az értesítendő emial cím.

Tömbfeladatok (arrayjob)

Tömbfeladatokra akkor van szükségünk, egy szálon futó (soros) alkalmazást szeretnénk egyszerre sok példányban (más-más adatokkal) futtatni. A példányok számára az ütemező a SLURM_ARRAY_TASK_ID környezeti változóban tárolja az egyedi azonosítót. Ennek lekérdezésével lehet az arrayjob szálait elkülöníteni. A szálak kimenetei a slurm-SLURM_ARRAY_JOB_ID-SLURM_ARRAY_TASK_ID.out fájlokba íródnak. Az ütemező a feltöltést szoros pakolás szerint végzi. Ebben az esetben is érdemes a processzorszám többszörösének választani a szálak számát. Bővebb ismertető

Példa

Alice felhasználó a foobar számla terhére, maximum 24 órára ad fel 96 db soros jobot. A #SBATCH --array=1-96 direktíva jelzi, hogy tömbfeladatról van szó. Az alkalmazást az srun paranccsal kell indítani. Ebben az esetben ez egy shell szkript.

#!/bin/bash
#SBATCH -A foobar
#SBATCH --time=24:00:00
#SBATCH --job-name=array
#SBATCH --array=1-96
srun envtest.sh

MPI feladatok

MPI feladatok esetén meg kell adnunk az egy node-on elinduló MPI processzek számát is (#SBATCH --ntasks-per-node=). A leggyakoribb esetben ez az egy node-ban található CPU core-ok száma. A párhuzamos programot az mpirun paranccsal kell indítani.

Példa

Bob felhasználó a barfoo számla terhére 2 node-ot, 12 órára foglal le egy MPI job számára. Az egyes node-okon 24 MPI szálat fog elindítani. A program stdout kimenetét a slurm.out fájlba irányítja (#SBATCH -o).

#!/bin/bash
#SBATCH -A barfoo
#SBATCH --job-name=mpi
#SBATCH -N 2
#SBATCH --ntasks-per-node=24
#SBATCH --time=12:00:00
#SBATCH -o slurm.out
mpirun ./a.out

CPU binding

Az MPI programok teljesítménye általában javítható a processzek CPU magokhoz kötésével. Ilyenkor a párhuzamos program szálait az operációs rendszer nem ütemezi a CPU magok között, ezért javulhat a memória lokalizáció (kevesebb cache miss). A kötés használata ajánlott. Tesztekkel meg kell győződni, hogy egy adott alkalmazás esetén melyik kötési stratégia adja a legjobb eredményt. A következő beállítások az OpenMPI környezetre vontakoznak. A kötésekről részletes információt a --report-bindings MPI opcióval kaphatunk. Az indítási parancsok melett a részletes binding információ néhány sora is látható. Fontos, hogy az ütemező task binding-ját nem kell használni!

Kötés CPU magonként

Ebben az esetben az MPI szálak (rank) sorban töltik fel a CPU magokat.

Indítási parancs: mpirun --bind-to-core --bycore

[cn05:05493] MCW rank 0 bound to socket 0[core 0]: [B . . . . . . . . . . .][. . . . . . . . . . . .]
[cn05:05493] MCW rank 1 bound to socket 0[core 1]: [. B . . . . . . . . . .][. . . . . . . . . . . .]
[cn05:05493] MCW rank 2 bound to socket 0[core 2]: [. . B . . . . . . . . .][. . . . . . . . . . . .]
[cn05:05493] MCW rank 3 bound to socket 0[core 3]: [. . . B . . . . . . . .][. . . . . . . . . . . .]
Kötés CPU foglalat szerint

Ebben az esetben az MPI szálak váltakozva töltik fel a CPU-kat.

Indítási parancs: mpirun --bind-to-core --bysocket

[cn05:05659] MCW rank 0 bound to socket 0[core 0]: [B . . . . . . . . . . .][. . . . . . . . . . . .]
[cn05:05659] MCW rank 1 bound to socket 1[core 0]: [. . . . . . . . . . . .][B . . . . . . . . . . .]
[cn05:05659] MCW rank 2 bound to socket 0[core 1]: [. B . . . . . . . . . .][. . . . . . . . . . . .]
[cn05:05659] MCW rank 3 bound to socket 1[core 1]: [. . . . . . . . . . . .][. B . . . . . . . . . .]
Kötés node-ok szerint

Ebben az esetben az MPI szálak váltakozva töltik fel a node-okat. Lagalább 2 node foglalása szükséges.

Indítási parancs: mpirun --bind-to-core --bynode

[cn05:05904] MCW rank 0 bound to socket 0[core 0]: [B . . . . . . . . . . .][. . . . . . . . . . . .]
[cn05:05904] MCW rank 2 bound to socket 0[core 1]: [. B . . . . . . . . . .][. . . . . . . . . . . .]
[cn06:05969] MCW rank 1 bound to socket 0[core 0]: [B . . . . . . . . . . .][. . . . . . . . . . . .]
[cn06:05969] MCW rank 3 bound to socket 0[core 1]: [. B . . . . . . . . . .][. . . . . . . . . . . .]

OpenMP (OMP) feladatok

OpenMP párhuzamos alkalmazásokhoz 1 node-ot kell lefoglalni és meg kell adni az OMP szálák számát a OMP_NUM_THREADS környezeti változóval. A változót vagy az alkamazás elé kell írni (ld. példa), vagy exportálni kell az alkalmazást indító parancs előtt:

 export OMP_NUM_THREADS=24

Példa

Alice felhasználó a foobar számla terhére, maximum 6 órára indít el egy 24 szálas OMP alkalmazást.

#!/bin/bash
#SBATCH -A foobar
#SBATCH --job-name=omp
#SBATCH --time=06:00:00
#SBATCH -N 1
OMP_NUM_THREADS=24 ./a.out

Hibrid MPI-OMP feladatok

Hibrid MPI-OMP módról akkor beszélünk, ha a párhuzamos alkalmazás MPI-t és OMP-t is használ. Érdemes tudni, hogy az Intel MKL-el linkelt programok MKL hívásai OpenMP képesek. Általában a következő elosztás javasolt: az MPI processzek száma 1-től az egy node-ban található CPU foglalatok száma, az OMP szálak ennek megfelelően az egy node-ban található összes CPU core szám vagy annak fele, negyede (értelem szerűen). A jobszkipthez a fenti két mód paramétereit kombinálni kell.

Példa

Alice felhasználó a foobar számla terhére, 8 órára, 2 node-ra küldött be egy hibrid jobot. Egy node-on egyszerre csak 1 db MPI processz fut ami node-onként 24 OMP szálat használ. A 2 gépen összesen 2 MPI proceszz és 2 x 24 OMP szál fut.

#!/bin/bash
#SBATCH -A foobar
#SBATCH --job-name=mpiomp
#SBATCH -N 2
#SBATCH --time=08:00:00
#SBATCH --ntasks-per-node=1
#SBATCH -o slurm.out
export OMP_NUM_THREADS=24
mpirun ./a.out

Maple Grid feladatok

Maple-t az OMP feladatokhoz hasonlóan 1 node-on lehet futtatni. Használatához be kell tölteni a maple modult is. A Maple kliens-szerver üzemmódban működik ezért a Maple feladat futtatása előtt szükség van a grid szerver elindítására is (${MAPLE}/toolbox/Grid/bin/startserver). Ez az alkalmazás licensz köteles, amit a jobszkriptben meg kell adni (#SBATCH --licenses=maplegrid:1). A Maple feladat indátását a ${MAPLE}/toolbox/Grid/bin/joblauncher paranccsal kell elvégezni.

Példa

Alice felhasználó a foobar számla terhére, 6 órára indítja el a Maple Grid alkalmazást:

#!/bin/bash
#SBATCH -A foobar
#SBATCH --job-name=maple
#SBATCH -N 1
#SBATCH --ntasks-per-node=24
#SBATCH --time=06:00:00
#SBATCH -o slurm.out
#SBATCH --licenses=maplegrid:1
${MAPLE}/toolbox/Grid/bin/startserver
${MAPLE}/toolbox/Grid/bin/joblauncher ${MAPLE}/toolbox/Grid/samples/Simple.mpl