techstaff:slurm
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revisionNext revisionBoth sides next revision | ||
techstaff:slurm [2018/05/03 09:53] – [Using the GPU] kauffman | techstaff:slurm [2018/11/21 11:31] – [$CUDA_VISIBLE_DEVICES] kauffman | ||
---|---|---|---|
Line 98: | Line 98: | ||
| **debug** | The partition your job will be submitted to if none is specified. The purpose of this partition is to make sure your code is running as it should before submitting a long running job to the general queue. | | | **debug** | The partition your job will be submitted to if none is specified. The purpose of this partition is to make sure your code is running as it should before submitting a long running job to the general queue. | | ||
| **general** | All jobs that have been thoroughly tested can be submitted here. This partition will have access to more nodes and will process most of the jobs. If you need to use the '' | | **general** | All jobs that have been thoroughly tested can be submitted here. This partition will have access to more nodes and will process most of the jobs. If you need to use the '' | ||
- | | **gpu** | Contains servers with graphics cards. As of May 2016 there is only one node containing a Tesla M2090. You will be forced to use this server exclusively for now. Please keep your time in interactive mode to a minimum.| | + | | **pascal** | 2018-05-04: 1x Nvidia GTX1080. You will be forced to use this server exclusively for now. Please keep your time in interactive mode to a minimum.| |
+ | | **titan** | 2018-05-04: 4x Nvidia GTX1080Ti. This partition is shared and you MUST use the '' | ||
====== Job Submission ====== | ====== Job Submission ====== | ||
Line 111: | Line 112: | ||
| ^ SLURM ^ Example ^ | | ^ SLURM ^ Example ^ | ||
^ Submit a batch serial job | sbatch | sbatch runscript.sh | | ^ Submit a batch serial job | sbatch | sbatch runscript.sh | | ||
- | ^ Run a script | + | ^ Run a script |
^ Kill a job | scancel | scancel 4585 | | ^ Kill a job | scancel | scancel 4585 | | ||
^ View status of queues | squeue | squeue -u cnetid | | ^ View status of queues | squeue | squeue -u cnetid | | ||
Line 245: | Line 246: | ||
====== Using the GPU ====== | ====== Using the GPU ====== | ||
+ | |||
+ | ===== CUDA_VISIBLE_DEVICES ===== | ||
+ | Do not set this variable. It will be set for you by SLURM. | ||
+ | |||
+ | The variable name is actually misleading; since it does NOT mean the amount of devices, but rather the physical device number assigned by the kernel (e.g. / | ||
+ | |||
+ | For example: If you requested multiple gpu's from SLURM (--gres=gpu: | ||
+ | |||
===== GRES Multiple GPU's on one system ===== | ===== GRES Multiple GPU's on one system ===== | ||
- | Jobs will not be allocated any generic resources unless specifically requested at job submit time using the --gres option supported by the salloc, sbatch and srun commands. The option requires an argument specifying which generic resources are required and how many resources. The resource specification is of the form name[: | + | GRES: Generic Resource. As of 2018-05-04 these only include GPU' |
- | sbatch --gres=gpu:kepler:2 .... | + | |
+ | Jobs will not be allocated any generic resources unless specifically requested at job submit time using the '' | ||
+ | < | ||
Jobs will be allocated specific generic resources as needed to satisfy the request. If the job is suspended, those resources do not become available for use by other jobs. | Jobs will be allocated specific generic resources as needed to satisfy the request. If the job is suspended, those resources do not become available for use by other jobs. | ||
- | Job steps can be allocated generic resources from those allocated to the job using the --gres option with the srun command as described above. By default, a job step will be allocated all of the generic resources allocated to the job. If desired, the job step may explicitly specify a different generic resource count than the job. This design choice was based upon a scenario where each job executes many job steps. If job steps were granted access to all generic resources by default, some job steps would need to explicitly specify zero generic resource counts, which we considered more confusing. The job step can be allocated specific generic resources and those resources will not be available to other job steps. A simple example is shown below. | + | Job steps can be allocated generic resources from those allocated to the job using the '' |
+ | |||
+ | ==== Ok, but I don't want to read the wall of text above ==== | ||
+ | Fine. | ||
+ | |||
+ | The '' | ||
+ | |||
+ | < | ||
+ | --gpu=gpu: | ||
+ | # Please try to limit yourself to one GPU per person. | ||
+ | </ | ||
+ | |||
+ | Example when using tensorflow: | ||
+ | |||
+ | Given the file '' | ||
+ | < | ||
+ | # | ||
+ | from tensorflow.python.client import device_lib | ||
+ | print(device_lib.list_local_devices()) | ||
+ | </ | ||
+ | |||
+ | Here we can see that no GPU was allocated to us because we did not specify the '' | ||
+ | < | ||
+ | user@bulldozer: | ||
+ | user@gpu3: | ||
+ | user@gpu3: | ||
+ | </ | ||
+ | |||
+ | If we request only 1 GPU. | ||
+ | < | ||
+ | user@bulldozer: | ||
+ | user@gpu3: | ||
+ | physical_device_desc: | ||
+ | </ | ||
+ | |||
+ | If we request 2 GPUs. | ||
+ | < | ||
+ | user@bulldozer: | ||
+ | user@gpu3: | ||
+ | physical_device_desc: | ||
+ | physical_device_desc: | ||
+ | </ | ||
+ | |||
+ | If we request more GPUs then are available. | ||
+ | < | ||
+ | kauffman3@bulldozer: | ||
+ | srun: error: Unable to allocate resources: Requested node configuration is not available | ||
+ | </ | ||
+ | |||
+ | ==== Cool, but how do I know where and what resources are available ==== | ||
+ | Turns out the '' | ||
+ | < | ||
+ | $ sinfo -O partition, | ||
+ | PARTITION | ||
+ | debug* | ||
+ | general | ||
+ | pascal | ||
+ | titan | ||
+ | </ | ||
+ | |||
+ | FEATURES: Is actually just an arbitrary string in the configuration file that defines a node. However, techstaff hopes it actually provides some useful info. | ||
+ | |||
+ | GRES: Don't depend on this being accurate, however it will definitely give you a clue as to how many generic resources are in a partition. | ||
+ | |||
+ | |||
+ | ==== Checking how many Generic RESources are being consumed ==== | ||
+ | |||
+ | Simple use the '' | ||
+ | < | ||
+ | $ squeue -O username, | ||
+ | USER NODELIST | ||
+ | someusername | ||
+ | otherusername | ||
+ | ... | ||
+ | </ | ||
===== Paths ===== | ===== Paths ===== | ||
- | You will need to add the following to your $PATH and $LD_LIBRARY_PATH. | + | You will need to add the following to your '' |
export PATH=$PATH:/ | export PATH=$PATH:/ |
/var/lib/dokuwiki/data/pages/techstaff/slurm.txt · Last modified: 2021/01/06 16:13 by kauffman