我在 slurm 中用 sbatch 运行了很多工作,如下所示:
#!/usr/bin/env python
#SBATCH --job-name=Python
#SBATCH --array=1-200
#SBATCH --mem=4000
#SBATCH --time=0-18:20
#SBATCH --mail-type=ALL
#SBATCH --mail-user=my_mail@yahoo.com
Run Code Online (Sandbox Code Playgroud)
然而,似乎正在发生的事情是 slurm 正在向我发送每个阵列的电子邮件。但是,我不希望 slurm 这样做,我只希望当所有 slurm 阵列完成(或失败)运行时向我发送一封电子邮件。即当特定作业(及其所有作业数组完成)时。这可以在泥浆中做到吗?
我正在阅读文档,它在下面说明了以下内容--mail-type=<type>:
除非指定 ARRAY_TASKS 选项,否则作业 BEGIN、END 和 FAIL 上的邮件通知将应用于整个作业数组,而不是为作业数组中的每个任务生成单独的电子邮件消息。
所以问题可能是我正在使用ALL而不是BEGIN, ENDor FAIL?老实说,我只是感兴趣当所有作业数组都完成运行时,即使单个作业数组失败也没关系。
bash/slurm 中有没有办法让脚本知道它正在哪个节点上运行?
所以我分批了一个名为wrapCode.sh的bash脚本,并且我正在监视脚本时间以及它正在哪个节点上运行。我知道如何监控脚本时间,但是有没有办法在最后回显我所在的节点?
sstat 做到了这一点,但我需要知道我的工作 ID 是什么,脚本似乎也不知道(或者至少我无法找到它)。
我知道如何使用 cgroups(分配内存、CPU 使用情况...)和 slurm(提交、暂停/停止作业)。我想知道 cgroups 如何与 slurm 一起工作。当我向 slurm 提交作业时,在哪里可以修复内存或 CPU 使用情况?我阅读了 Slurm Schedmd( https://slurm.schedmd.com/cgroups.html )的文档,但它没有给出很好的解释。也许这是我的一个误会。谁能解释如何在 slurm 中使用 cgroup 为作业分配一些资源?提前致谢。
假设我正在使用命令行参数运行 SLURM 作业,比方说srun sleep 1000. squeue并scontrol show job ID显示执行的命令sleep,但不显示其参数1000。
我的问题是,如何1000从作业 ID 获取传递给 SLURM 作业命令(在本示例中)的参数?
我正在使用 slurm 17.02.3。
使用 PBS 调度程序可以通过以下方式启动没有脚本的批处理命令:
qsub -l select=1:ncpus=12:mem=112GB -l walltime=00:30:00 -- /usr/bin/bash -c "mpirun -np 12 sleep 10"
是否可以在 Slurm 中使用 sbatch 来实现?
我正在向 SLURM 队列提交多个作业。每个作业使用 1 个 GPU。每个节点有 4 个 GPU。然而,一旦作业运行,它就会占用整个节点,留下 3 个 GPU 空闲。有什么方法可以避免这种情况,以便我可以将多个作业发送到一个节点,每个作业使用一个 GPU?
我的脚本如下所示:
#SLURM --gres=gpu:1
#SLURM --ntasks-per-node 1
#SLURM -p ghp-queue
myprog.exe
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 SLURM 在集群上执行套接字编程代码进行节点分配。我使用 slurm 脚本如下:
#!/bin/bash
#SBATCH --job-name="abcd"
#SBATCH --ntasks=2
#SBATCH --nodes=2-2
#SBATCH --cpus-per-task=128
#SBATCH --partition=knl
./a.out
Run Code Online (Sandbox Code Playgroud)
当将此脚本作为 sbatch 脚本运行时,我收到错误“sbatch:错误:批处理作业提交失败:请求的节点配置不可用”。
但是,我确实看到一些节点满足上述配置。两个节点的 scontrol 输出如下所示:
NodeName=compute140 Arch=x86_64 CoresPerSocket=64
CPUAlloc=20 CPUErr=0 CPUTot=256 CPULoad=20.01
AvailableFeatures=knl
ActiveFeatures=knl
Gres=(null)
NodeAddr=compute140 NodeHostName=compute140 Version=16.05
OS=Linux RealMemory=96000 AllocMem=81920 FreeMem=102580 Sockets=1 Boards=1
MemSpecLimit=1024
State=MIXED ThreadsPerCore=4 TmpDisk=0 Weight=1 Owner=N/A MCS_label=N/A
BootTime=2018-06-04T12:41:22 SlurmdStartTime=2018-06-04T12:47:01
CapWatts=n/a
CurrentWatts=0 LowestJoules=0 ConsumedJoules=0
ExtSensorsJoules=n/s ExtSensorsWatts=0 ExtSensorsTemp=n/s
NodeName=compute141 Arch=x86_64 CoresPerSocket=64
CPUAlloc=20 CPUErr=0 CPUTot=256 CPULoad=20.01
AvailableFeatures=knl
ActiveFeatures=knl
Gres=(null)
NodeAddr=compute141 NodeHostName=compute141 Version=16.05
OS=Linux RealMemory=96000 AllocMem=81920 FreeMem=87441 Sockets=1 Boards=1
MemSpecLimit=1024
State=MIXED ThreadsPerCore=4 …Run Code Online (Sandbox Code Playgroud) 我想使用多重处理来运行一个简单的任务(我认为这与在 matlab 中使用 parfor 相同,正确吗?)
例如:
from multiprocessing import Pool
def func_sq(i):
fig=plt.plot(x[i,:]) #x is a ready-to-use large ndarray, just want
fig.save(....) #to plot each column on a separate figure
pool = Pool()
pool.map(func_sq,[1,2,3,4,5,6,7,8])
Run Code Online (Sandbox Code Playgroud)
但我很困惑如何使用 slurm 提交我的工作。我一直在寻找答案,但找不到好的答案。目前,虽然不使用多处理,但我正在使用 slurm 作业 sumit 文件,如下所示:(名为 test1.sh)
#!/bin/bash
#SBATCH -N 1
#SBATCH -n 1
#SBATCH -p batch
#SBATCH --exclusive
module load anaconda3
source activate py36
srun python test1.py
Run Code Online (Sandbox Code Playgroud)
然后,我在提示窗口中输入 sbatch test1.sh。
那么如果我想使用多处理,我应该如何修改我的sh文件?我自己尝试过,但似乎只需将 -n 更改为 16 和 Pool(16) 就会使我的工作重复 16 次。
或者,如果多重处理不合适,是否有办法最大化我的性能(我听说过多重威胁,但不知道它到底是如何工作的)
我该如何有效地利用我的记忆力才不会被压垮?(我的x矩阵很大)
对于 GPU …
我最初的问题是如何在集群上运行 CVX 工具箱(具有学术许可证)。我无法找到直接的方法来做到这一点,所以我决定以不同的方式解决这个问题。
CVX 许可证依赖于硬件,每个学术许可证与 4 个硬件绑定。我想将其中一个节点(可能是两个)添加到许可证列表中。为此,我需要始终在相同的硬件或节点上运行 CVX(我知道这可能不是一种有效的方法)。有什么办法可以做到吗?
我最近在看这篇关于vs的文章和这篇关于vs的文章,但我想知道与 slurm 和.mpirunmpiexecsrunsbatchmpirunsrun
通常在我看到的示例中,文件被发送到其中sbatch以srun <program>执行 MPI 程序,但我有时会看到使用mpirun或mpiexec代替的文件。然而,我不明白为什么有人要这样做。正如我最近问的另一个问题所示,它似乎使用mpirun或mpiexec可能产生各种(依赖于实现?)的错误,并且没有理由不使用srun.
这是否准确,或者您是否有充分的理由想要使用mpirun或mpiexec而不是srun在 slurm 管理的集群上执行程序?