标签: slurm

SLURM:如何仅在特定节点上运行30个作业?

例如,您需要运行30个srun作业,但确保每个作业都在特定节点列表的节点上运行(具有相同的性能,以便公平地比较时间).你会怎么做?

我尝试了什么:

  • srun --nodelist=machineN[0-3] <some_cmd>:同时<some_cmd>所有节点上运行(我需要的是:在列表中的一个可用节点<some_cmd>上运行)

  • srun -p partition 似乎工作,但需要一个包含精确机器N [0-3]的分区,但情况并非总是如此.

想法?

slurm

7
推荐指数
2
解决办法
6469
查看次数

限制SLURM中正在运行的作业数

我在SLURM排队多个工作.我可以限制slurm中并行运行的作业数量吗?

提前致谢!

slurm

7
推荐指数
3
解决办法
4101
查看次数

在Ubuntu 16.04桌面上安装/模拟SLURM:slurmd无法启动

编辑

我真正想要的是一种模仿SLURM的方法,一种可以安装的交互式和合理用户友好的方式.


原帖

我想用SLURM测试一些最小的例子,我试图用Ubuntu 16.04在本地机器上安装它.我下面最近的SLURM安装指南我能找到的,我得到尽可能"开始slurmdsudo /etc/init.d/slurmd start".

[....] Starting slurmd (via systemctl): slurmd.serviceJob for slurmd.service failed because the control process exited with error code. See "systemctl status slurmd.service" and "journalctl -xe" for details.
 failed!
Run Code Online (Sandbox Code Playgroud)

我不知道如何解释systemctl日志:

? slurmd.service - Slurm node daemon
   Loaded: loaded (/lib/systemd/system/slurmd.service; enabled; vendor preset: enabled)
   Active: failed (Result: exit-code) since Thu 2017-10-26 22:49:27 EDT; 12s ago
  Process: 5951 ExecStart=/usr/sbin/slurmd $SLURMD_OPTIONS (code=exited, status=1/FAILURE)

Oct 26 22:49:27 Haggunenon systemd[1]: Starting Slurm …
Run Code Online (Sandbox Code Playgroud)

ubuntu slurm ubuntu-16.04

7
推荐指数
1
解决办法
4986
查看次数

如何阻止脚本直到 slurm 作业(从 srun 开始)完全完成?

