Both sides previous revision
Previous revision
Next revision
|
Previous revision
|
grid [2018/11/27 16:28] vidra qalter works on running jobs as well |
grid [2024/10/02 15:21] (current) popel |
If you need GPU processing, see a special page about our [[:gpu|GPU cluster called DLL]] (which is actually a subsystem of LRC with an independent queue ''gpu-ms.q''). | If you need GPU processing, see a special page about our [[:gpu|GPU cluster called DLL]] (which is actually a subsystem of LRC with an independent queue ''gpu-ms.q''). |
TODO: describe alternatives, e.g.: MetaCentrum / Cesnet cluster (all MFF students can use it), Amazon EC2, Microsoft Azure (some colleagues may have sometime free vouchers). | TODO: describe alternatives, e.g.: MetaCentrum / Cesnet cluster (all MFF students can use it), Amazon EC2, Microsoft Azure (some colleagues may have sometime free vouchers). |
| |
| **TODO: IN 2022 MOVING FROM SGE TO SLURM** (see [[slurm|slurm guidelines]]) -- **commands like ''qsub'' and ''qstat'' will stop working!** |
| |
| **IN 2024: Newly, all the documentation is at a dedicated wiki https://ufal.mff.cuni.cz/lrc (you need to use ufal and [[internal:welcome-at-ufal#small-linguistic-password|small-linguistic password]] to access the wiki from outside of the UFAL network).*** |
| |
===== List of Machines ===== | ===== List of Machines ===== |
| |
^ Name ^ CPU type and flags ^ GHz ^cores ^RAM(GB)^ note ^ | ^ Name ^ CPU type and flags ^ GHz ^cores ^RAM(GB)^ note ^ |
| andromeda[1-13] | AMD Opteron | 2.8 | 7 | 30 | | | |
| lucifer[1-10] | Intel(R) Xeon(R) CPU E5620 | 2.4 | 15 | 122 | | | |
| hydra[1-4] | AMD Opteron SSE4 AVX | 2.6 | 15 | 122 | AVX enabled | | | hydra[1-4] | AMD Opteron SSE4 AVX | 2.6 | 15 | 122 | AVX enabled | |
| orion[1-8] | Intel(R) Xeon(R) CPU E5-2630 v4 | 2.2 | 39 | 122 | AVX enabled | | | orion[1-8] | Intel(R) Xeon(R) CPU E5-2630 v4 | 2.2 | 39 | 122 | AVX enabled | |
| cosmos | Intel Xeon | 2.9 | 7 | 249 | | | |
| belzebub | Intel Xeon SSE4 AVX | 2.9 | 31 | 249 | AVX enabled | | | belzebub | Intel Xeon SSE4 AVX | 2.9 | 31 | 249 | AVX enabled | |
| iridium | Intel Xeon SSE4 | 1.9 | 15 | 501 | | | | iridium | Intel Xeon SSE4 | 1.9 | 15 | 501 | | |
| |
Machines from old cluster (do not use!): | |
| |
^ Name ^ CPU type and flags ^ GHz ^cores ^RAM(GB)^ note ^ | |
| fireball[1-10] | Intel Xeon | 3.0 | 4 | 32 | removed | | |
| hyperion[1-9] | Intel Xeon | 3.0 | 4 | 32 | removed | | |
| tauri[1-10] | Intel Xeon | 3.0 | 4 | 32 | removed | | |
| twister[1,2] | Intel Xeon SSE4 | 2.4 | 8 | 48 | moved to GPU cluster| | |
| |
<html><!-- | <html><!-- |
=== Submit hosts / test machines === | === Submit hosts / test machines === |
^ Name ^ CPU type ^ GHz ^cores ^ RAM(GB) ^ note ^ | ^ Name ^ CPU type ^ GHz ^cores ^ RAM(GB) ^ note ^ |
| sol[1-10] | Intel(R) Xeon(R) CPU E5345 | 2.3 | 7 | 31 | you can ssh here and compute or submit jobs | | | sol[1-8] | Intel(R) Xeon(R) CPU E5-2630 v3 | 2.4 | 7 | 28 | you can ssh here and compute or submit jobs | |
| lrc[12] | Intel(R) Xeon(R) CPU E5-2630 v4 | 2.2 | 4 | 4 | you can submit jobs here or monitor job execution - NO COMPUTATION IS ALLOWED HERE !!! | | | lrc[12] | Intel(R) Xeon(R) CPU E5-2630 v4 | 2.2 | 4 | 4 | you can submit jobs here or monitor job execution - NO COMPUTATION IS ALLOWED HERE !!! | |
| |
* **act_mem_free** (or amf) is a ÚFAL-specific option, which specifies the real amount of free memory (at the time of scheduling). You can specify it when submitting a job and it will be scheduled to a machine with at least this amount of memory free. In an ideal world, where no jobs are exceeding their ''mem_free'' requirements, we would not need this options. However, in real world it is recommended to use this option with the same value as ''mem_free'' to protect your job from failing with out-of-memory error (because of naughty jobs of other users). | * **act_mem_free** (or amf) is a ÚFAL-specific option, which specifies the real amount of free memory (at the time of scheduling). You can specify it when submitting a job and it will be scheduled to a machine with at least this amount of memory free. In an ideal world, where no jobs are exceeding their ''mem_free'' requirements, we would not need this options. However, in real world it is recommended to use this option with the same value as ''mem_free'' to protect your job from failing with out-of-memory error (because of naughty jobs of other users). |
* **h_vmem** is equivalent to setting ''ulimit -v'', i.e. it is a hard limit on the size of virtual memory (see RLIMIT_AS in ''man setrlimit''). If your job exceeds this limit, memory allocation fails (i.e., malloc or mmap will return NULL), and your job will probably crash on SIGSEGV. TODO: according to ''man queue_conf'', the job is killed with SIGKILL, not with SIGSEGV. Note that ''h_vmem'' specifies the maximal size of **allocated_memory, not used_memory**, in other words it is the VIRT column in ''top'', not the RES column. SGE does not use this parameter in any other way. Notably, job scheduling is not affected by this parameter and therefore there is no guarantee that there will be this amount of memory on the chosen machine. The problem is that some programs (e.g. Java with the default setting) allocate much more (virtual) memory than they actually use in the end. If we want to be ultra conservative, we should set ''h_vmem'' to the same value as ''mem_free''. If we want to be only moderately conservative, we should specify something like h_vmem=1.5*mem_free, because some jobs will not use the whole mem_free requested, but still our job will be killed if it allocated much more than declared. The default effectively means that your job has no limits. | * **h_vmem** is equivalent to setting ''ulimit -v'', i.e. it is a hard limit on the size of virtual memory (see RLIMIT_AS in ''man setrlimit''). If your job exceeds this limit, memory allocation fails (i.e., malloc or mmap will return NULL), and your job will probably crash on SIGSEGV. TODO: according to ''man queue_conf'', the job is killed with SIGKILL, not with SIGSEGV. Note that ''h_vmem'' specifies the maximal size of **allocated_memory, not used_memory**, in other words it is the VIRT column in ''top'', not the RES column. SGE does not use this parameter in any other way. Notably, job scheduling is not affected by this parameter and therefore there is no guarantee that there will be this amount of memory on the chosen machine. The problem is that some programs (e.g. Java with the default setting) allocate much more (virtual) memory than they actually use in the end. If we want to be ultra conservative, we should set ''h_vmem'' to the same value as ''mem_free''. If we want to be only moderately conservative, we should specify something like h_vmem=1.5*mem_free, because some jobs will not use the whole mem_free requested, but still our job will be killed if it allocated much more than declared. The default effectively means that your job has no limits. |
| * For GPU jobs, it is usually better to use **h_data** instead of **h_vmem**. CUDA driver allocates a lot of "unused" virtual memory (tens of GB per card), which is counted in ''h_vmem'', but not in ''h_data''. All usual allocations (''malloc'', ''new'', Python allocations) seem to be included in ''h_data''. |
* It is recommended to **profile your task first** (see [[#profiling]] below), so you can estimate reasonable memory requirements before submitting many jobs with the same task (varying in parameters which do not affect memory consumption). So for the first time, declare mem_free with much more memory than expected and ssh to a given machine and check ''htop'' (sum all processes of your job) or (if the job is done quickly) check the epilog. When running other jobs of this type, set ''mem_free'' (and ''act_mem_free'' and ''h_vmem'') so you are not wasting resources, but still have some reserve. | * It is recommended to **profile your task first** (see [[#profiling]] below), so you can estimate reasonable memory requirements before submitting many jobs with the same task (varying in parameters which do not affect memory consumption). So for the first time, declare mem_free with much more memory than expected and ssh to a given machine and check ''htop'' (sum all processes of your job) or (if the job is done quickly) check the epilog. When running other jobs of this type, set ''mem_free'' (and ''act_mem_free'' and ''h_vmem'') so you are not wasting resources, but still have some reserve. |
* **s_vmem** is similar to ''h_vmem'', but instead of SIGSEGV/SIGKILL, the job is sent a SIGXCPU signal which can be caught by the job and exit gracefully before it is killed. So if you need it, set ''s_vmem'' to a lower value than ''h_vmem'' and implement SIGXCPU handling and cleanup. | * **s_vmem** is similar to ''h_vmem'', but instead of SIGSEGV/SIGKILL, the job is sent a SIGXCPU signal which can be caught by the job and exit gracefully before it is killed. So if you need it, set ''s_vmem'' to a lower value than ''h_vmem'' and implement SIGXCPU handling and cleanup. |
===== Advanced usage ===== | ===== Advanced usage ===== |
| |
''qsub **-q** troja-all.q'' | ''qsub **-q** cpu-troja.q'' |
This way your job is submitted to the Troja queue. The default is ''ms-all.q''. You can also use e.g. | This way your job is submitted to the Troja queue. The default is ''cpu-*.q''. You can also use e.g. |
''-q '(troja*|ms*)''' to submit on any machine in those two queues (but **don't use ''-q '*'''** as this includes also [[:gpu|gpu.q]]), | ''-q '(cpu-t*|cpu-m*)''' to submit on any machine in those two queues (but **don't use ''-q '*'''** as this includes also [[:gpu|gpu.q]]), |
''-q '*@hector[14]''' to submit on hector1 or hector4, | ''-q '*@hector[14]''' to submit on hector1 or hector4, |
''-q '[tm]*@!(hector*|iridium)''' to submit on any troja/ms machine except hectors and iridium. | ''-q 'cpu-*@!(hector*|iridium)''' to submit on any troja/ms machine except hectors and iridium. |
However, usually you should specify just the queue (troja-all.q vs. ms-all.q), not a particular machine, and instead use ''-l'' to specify the needed resources in a general way. | However, usually you should specify just the queue (cpu-troja.q vs. cpu-ms.q), not a particular machine, and instead use ''-l'' to specify the needed resources in a general way. |
| |
''qsub **-l** ...'' | ''qsub **-l** ...'' |
| |
''qsub **-b** y'' | ''qsub **-b** y'' |
Treat ''script.sh'' (or whatever is the name of the command you execute) as a binary, i.e. don't search for [[#in-script options]] within the file, don't transfer it to the qmaster and then to the execution node. This makes the execution a bit faster and it may prevent some rare but hard-to-detect errors caused SGE interpreting the script. The script must be available on the execution node via NFS, Lustre (which is our case), etc. With ''-b y'' (shortcut for ''-b yes''), ''script.sh'' can be a script or a binary. With ''-b n'' (which is the default for ''qsub''), ''script.sh'' must be a script (text file). | Treat ''script.sh'' (or whatever is the name of the command you execute) as a binary, i.e. don't search for [[#in-script options]] within the file, don't transfer it to the qmaster and then to the execution node. This makes the execution a bit faster and it may prevent some rare but hard-to-detect errors caused SGE interpreting the script. The script must be available on the execution node via NFS, Lustre (which is our case), etc. With ''-b y'' (shortcut for ''-b yes''), ''script.sh'' can be an executable script or a binary (and you must provide full path, e.g. ''./script.sh''). With ''-b n'' (which is the default for ''qsub''), ''script.sh'' must be a script (text file). |
| |
''qsub **-M** popel@ufal.mff.cuni.cz,rosa@ufal.mff.cuni.cz **-m** beas'' | ''qsub **-M** popel@ufal.mff.cuni.cz,rosa@ufal.mff.cuni.cz **-m** beas'' |
You can change some properties of already submitted jobs (both waiting in the queue and running). Changeable properties are listed in ''man qsub''. | You can change some properties of already submitted jobs (both waiting in the queue and running). Changeable properties are listed in ''man qsub''. |
| |
''**man** qsub qstat qalter qhold queue_conf sge_types complex'' | ''[[https://gridscheduler.sourceforge.net/htmlman/htmlman1/qsub.html|man qsub]] qstat qalter qhold queue_conf sge_types complex'' |
Find out all the gory details which are missing here. You'll have to do it one day anyway:-). | Find out all the gory details which are missing here. You'll have to do it one day anyway:-). |
| |
* ''cat /opt/LRC/REPORTER/LRC-UFAL/stats/userlist.weight'' -- all users sorted according to their activity (number of submitted jobs × their average duration), updated each night | * ''cat /opt/LRC/REPORTER/LRC-UFAL/stats/userlist.weight'' -- all users sorted according to their activity (number of submitted jobs × their average duration), updated each night |
| |
* [[http://ufaladm2/munin/ufal.hide.ms.mff.cuni.cz/lrc-headnode.ufal.hide.ms.mff.cuni.cz/index.html|Munin: graph of cluster usage by day and user]] and [[http://ufaladm2/munin/ufal.hide.ms.mff.cuni.cz/apophis.ufal.hide.ms.mff.cuni.cz/index.html|Munin monitoring of Apophis disk server]] (both accessible only from ÚFAL network) | * [[https://ufaladm2.ufal.hide.ms.mff.cuni.cz/munin/ufal.hide.ms.mff.cuni.cz/lrc-master.ufal.hide.ms.mff.cuni.cz/index.html|Munin: graph of cluster usage by day and user]] and [[https://ufaladm2.ufal.hide.ms.mff.cuni.cz/munin/ufal.hide.ms.mff.cuni.cz/nfs-core.ufal.hide.ms.mff.cuni.cz/index.html|Munin monitoring of disk storage]] (both accessible only from ÚFAL network) |
| |
===== Profiling ===== | ===== Profiling ===== |
===== Other ===== | ===== Other ===== |
* There is a **great course [[http://ufal.mff.cuni.cz/courses/npfl102|Data intensive computing]]**, see the 2016 handouts if you missed the course. It covers the usage of [[http://spark.apache.org/|Spark]] (MapReduce/Hadoop alternative, but better) and HDFS (Hadoop filesystem). | * There is a **great course [[http://ufal.mff.cuni.cz/courses/npfl102|Data intensive computing]]**, see the 2016 handouts if you missed the course. It covers the usage of [[http://spark.apache.org/|Spark]] (MapReduce/Hadoop alternative, but better) and HDFS (Hadoop filesystem). |
* This course had used a special **DLRC (Demo LRC) cluster** (students had to login with ''ssh -p 11422 ufallab.ms.mff.cuni.cz'' and special NPFL102-only LDAP logins) with six virtual machines on one physical. During the years when NPFL102 is not taught (e.g. 2017), the DLRC cluster has just one virtual machine. | * **Note:** some hadoop basics and a lot of NoSQL technologies are covered by [[https://is.cuni.cz/studium/predmety/index.php?do=predmet&kod=NDBI040|Big Data Management and NoSQL Databases]] |
* **Note:** soma hadoop basics and a lot of NoSQL technologies are covered by [[https://is.cuni.cz/studium/predmety/index.php?do=predmet&kod=NDBI040|Big Data Management and NoSQL Databases]] | * There is a special cluster for Mgr (and Bc) students (but not for PhD and UFAL members): http://aic.ufal.mff.cuni.cz/ |
* You can use environment variables ''$JOB_ID'', ''$JOB_NAME''. | * You can use environment variables ''$JOB_ID'', ''$JOB_NAME''. |
* One job can submit other jobs (but be careful with recursive:-)). A job submitted to the CPU cluster may submit GPU jobs (to the ''qpu.q'' queue). | * One job can submit other jobs (but be careful with recursive:-)). A job submitted to the CPU cluster may submit GPU jobs (to the ''qpu.q'' queue). |
* It is important, that the files that are sourced during a login such as .bash_profile, .profile, .bashrc, .login etc. don't produce any output when a non-interactive login is done. If they do, changes are that your job will run, but that the batch system is unable to deliver to you the standard output and error files. In that case the status of your job will be 'E' after the job is finished. Here is an example how you can test in a .bash_profile or .bashrc if this is an interactive login: | * It is important, that the files that are sourced during a login such as .bash_profile, .profile, .bashrc, .login etc. don't produce any output when a non-interactive login is done. If they do, chances are that your job will run, but that the batch system is unable to deliver to you the standard output and error files. In that case the status of your job will be 'E' after the job is finished. Here is an example how you can test in a .bash_profile or .bashrc if this is an interactive login: |
<code> | <code> |
unset INTERACTIVE | unset INTERACTIVE |