Невозможно запустить скрипт PBS на нескольких узлах, используя GNU параллельно - PullRequest
0 голосов
/ 18 января 2019

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

1 Ответ

0 голосов
/ 18 января 2019

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

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...