我正在以大约27个批次运行Python3脚本,所有这些脚本都有不同的输入。然后将结果保存到结果/ $ sizex $ size文件夹中。工作目录也必须更改为该文件夹,以便程序可以保存一些图像和数据。
这是我的pbs脚本:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.aeza.sta">
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<receiver android:name=".TestWidget" android:enabled="true" android:exported="false" >
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
<meta-data
android:name="android.appwidget.provider"
android:resource="@xml/test_widget_info" />
</receiver>
<activity android:name=".TestWidgetConfigureActivity">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_CONFIGURE" />
</intent-filter>
</activity>
</application>
</manifest>
这些是我从运行#!/bin/bash
#PBS -l nodes=1:ppn=28
#PBS -l mem=16gb
#PBS -l walltime=120:00:00
cd $PBS_O_WORKDIR
mkdir -p results
module purge
module load newmodules/1.0-Lmod GCC/6.3.0-2.27 OpenMPI/2.0.2
module load Python/3.6.1
j=0
for i in $(seq 2 2 1024); do
if [ "$j" -gt "28" ]; then
wait;
j=0;
fi
cd results
mkdir -p $i"x"$i
cd $i"x"$i
time python3 $PBS_O_WORKDIR/model.py $i > result.txt &
cd $PBS_O_WORKDIR
((j++))
((j++))
done
wait
获得的日志:
tracejob
作业运行一个小时左右然后随机死亡。我不知道为什么。我试过增加墙上的时间但是没有做任何事情。
基本上我的python脚本读取2的倍数从2到1024,并且每个脚本并行运行(批量为27,以避免服务器崩溃/交换)。谁能说明为什么会这样?
答案 0 :(得分:0)
所以我通过使用GNU parallel解决了这个问题。在某些服务器上,您可能需要加载模块:module load gnu-parallel
然后在pbs脚本中我只删除for循环:
parallel -j28 python3 model.py {1} > results{1}.txt ::: $(seq 100 -2 2)
我还必须更改程序中的工作目录,这样结果就不会被覆盖。