我在一个单一分区拥有不同节点的集群上使用Slurm。具体来说,这些节点有不同数量的CPU。我的代码是用于参数扫描的单核应用程序,因此我想通过发送32个作业来充分利用一个(例如)32个CPU节点。
如何选择具有指定CPU数量的节点(在命名分区内)?
我可以通过以下方式了解我的分区配置:
sinfo -e -p <partition_name> -o "%9P %3c %.5D %6t " -t idle,mix
PARTITION CPU NODES STATE
<partition_name> 16 63 mix
<partition_name> 32 164 mix
但是如果我使用提交脚本,比如
[snip preamble]
#SBATCH --partition <partition_name> # resource to be used
#SBATCH --nodes 1 # Num nodes
#SBATCH -N 1 # Num cores per job
#SBATCH --cores-per-socket=32 # Cores per node
Slurm调度程序表示:
sbatch: error: Socket, core and/or thread specification can not be satisfied
PS. 一个小修正:我获取分区信息的代码并不是最好的。以防后来有人查找此问题,这里提供了一个更好的查询(使用 X、Y 表示套接字和核心计数),可以帮助识别 Damien 的出色答案解决的问题。
sinfo -e -p <partition_name> -o "%9P %3c %.3D %6t %2X %2Y %N" -t idle,mix
for RUN_ID in seq RUN_ID_FIRST RUN_ID_LAST; do matlab -nojvm -singleCompThread -r "try myscript(RUN_ID); catch me; disp(' *** error'); end; exit" > ./result_RUN_ID & done
被发送到一个16核节点,会发生什么? - Mark_Anderson