Mas*_*rHD 3 mpi qsub pbs torque
对于使用qsub调用的PBS脚本,我想知道在PBS文件中定义的数字被命令行输入覆盖的情况下,实际分配了多少CPU.例如,使用以下pbs脚本文件:
jobscript.pbs:
#!/bin/bash
#PBS -N test_run
#PBS -l nodes=32
#PBS -l walltime=06:00:00
#PBS -j oe
#PBS -q normal
#PBS -o output.txt
cd $PBS_O_WORKDIR
module load gcc-openmpi-1.2.7
time mpiexec visct
Run Code Online (Sandbox Code Playgroud)
使用以下命令行可以使用16个CPU(而不是32个)运行此脚本:
$ qsub -l nodes=2:ppn=8 jobscript.pbs
Run Code Online (Sandbox Code Playgroud)
所以我想要一个强大的方法来确定脚本中实际可用的CPU数量.
我能够使用以下解决方案使用以下解决方案回答我自己的问题:$PBS_NODEFILE
环境变量包含文件路径,列出有关可用节点的信息:
jobscript.pbs:
#!/bin/bash
#PBS -N test_run
#PBS -l nodes=32
#PBS -l walltime=06:00:00
#PBS -j oe
#PBS -q normal
#PBS -o output.txt
# This finds out the number of nodes we have
NP=$(wc -l $PBS_NODEFILE | awk '{print $1}')
echo "Total CPU count = $NP"
Run Code Online (Sandbox Code Playgroud)
多次在线搜索后感谢" Source ".
小智 5
MasterHD我知道你找到了答案,但我想我会分享另一种方式
此代码更长,但它有助于满足我的特定需求.我实际上使用pbsnodes命令.下面是我的代码片段.
@nodes_whole =`pbsnodes -av -s $server | grep "pcpus" `;
$nodes_count = ` pbsnodes -av -s $server | grep "pcpus" | wc -l `;
while($i < $nodes_count){
@cpu_present = split(/\s+/, $nodes_whole[$i]);
$cpu_whole_count += $cpu_present[3];
$i++;
}
Run Code Online (Sandbox Code Playgroud)
我这样做是因为在我的脚本中我检查了cpus的数量,这取决于节点cpus可能是4,8,16.此外,我有多个集群,总是在改变大小,我不想要脚本具有硬编码的特定群集或节点信息.主要是,我这样做是因为当用户提交作业时,我会检查他们可以使用多少资源.如果说他们想要使用队列并请求200 cpus但是在群集A上他们的作业将排队,我的脚本可以告诉他们他们将排队但不会在群集b或d上.因此,他们可以选择在提交之前进行更改.
我还用它来检查节点:
@nodes_down=`pbsnodes -l -s $server `;
Run Code Online (Sandbox Code Playgroud)
我看到正在使用的资源:
@nodes_used=`pbsnodes -av -s $server | grep "resources_assigned.ncpus" `;
Run Code Online (Sandbox Code Playgroud)
另外在一种情况下,当我等待硬件时,我有两个簇在一个头节点上运行.在这种情况下,我检查节点分配给哪个群集,然后根据分配给该群集的节点进行计数.这样,所有用户都看到了另一个集群,并按照他们对任何其他集群的方式使用脚本.
我只是提到因为我找到了很多有用的方法来使用pbsnodes,它可以很好地满足我的特殊需求.
归档时间: |
|
查看次数: |
3439 次 |
最近记录: |