我有几千个工作要在一个有16个节点的slurm集群上运行.这些作业应仅在大小为7的可用节点的子集上运行.某些任务是并行化的,因此使用单个节点的所有CPU功率,而其他任务是单线程的.因此,多个作业应该在单个节点上同时运行.任何任务都不应该在多个节点上产生.
目前我提交的每个职位都包括:
sbatch --nodelist=myCluster[10-16] myScript.sh
Run Code Online (Sandbox Code Playgroud)
但是这个参数让slurm等到提交的作业终止,因此完全不使用3个节点,并且根据任务(多线程或单线程),当前活动节点在CPU能力方面也可能处于低负载状态.
sbatch在指定节点上同时运行多个作业的强制slurm 的最佳参数是什么?
我可以访问计算集群,特别是一个带有两个12核CPU的节点,它与Slurm Workload Manager一起运行.
我想在该系统上运行TensorFlow,但遗憾的是我无法找到有关如何执行此操作的信息,或者甚至是否可能.我是新手,但据我所知,我必须通过创建Slurm作业来运行TensorFlow,并且不能通过ssh直接执行python/tensorflow.
有没有人有关于这个主题的想法,教程或任何类型的来源?
我正在尝试从另一个文件中获取值,并在SLURM提交脚本中使用它.但是,我得到的错误是该值是非数字的,换句话说,它没有被解除引用.
这是脚本:
#!/bin/bash
# This reads out the number of procs based on the decomposeParDict
numProcs=`awk '/numberOfSubdomains/ {print $2}' ./meshModel/decomposeParDict`
echo "NumProcs = $numProcs"
#SBATCH --job-name=SnappyHexMesh
#SBATCH --output=./logs/SnappyHexMesh.log
#
#SBATCH --ntasks=`$numProcs`
#SBATCH --time=240:00
#SBATCH --mem-per-cpu=4000
#First run blockMesh
blockMesh
#Now decompose the mesh
decomposePar
#Now run snappy in parallel
mpirun -np $numProcs snappyHexMesh -parallel -overwrite
Run Code Online (Sandbox Code Playgroud)
当我将其作为普通的Bash shell脚本运行时,它会正确打印出proc的数量并进行正确的mpirun调用.因此,该awk命令正确地解析了proc的数量,并且按预期解除引用变量.
但是,当我使用以下内容将其提交给SLURM时:
sbatch myScript.sh
Run Code Online (Sandbox Code Playgroud)
我收到错误:
sbatch: error: Invalid numeric value "`$numProcs`" for number of tasks.
Run Code Online (Sandbox Code Playgroud)
有人能帮忙吗?
我正在使用一个集群(类似于 slurm 但使用condor),我想使用 VS 代码(特别是它的调试器)运行我的代码,它是远程同步扩展。
我尝试在 VS 代码中使用我的调试器运行它,但它并没有像预期的那样工作。
首先,我像往常一样使用 VS 代码和远程同步登录到集群,效果很好。然后我继续使用以下命令获取交互式作业:
condor_submit -i request_cpus=4 request_gpus=1
Run Code Online (Sandbox Code Playgroud)
然后成功地提供了一个节点/gpu 来使用。
一旦我尝试运行调试器,但它以某种方式将我从远程会话中注销(看起来它从打印语句转到头节点)。那不是我想要的。我想在我分配的节点/gpu 的交互式会话中运行我的工作。为什么 VS 代码在错误的地方运行它?我怎样才能在正确的地方运行它?
集成终端的一些输出:
source /home/miranda9/miniconda3/envs/automl-meta-learning/bin/activate
/home/miranda9/miniconda3/envs/automl-meta-learning/bin/python /home/miranda9/.vscode-server/extensions/ms-python.python-2020.2.60897-dev/pythonFiles/lib/python/new_ptvsd/wheels/ptvsd/launcher /home/miranda9/automl-meta-learning/automl/automl/meta_optimizers/differentiable_SGD.py
conda activate base
(automl-meta-learning) miranda9~/automl-meta-learning $ source /home/miranda9/miniconda3/envs/automl-meta-learning/bin/activate
(automl-meta-learning) miranda9~/automl-meta-learning $ /home/miranda9/miniconda3/envs/automl-meta-learning/bin/python /home/miranda9/.vscode-server/extensions/ms-python.python-2020.2.60897-dev/pythonFiles/lib/python/new_ptvsd/wheels/ptvsd/launcher /home/miranda9/automl-meta-learning/automl/automl/meta_optimizers/differentiable_SGD.py
--> main in differentiable SGD
hello world torch_utils!
vision-sched.cs.illinois.edu
Files already downloaded and verified
Files already downloaded and verified
Files already downloaded and verified
-> initialization of DiMO done!
---> i = 0, …Run Code Online (Sandbox Code Playgroud) Slurm 中有两种分配 GPU 的方式:要么是通用--gres=gpu:N参数,要么是特定参数,如--gpus-per-task=N. 还有两种方法可以在批处理脚本中启动 MPI 任务:使用srun或使用通常的方法mpirun(当 OpenMPI 是使用 Slurm 支持进行编译时)。我发现这些方法之间的行为存在一些令人惊讶的差异。
我正在提交一个批处理作业,其中sbatch基本脚本如下:
#!/bin/bash
#SBATCH --job-name=sim_1 # job name (default is the name of this file)
#SBATCH --output=log.%x.job_%j # file name for stdout/stderr (%x will be replaced with the job name, %j with the jobid)
#SBATCH --time=1:00:00 # maximum wall time allocated for the job (D-H:MM:SS)
#SBATCH --partition=gpXY # put the job into the gpu partition
#SBATCH --exclusive # request exclusive …Run Code Online (Sandbox Code Playgroud) 我正在使用由slurm管理的集群来运行一些纱线/ hadoop基准测试.为此,我在slurm分配的节点上启动hadoop服务器,然后在它们上运行基准测试.我意识到这不是运行生产hadoop集群的预期方式,但需要必须.
为此,我开始编写一个用srun运行的脚本,例如srun -N 4 setup.sh.此脚本写入配置文件并在分配的节点上启动服务器,编号最小的机器充当主节点.这一切都有效,我可以运行应用程序.
但是,因为我想启动服务器一次,然后在它们上启动多个应用程序而不重新开始/编码所有内容,我想改为使用salloc.我原以为这是一个运行salloc -N 4然后运行的简单案例srun setup.sh.不幸的是,这不起作用,因为不同的服务器无法相互通信.能满足我的任何一个解释的运行环境有什么区别使用之间srun和使用salloc,然后srun?
非常感谢
丹尼尔
我通过SLURM向我们学校的HPC集群提交了几份工作.由于shell脚本都具有相同的名称,因此作业名称显示完全相同.看起来像
[myUserName@rclogin06 ~]$ sacct -u myUserName
JobID JobName Partition Account AllocCPUS State ExitCode
------------ ---------- ---------- ---------- ---------- ---------- --------
12577766 run.sh general ourQueue_+ 4 RUNNING 0:0
12659777 run.sh general ourQueue_+ 8 RUNNING 0:0
12675983 run.sh general ourQueue_+ 16 RUNNING 0:0
Run Code Online (Sandbox Code Playgroud)
如何知道作业的提交目录,以便区分作业?
是否可以扩展SLURM中JobName命令列中使用的字符数sacct?
例如,我目前有:
JobID JobName Elapsed NCPUS NTasks State
------------ ---------- ---------- ---------- -------- ----------
12345 lengthy_na+ 00:00:01 4 1 FAILED
Run Code Online (Sandbox Code Playgroud)
而且我想:
JobID JobName Elapsed NCPUS NTasks State
------------ ---------- ---------- ---------- -------- ----------
12345 lengthy_name 00:00:01 4 1 FAILED
Run Code Online (Sandbox Code Playgroud) 我已将作业提交到 SLURM 队列,该作业已运行并完成。然后我使用sacct命令检查已完成的作业。但是在查看 sacct 命令的结果时,我注意到了我没想到的其他结果:
JobID JobName State NCPUS Timelimit
5297048 test COMPLETED 1 00:10:00
5297048.bat+ batch COMPLETED 1
5297048.ext+ extern COMPLETED 1
Run Code Online (Sandbox Code Playgroud)
谁能解释一下“批处理”和“外部”工作是什么以及它们的目的是什么。为什么即使主要工作失败,外部工作也总是完成。
我试图搜索文档,但没有找到令人满意和完整的答案。
编辑:这是我提交的脚本以产生上述sacct输出:
#!/bin/bash
echo test_script > done.txt
Run Code Online (Sandbox Code Playgroud)
使用以下sbatch命令:
sbatch -A BRIDGE-CORE-SL2-CPU --nodes=1 --ntasks=1 -p skylake --cpus-per-task 1 -J jobname -t 00:10:00 --output=./output.out --error=./error.err < test.sh
Run Code Online (Sandbox Code Playgroud) 我在SLURM集群中工作,并且同时(在多个输入文件上)使用相同的bash脚本运行多个进程。
在工作结束时,该过程被终止,这是我获得的错误。
slurmstepd: error: Detected 1 oom-kill event(s) in step 1090990.batch cgroup.
Run Code Online (Sandbox Code Playgroud)
我的猜测是内存有问题。但是我怎么能知道更多呢?我没有提供足够的内存吗?还是作为用户我要求的权限超出了我的权限?
有什么建议吗?