Невозможно запустить сценарий PBS на нескольких узлах с использованием параллельного GNU

Я пытался использовать несколько узлов в моем сценарии 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, поэтому я не уверен, относится ли это к конкретной системе проблема.

Редактировать:

Как упомянул @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 "[email protected]"
sed -i -r "s/([0-9]+)/username@w-\1.cluster.uni.edu/g" nodelist.dat

Я проверил, что nodelist.dat содержит только одну строку, а именно [email protected].

Редактировать-2:

Похоже, что за ошибку, которую я получаю, ответственна архитектура кластера. Я запустил тот же сценарий в другом кластере (скажем, cluster_2), и он завершился без ошибок. По словам моего системного администратора, причина, по которой он работает на cluster_2, заключается в следующем: «cluster_2 - это отдельная машина. Как только ваше задание начинается, вы фактически находитесь на головном узле вашего задания PBS, как и следовало ожидать».


person tobiuchiha    schedule 17.01.2019    source источник
comment
Я думаю, вам нужно опубликовать фактическое содержание nodelist.dat, чтобы получить полезный ответ. Ваш вопрос не соответствует MCVE, поэтому вам нужно будет предоставить как можно больше реальных доказательств.   -  person Ole Tange    schedule 19.01.2019


Ответы (1)


Переменная $PARALLEL используется GNU Parallel для параметров. Поэтому, когда вы также используете его, это может вызвать путаницу. Однако это не кажется основной причиной здесь, но сделайте себе одолжение и используйте другое имя переменной (или используйте его, как описано на странице руководства).

Проблема здесь, похоже, ssh, который не видит число как имя хоста:

$ ssh 8
ssh: connect to host 8 port 22: Invalid argument

Добавьте имя домена, и ssh увидит его как имя хоста:

$ ssh 8.pi.dk
<<connects>>

На вашем месте я бы поговорил с администратором вашего кластера и спросил, можно ли переименовать рабочие узлы в w-XXX, где XXX - их текущее имя.

person Ole Tange    schedule 18.01.2019
comment
Спасибо за полезные предложения. Для ясности: если я войду в свою учетную запись, используя [email protected], то номер узла (скажем, 900) должен быть указан как [email protected]. Я пробовал это, но получил еще одну ошибку: Host key verification failed. Но я думаю, что вы правы, мне нужно написать своему администратору кластера по электронной почте. - person tobiuchiha; 19.01.2019
comment
@tobiuchiha Это нетрадиционный способ сделать это, и, возможно, это сбивает с толку ssh. Обычно вы входите в систему, используя что-то вроде [email protected]. Таким образом, системный администратор может видеть, какой пользователь какую программу запускает. - person Ole Tange; 19.01.2019
comment
Я попробовал [email protected], но получил ssh: Could not resolve hostname w-900.cluster.uni.edu: Name or service not known ошибку. Я не очень хорошо с этим знаком. Есть ли другие, в которые можно добавить доменное имя? - person tobiuchiha; 19.01.2019
comment
Вы просили своего системного администратора сначала переименовать хосты? Иначе явно не пойдет. - person Ole Tange; 20.01.2019
comment
Я связывался с моим системным администратором. Я думаю, он не очень хорошо знаком с GNU-parallel. Но суть его ответа заключалась в том, что архитектура кластера не поддерживает то, что я пытаюсь сделать. Он действительно пытался объяснить причину этого, но я не мог этого понять. В нашем университете три кластера, поэтому я попробую на оставшихся двух. Но кластер, на котором я пытался, имеет наибольшее количество вычислительных узлов, поэтому мне очень хотелось, чтобы он там работал. - person tobiuchiha; 20.01.2019