我注意到seq我的一台计算机上出现了一个奇怪的行为(Ubuntu LTS 14.04):它不使用点作为小数分隔符,而是使用逗号:
seq 0. 0.1 0.2
0,0
0,1
0,2
Run Code Online (Sandbox Code Playgroud)
我的另一台PC上相同版本的seq(8.21)给出了正常点(也是相同的Ubuntu版本).最奇怪的是,当我从第一台机器进入ssh时,我在远程机器上观察到同样的不良行为.即使是从冲突机器提交到远程机器上的作业调度程序(slurm)的bash脚本也存在这个问题.我很迷茫.为什么(以及如何!)发生这种情况?
我正在尝试使用批处理脚本启动大量作业步骤.不同的步骤可以是完全不同的程序,并且每个步骤只需要一个CPU.首先,我尝试使用--multi-prog参数来执行此操作srun.不幸的是,当以这种方式使用分配给我的作业的所有CPU时,性能会大幅降低.运行时间几乎增加到序列化值.通过订阅我可以改善这一点.我在网上找不到关于这个问题的任何内容,所以我认为它是我正在使用的集群的配置问题.
所以我试着走另一条路.我实现了以下脚本(通过启动sbatch my_script.slurm):
#!/bin/bash
#SBATCH -o $HOME/slurm/slurm_out/%j.%N.out
#SBATCH --error=$HOME/slurm/slurm_out/%j.%N.err_out
#SBATCH --get-user-env
#SBATCH -J test
#SBATCH -D $HOME/slurm
#SBATCH --export=NONE
#SBATCH --ntasks=48
NR_PROCS=$(($SLURM_NTASKS))
for PROC in $(seq 0 $(($NR_PROCS-1)));
do
#My call looks like this:
#srun --exclusive -n1 bash $PROJECT/call_shells/call_"$PROC".sh &
srun --exclusive -n1 hostname &
pids[${PROC}]=$! #Save PID of this background process
done
for pid in ${pids[*]};
do
wait ${pid} #Wait on all PIDs, this returns 0 if ANY process fails
done
Run Code Online (Sandbox Code Playgroud)
我知道,--exclusive …
bsub与 LSF 一起使用时,该-o选项提供了许多详细信息,例如作业何时开始和结束以及作业占用了多少内存和 CPU 时间。使用 SLURM,我得到的只是在没有 LSF 的情况下运行脚本时得到的相同标准输出。
例如,给定这个 Perl 6 脚本:
warn "standard error stream";
say "standard output stream";
Run Code Online (Sandbox Code Playgroud)
提交如下:
sbatch -o test.o%j -e test.e%j -J test_warn --wrap 'perl6 test.p6'
Run Code Online (Sandbox Code Playgroud)
结果在文件中test.o34380:
Testing standard output
Run Code Online (Sandbox Code Playgroud)
和文件test.e34380:
Testing standard Error in block <unit> at test.p6:2
Run Code Online (Sandbox Code Playgroud)
使用 LSF,我会在标准输出文件中获得各种详细信息,例如:
Sender: LSF System <lsfadmin@my_node>
Subject: Job 347511: <test> Done
Job <test> was submitted from host <my_cluster> by user <username> in cluster <my_cluster_act>.
Job was executed on host(s) …Run Code Online (Sandbox Code Playgroud) 我有以下脚本用slurm提交作业:
#!/bin/sh
#!/bin/bash
#SBATCH -J $3 #job_name
#SBATCH -n 1 #Number of processors
#SBATCH -p CA
nwchem $1 > $2
Run Code Online (Sandbox Code Playgroud)
第一个参数($ 1)是我的输入,第二个($ 2)我的输出,我想第三个($ 3)确实是我的工作名称.如果我喜欢这样,那么工作名称是'$ 3'.我怎样才能将作业名称作为脚本的参数?
谢谢
我slurm在群集上使用来运行作业并提交如下所示的脚本sbatch:
#!/usr/bin/env bash
#SBATCH -o slurm.sh.out
#SBATCH -p defq
#SBATCH --mail-type=ALL
#SBATCH --mail-user=my.email@something.com
echo "hello"
Run Code Online (Sandbox Code Playgroud)
我可以以某种方式注释掉#SBATCH一行,例如#SBATCH --mail-user=my.email@something.com在这个脚本中吗?由于slurm指令是bash注释本身,我不知道如何实现这一点.
在sbatch脚本中,您可以直接启动程序或脚本(例如,可执行文件myapp),但是在许多教程中,人们会使用它们srun myapp。
尽管阅读了有关该主题的一些文档,但我不了解它们的区别以及何时使用这些语法。
我希望这个问题足够精确(关于SO的第一个问题),在此先感谢您的回答。
当我将带有选项 --gres=gpu:1 的 SLURM 作业提交到具有两个 GPU 的节点时,如何获取分配给该作业的 GPU 的 ID?是否有用于此目的的环境变量?我使用的 GPU 都是 nvidia GPU。谢谢。
在 slurm 中,调用该命令squeue -u <username>将列出给定用户的所有挂起或活动的作业。我想知道是否有一种快速的方法来统计它们,以便我知道有多少未完成的工作,包括待处理和正在运行的工作。谢谢!
我正在使用脚本开始 SLURM 作业,脚本必须根据它的位置工作,该位置是在脚本本身内部使用SCRIPT_LOCATION=$(realpath $0). 但是 SLURM 将脚本复制到slurmd文件夹并从那里开始工作,它搞砸了进一步的操作。
是否有任何选项可以在移动/复制之前获取用于 slurm 作业的脚本的位置?
脚本位于网络共享文件夹中/storage/software_folder/software_name/scripts/this_script.sh,它必须:
software_name文件夹software_name文件夹复制到本地文件夹/node_folder节点上/node_folder/software_name/scripts/launch.sh我的脚本是
#!/bin/bash
#SBATCH --nodes=1
#SBATCH --partition=my_partition_name
# getting location of software_name
SHARED_PATH=$(dirname $(dirname $(realpath $0)))
# separating the software_name from path
SOFTWARE_NAME=$(basename $SHARED_PATH)
# target location to copy project
LOCAL_SOFTWARE_FOLDER='/node_folder'
# corrected path for target
LOCAL_PATH=$LOCAL_SOFTWARE_FOLDER/$SOFTWARE_NAME
# Copying software folder from network storage to local
cp -r $SHARED_PATH $LOCAL_SOFTWARE_FOLDER
# running the …Run Code Online (Sandbox Code Playgroud) 我正在尝试在一堆 aws 实例上设置 slurm,但是每当我尝试启动头节点时,都会出现以下错误:
fatal:无法确定此 slurmd 的 NodeName
我已经设置了实例 /etc/hosts,以便它们可以将彼此寻址为节点 1-6,其中节点 6 是头节点。这是节点 6 的主机文件,所有其他节点都有类似的主机文件。
/etc/hosts 文件:
127.0.0.1 localhost node6
# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts
<Node1 IP> node1
<Node2 IP> node2
<Node3 IP> node3
<Node4 IP> node4
<Node5 IP> node5
Run Code Online (Sandbox Code Playgroud)
/etc/slurm-llnl/slurm.conf:
###############################################################################
# Sample configuration file for SLURM 2
###############################################################################
#
# This file holds the system-wide SLURM configuration. It is read …Run Code Online (Sandbox Code Playgroud)