Я пытался использовать несколько узлов в моем скрипте PBS для запуска нескольких независимых заданий. Каждое отдельное задание должно использовать 8 ядер, а каждый узел в кластере имеет 32 ядра. Итак, я бы хотел, чтобы каждый узел выполнял 4 задания. Мой сценарий PBS выглядит следующим образом.
#!/usr/bin/env bash
#PBS -l nodes=2:ppn=32
#PBS -l mem=128gb
#PBS -l walltime=01:00:00
#PBS -j oe
#PBS -V
#PBS -l gres=ccm
sort -u $PBS_NODEFILE > nodelist.dat
#cat ${PBS_NODEFILE} > nodelist.dat
export JOBS_PER_NODE=4
PARALLEL="parallel -j $JOBS_PER_NODE --sshloginfile nodelist.dat --wd $PBS_O_WORKDIR"
$PARALLEL -a input_files.dat sh test.sh {}
input_files.dat
содержит имена файлов заданий. Я успешно использовал этот сценарий для запуска параллельных заданий на одном узле (в этом случае я удаляю --sshloginfile nodelist.dat
и sort -u $PBS_NODEFILE > nodelist.dat
из сценария). Однако всякий раз, когда я пытаюсь запустить этот сценарий на более чем одном узле, я получаю следующую ошибку.
ssh: connect to host 922 port 22: Invalid argument
ssh: connect to host 901 port 22: Invalid argument
ssh: connect to host 922 port 22: Invalid argument
ssh: connect to host 901 port 22: Invalid argument
Здесь 922
и 901
являются числами, соответствующими назначенным узлам и включены в файл nodelist.dat ($PBS_NODEFILE)
.
Я пытался найти эту проблему, но не смог найти ничего, поскольку все остальные, кажется, справляются с аргументом --sshloginfile
, поэтому я не уверен, является ли это системной проблемой.
Edit:
Как отметил @Ole Tange в своем ответе и комментариях, мне нужно изменить «номер узла», полученный в $ PBS_NODEFILE, что я делаю следующим образом в скрипте PBS.
# provides a unique number (say, 900) associated with the node.
sort -u $PBS_NODEFILE > nodelist.dat
# changes the contents of the nodelist.dat from "900" to "username@w-900.cluster.uni.edu"
sed -i -r "s/([0-9]+)/username@w-\1.cluster.uni.edu/g" nodelist.dat
Я подтвердил, что nodelist.dat
содержит только одну строку, а именно username@w-900.cluster.uni.edu
.
Edit-2:
Кажется, что архитектура кластера ответственна за ошибку, которую я получаю. Я запустил один и тот же скрипт на другом кластере (скажем, cluster_2), и он завершился без ошибок. По словам моего системного администратора, причина, по которой он работает на cluster_2, заключается в следующем: «cluster_2 - это одна машина. Как только ваша работа начинается, вы на самом деле находитесь в головном узле своей работы PBS, как и следовало ожидать».