分配式提交作业:salloc¶
salloc
将获取作业的分配后执行命令,当命令结束后释放分配的资源。其基本语法为:
salloc [options] [<command> [command args]]
command可以是任何是用户想要用的程序,典型的为xterm或包含srun
命令的shell。如果后面没有跟命令,那么将执行Slurm系统slurm.conf配置文件中通过SallocDefaultCommand设定的命令。如果SallocDefaultCommand没有设定,那么将执行用户的默认shell。
注意:salloc
逻辑上包括支持保存和存储终端行设置,并且设计为采用前台方式执行。如果需要后台执行salloc
,可以设定标准输入为某个文件,如:salloc -n 16 a.out </dev/null &
。
salloc主要选项¶
常见主要选项参见提交作业命令共同说明。
salloc主要输入环境变量¶
SALLOC_ACCOUNT
:类似-A, --accountSALLOC_ACCTG_FREQ
:类似--acctg-freqSALLOC_BELL
:类似--bellSALLOC_CLUSTERS
、SLURM_CLUSTERS
:类似--clusters。SALLOC_CONSTRAINT
:类似-C, --constraint。SALLOC_CORE_SPEC
:类似 --core-spec。SALLOC_CPUS_PER_GPU
:类似 --cpus-per-gpu。SALLOC_DEBUG
:类似-v, --verbose。SALLOC_EXCLUSIVE
:类似--exclusive。SALLOC_GEOMETRY
:类似-g, --geometry。SALLOC_GPUS
:类似 -G, --gpus。SALLOC_GPU_BIND
:类似 --gpu-bind。SALLOC_GPU_FREQ
:类似 --gpu-freq。SALLOC_GPUS_PER_NODE
:类似 --gpus-per-node。SALLOC_GPUS_PER_TASK
:类似 --gpus-per-task。SALLOC_GRES
:类似 --gres。SALLOC_GRES_FLAGS
:类似--gres-flags。SALLOC_HINT
、SLURM_HINT
:类似--hint。SALLOC_IMMEDIATE
:类似-I, --immediate。SALLOC_KILL_CMD
:类似-K, --kill-command。SALLOC_MEM_BIND
:类似--mem-bind。SALLOC_MEM_PER_CPU
:类似 --mem-per-cpu。SALLOC_MEM_PER_GPU
:类似 --mem-per-gpuSALLOC_MEM_PER_NODE
:类似 --mem。SALLOC_NETWORK
:类似--network。SALLOC_NO_BELL
:类似--no-bell。SALLOC_OVERCOMMIT
:类似-O, --overcommit。SALLOC_PARTITION
:类似-p, --partition。SALLOC_PROFILE
:类似--profile。SALLOC_QOS
:类似--qos。SALLOC_RESERVATION
:类似--reservation。SALLOC_SIGNAL
:类似--signal。SALLOC_SPREAD_JOB
:类似--spread-job。SALLOC_THREAD_SPEC
:类似--thread-spec。SALLOC_TIMELIMIT
:类似-t, --time。SALLOC_USE_MIN_NODES
:类似--use-min-nodes。SALLOC_WAIT_ALL_NODES
:类似--wait-all-nodes。SLURM_EXIT_ERROR
:错误退出代码。SLURM_EXIT_IMMEDIATE
:当--immediate选项时指定的立即退出代码。
salloc主要输出环境变量¶
SLURM_CLUSTER_NAME
:集群名。SLURM_CPUS_PER_GPU
:每颗GPU分配的CPU数。SLURM_CPUS_PER_TASK
:每个任务分配的CPU数。SLURM_DISTRIBUTION
:类似-m, --distribution。SLURM_GPUS
:需要的GPU颗数,仅提交时有-G, --gpus时。SLURM_GPU_BIND
:指定绑定任务到GPU,仅提交时具有--gpu-bind参数时。SLURM_GPU_FREQ
:需求的GPU频率,仅提交时具有--gpu-freq参数时。SLURM_GPUS_PER_NODE
:需要的每个节点的GPU颗数,仅提交时具有--gpus-per-node参数时。SLURM_GPUS_PER_SOCKET
:需要的每个socket的GPU颗数,仅提交时具有--gpus-per-socket参数时。SLURM_GPUS_PER_TASK
:需要的每个任务的GPU颗数,仅提交时具有--gpus-per-task参数时。SLURM_JOB_ACCOUNT
:账户名。SLURM_JOB_ID
(SLURM_JOBID
为向后兼容):作业号。SLURM_JOB_CPUS_PER_NODE
:分配的每个节点CPU数。SLURM_JOB_NODELIST
(SLURM_NODELIST
为向后兼容):分配的节点名列表。SLURM_JOB_NUM_NODES
(SLURM_NNODES
为向后兼容):作业分配的节点数。SLURM_JOB_PARTITION
:作业使用的队列名。SLURM_JOB_QOS
:作业的QOS。SLURM_JOB_RESERVATION
:预留的作业资源。SLURM_MEM_BIND
:--mem-bind选项设定。SLURM_MEM_BIND_VERBOSE
:如--mem-bind选项包含verbose选项时,则由其设定。SLURM_MEM_BIND_LIST
:内存绑定时设定的bit掩码。SLURM_MEM_BIND_PREFER
:--mem-bin prefer优先权。SLURM_MEM_BIND_TYPE
:由--mem-bind选项设定。SLURM_MEM_PER_CPU
:类似--mem。SLURM_MEM_PER_GPU
:每颗GPU需要的内存,仅提交时有--mem-per-gpu参数时。SLURM_MEM_PER_NODE
:类似--mem。SLURM_SUBMIT_DIR
:运行salloc
时的目录,或提交时由-D, --chdir参数指定。SLURM_SUBMIT_HOST
:运行salloc时的节点名。SLURM_NODE_ALIASES
:分配的节点名、通信地址和主机名,格式类似SLURM_NODE_ALIASES
=ec0:1.2.3.4:foo,ec1:1.2.3.5:bar。SLURM_NTASKS
:类似-n, --ntasks。SLURM_NTASKS_PER_CORE
:--ntasks-per-core选项设定的值。SLURM_NTASKS_PER_NODE
:--ntasks-per-node选项设定的值。SLURM_NTASKS_PER_SOCKET
:--ntasks-per-socket选项设定的值。SLURM_PROFILE
:类似--profile。SLURM_TASKS_PER_NODE
:每个节点的任务数。值以,分隔,并与SLURM_NODELIST
顺序一致。如果连续的节点有相同的任务数,那么数后面跟有“(x#)”,其中“#”是重复次数。如:SLURM_TASKS_PER_NODE =2(x3),1
。
例子¶
申请计算节点资源并远程连接¶
salloc -p cpu -N1 -n6 -q normal -t 2:00:00
则可以在集群 cpu
队列中申请 1 个节点的 6 个核,占用 2 h。
将输出:
salloc: Granted job allocation 369188
salloc: Waiting for resource configuration
salloc: Nodes cu026 are ready for job
随后自动启动一个新的终端,通过 squeue
可以看到在 cu026
节点上创建了一个新的作业任务 369188
:
JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON)
369188 cpu interact ypliucat R 0:50 1 cu026
因此,用户可以通过 ssh cu026
到该节点上交互式地执行相关命令。
当任务结束后,请在打开的 SSH 连接中输入 exit
退出,并主动取消创建的任务,例如:
scancel 369188
以确保不会产生额外的费用。
获取资源以运行并行应用¶
例如想要申请5个节点,每个节点申请1个核,并通过 srun
并行地运行 myprogram
,则:
salloc -p cpu -N5 srun -n5 myprogram