我正在使用 SLURM 运行一个作业数组,其中包含以下作业数组脚本(我使用它运行sbatch job_array_script.sh [args]

#!/bin/bash

#SBATCH ... other options ...

#SBATCH --array=0-1000%200

srun ./job_slurm_script.py $1 $2 $3 $4

echo 'open' > status_file.txt
Run Code Online (Sandbox Code Playgroud)

为了解释一下,我想job_slurm_script.py作为一个数组作业运行 1000 次,最多并行 200 个任务。当所有这些都完成后,我想写 'open' 到status_file.txt. 这是因为实际上我有超过 10,000 个作业,这高于我的集群的 MaxSubmissionLimit,所以我需要将它拆分成更小的块(在 1000 个元素的作业数组中)并一个接一个地运行它们(仅当前一个完成)。

但是,为了使其工作,echo 语句只能在整个作业数组完成后触发(除此之外,我有一个循环来检查status_file.txt作业是否完成,即当内容是字符串“open”时) .

到目前为止,我认为srun将脚本保留到整个作业数组完成。然而,有时srun“返回”并且脚本会在作业完成之前转到 echo 语句,因此所有后续作业都会从集群中反弹,因为它超出了提交限制。

那么如何srun在整个作业数组完成之前“保持”状态?

cluster-computing slurm

6
推荐指数
2
解决办法
1万
查看次数

为数据科学/机器学习任务设置多用户作业调度程序

背景

最近我的实验室投资了 GPU 计算基础设施。更具体地说:两个 TitanV 安装在标准服务器机器上。目前,该机器正在运行一个根本没有配置的 Windows Server。我实验室的每个人都可以登录并做任何他们想做的事情。时不时会发生机器对其他人完全无用的情况,因为有人不小心占用了所有可用内存。

由于机器学习在这里增长。我正在寻找一种更好的方式来利用我们的基础设施。

要求

  • 多用户。博士和学生应该能够完成他们的任务。
  • 作业队列或调度(最好是时间片调度)
  • 资源的动态分配。如果单个任务正在运行,则可以利用整个内存,但是一旦启动第二个任务,它们就应该共享资源。
  • 轻松/远程提交作业:也许是网页?

到目前为止我尝试过的

我有一个小型测试设置(带有 GTX 1070 的消费类 PC)用于实验。我的互联网研究将我指向了 SLURM 和 Kubernetes。

首先,我喜欢集群管理系统的想法,因为它提供了未来扩展基础设施的选项。

SLURM 设置起来相当容易,但我无法设置诸如远程提交或时间片调度之类的东西。

与此同时,我也尝试使用 Kubernetes。对我来说,它提供了更多有趣的功能,尤其是容器化。但是,所有这些功能都使设置和理解变得更加复杂。我再次无法构建像远程提交这样的东西。

我的问题

有没有人遇到过同样的问题,可以报告他/她的解决方案吗?我有一种感觉,Kubernetes 为未来做好了更好的准备。

如果您需要更多信息,请告诉我。

谢谢蒂姆!

gpu cluster-computing slurm kubernetes docker-datacenter

6
推荐指数
1
解决办法
875
查看次数

在调用 slurm sbatch 之前为日志文件创建目录

Slurmsbatch将 stdout 和 stderr 指向由-o-e标志指定的文件,但如果文件路径包含不存在的目录,则无法执行此操作。有没有办法自动为我的日志文件创建目录?

  • 每次手动创建这些目录效率低下,因为我要运行每个 sbatch 提交数十次。
  • 让工作名称的变化存在于文件名而不是目录中会导致大量的、组织不善的日志混乱,当我需要检查我的工作是如何做的时,我必须对其进行排序。

我发现这样做的唯一方法是将我的调用包装到sbatchbash 脚本中,这些脚本比这样一件小事所需的时间长很多倍。我在下面包含了一个缩短的示例。

#!/bin/bash
# Set up and run job array for my_script.py, which takes as positional
# arguments a config file (passed via $1) and an array index.

#SBATCH --array=1-100
#SBATCH -n 1
#SBATCH -t 12:00:00
#SBATCH -p short
#SBATCH -J sim_sumstats
#SBATCH --mem=1600

# Initialize variables used for script control flow
sub_or_main='sub'

# Parse options
while getopts ":A" opt; do
    case $opt …
Run Code Online (Sandbox Code Playgroud)

bash slurm

6
推荐指数
1
解决办法
3017
查看次数

SLURM交互节点上Emacs乱码

当我远程登录SLURM交互节点时,emacs有时会出现乱码。正如我在下面描述的,我认为问题是 SLURM 交互节点弄乱了查询/确认终端信号,并且一些字符被丢弃导致故障。

设置

  • 我实际与之交互的计算机:MacBook Air (10.13.2)
  • 终端:iTerm2 Build 3.1.7
  • ssh 到集群
  • SLURM交互节点(即srun --nodes=1 ... --pty /bin/bash
  • emacs:终端模式下使用的 GNU Emacs 27.1(即emacs -nw

有时,当屏幕重新绘制时,会出现乱码: emacs 屏幕乱码

当有很多窗格或移动大量文本时,这种情况似乎会发生得更多。根据 emacs文档的这一部分,我尝试使用C-l (recenter-top-bottom)重新绘制屏幕,​​这暂时修复了当前的故障。

通过设置$TERM=screen$TERM=xterm-256color在我的.bash-profile我看到不同的配色方案,但故障仍然存在。

请注意,我仅在登录交互式节点时看到故障,而不是从集群上的头节点看到故障。利用日志节点上正常的事实,这可以提供有用的诊断信息。这让我怀疑问题在于从集群发送的字符的 ENQ/ACK 或 pad-timing 被丢弃。terminfo 诊断程序的文档对此进行了讨论tack

tack登录节点交互节点使用给出相同的值

$ tack
Using terminfo from: /home/maom/opt/miniconda3/share/terminfo/x/xterm-256color

Name: xterm-256color|xterm with 256 colors
\r ^M (cr)    = ^M
\n ^J (ind)   = ^J
\b ^H …
Run Code Online (Sandbox Code Playgroud)

emacs terminfo slurm

6
推荐指数
1
解决办法
261
查看次数

如何在 Slurm 中处理作业取消?

我正在HPC 集群上使用Slurm作业管理器。有时会出现一些情况,当工作因时间限制而被取消时,我想优雅地完成我的计划。

据我了解,取消过程分两个阶段进行,以便软件开发人员能够优雅地完成程序:

srun: Job step aborted: Waiting up to 62 seconds for job step to finish.                                                                                                                           
slurmstepd: error: *** JOB 18522559 ON ncm0317 CANCELLED AT 2020-12-14T19:42:43 DUE TO TIME LIMIT ***
Run Code Online (Sandbox Code Playgroud)

您可以看到,我有 62 秒的时间按照我希望的方式完成工作(通过保存一些文件等)。

问题:如何做到这一点?我知道首先一些 Unix 信号被发送到我的工作,我需要正确地响应它。但是,我在 Slurm 文档中找不到有关此信号是什么的任何信息。此外,我不知道如何在Python中处理它,可能是通过异常处理。

python signals slurm

6
推荐指数
1
解决办法
4407
查看次数

Ray on slurm - 初始化问题

我写这篇文章是因为自从我使用 slurm 以来,我一直无法正确使用 ray。\n每当我使用命令时:

\n
    \n
  • 射线初始化
  • \n
  • trainer = A3CTrainer(env = \xe2\x80\x9cmy_env\xe2\x80\x9d) (我已经注册了我的环境)
  • \n
\n

,程序崩溃并显示以下消息:

\n

core_worker.cc:137:无法将工作线程 01000000ffffffffffffffffffffffffffffffffffffffffffffffff 注册到 Raylet。IOError: [RayletClient] 无法向 raylet 注册工作线程。没有这样的文件或目录

\n

该程序在我的计算机上运行良好,但在使用 Slurm 时出现了问题。我只要求 slurm 提供一台 GPU。

\n

感谢您阅读我的文章并可能回答我的问题。\n祝您有美好的一天

\n

关于代码的一些精度

\n

@Alex\n我使用了以下代码:

\n
import ray\nfrom ray.rllib.agents.a3c import A3CTrainer\nimport tensorflow as tf\nfrom MM1c_queue_env import my_env #my_env is already registered in tune\n\nray.shutdown()\nray.init(ignore_reinit_error=True)\ntrainer = A3CTrainer(env = "my_env")\n\nprint("success")\n
Run Code Online (Sandbox Code Playgroud)\n

带有 trainer 和 init 的两条线都会导致程序崩溃,并出现我之前评论中提到的错误。要使用 slurm 启动该程序,我使用以下程序:

\n
#!/bin/bash\n\n#SBATCH --job-name=rl_for_insensitive_policies\n#SBATCH --time=0:05:00 \n#SBATCH --ntasks=1\n#SBATCH --gres=gpu:1\n#SBATCH --partition=gpu\n\nmodule load anaconda3/2020.02/gcc-9.2.0\npython test.py\n …
Run Code Online (Sandbox Code Playgroud)

reinforcement-learning ray slurm rllib

6
推荐指数
1
解决办法
3793
查看次数

我可以提交一个可能在不同分区执行的作业吗

使用该参数时,-p您可以为作业定义分区。就我而言,一个作业可以在不同的分区中运行,因此我确实想将我的作业限制为仅在给定的分区上运行。如果我的作业可以在分区“p1”和“p3”中完美运行,我该如何配置命令sbatch以允许多个分区?

slurm

6
推荐指数
1
解决办法
3490
查看次数