SLURM. Запуск задач с lxui[01..04].jinr.ru.

1. ssh lxui.jinr.ru

пользователь попадает на одну из машин lxui[01-04].
Эти машины доступны по ssh из всех сетей, не только сети ОИЯИ.

2. Выполнить команду

 klist -e
должна в выдаче показать:
{{{
lxui04:~ > klist -e | grep -o aes256-cts
aes256-cts
}}}

Если это не так , пользователю необходимо сменить пароль.  Кроме того,  в Kerberоs время действия первоначального тикета

«Expires»  должно быть 24 часа,  а   время его обновления

«renew until»  —  100 дней.  (Формат  — месяц/день/год) .

Тикет Kerberos в SLURM хранится на сервере для последующего использования в задаче, когда она запускается на счётной машине, в этот момент заводится и токен AFS для доступа к его $HOME.
Тикет и токен постоянно обноляются (до 100 дней) при работе
задачи на счётной машине. Это делает сам SLURM без запуска
krenew …

3. Для правильного запуска задач — автоматического продления времени жизни тикета Kerberos и токена AFS в итерактивном сеансе, надо один раз в текущей сессии запускать:

krenew  -a -b -K 60 -t &

krenew — автоматически обновляет kerberos тикет и AFS токен в фоне, обновляется до 100 дней.
auks — передаёт kerberos тикет на сервер, где он хранится, обновляется и передаётся на счётную машину при старте задаче.

4.  Проверить запуск в SLURM,  можно запустив  интерактивный
сеанс:
srun -n 1 -N 1 —pty —mem=500M —tmp=5G /bin/bash -i

Появится позсказка со счётной машины:
wn410:~ >
посмотреть там HOME и тикет/токен:
pwd
klist
tokens

Можно запустить  и свою программу …

или

srun -vv -n 1 -N 1 —pty —mem=500M —tmp=5G /bin/bash -i

Выход, как всегда:
exit

6.  при ошибке, обновляете   тикет
auks -r
auks -a

7.  SLURM создаёт для каждой задачи уникальную директорию,
обычно первое действие в скрипте задачи:
cd $TMPDIR
TMPDIR — переменная окружения, которая указывает на эту директорию.
Размер партиции, в которой создаётся эта директория, максимально
возможный на счётных машинах. Крайне желательно создавать
временные, или результирующие файлы в этой директоии,
потом переписывать из в пространство в EOS.
НИКОГДА НЕ ИСПОЛЬЗУЙТЕ ДИРЕКТОРИИ /tmp, /var/tmp
вы можете их переполнить, что приведёт к сбоям в работе
системы.

8.   Запустить  скрипт задачи в SLURM
sbatch sript1.sh

9. проверяете статус задачи
squeue -u `id -un`

10.  Следует иметь ввиду следующее:

По умолчанию лимит:   400 ядер для работающих задач.
Когда все ваши работающие задачи займут  400 ядер,
или нет свободных ядер, задачи будут становиться в очередь.

 


 

Итак, запуск задачи в SLURM на lxui должен выглядеть примерно так:

 

а. заходите по ssh/putty на lxui.jinr.ru


б. запускаете обновление тикета/токена
 krenew -a -b -K 60 -t


в. проверяете интерактивной задачей
 srun -n 1 -N 1 --pty --mem=500M --tmp=5G /bin/bash -i
 exit


г. при ошибке, обновляете тикет
 auks -r
 auks -a

д. запускаете скрипт задачи в SLURM
 sbatch sript1.sh


е. проверяете статус
 squeue -u `id -un`

 

 

Примерный  скрипт для запуска через sbatch :

{{{
#!/bin/bash
#SBATCH —job-name=test-001 # Job name
#SBATCH —mail-type=END,FAIL # Mail events (NONE, BEGIN, END, FAIL, ALL)
#SBATCH —mail-user=<usr>@jinr.ru # Where to send mail
#SBATCH —no-requeue # do not auto requeue on errors
#SBATCH —ntasks=1 # Run on a single CPU
#SBATCH —cpus-per-task=1 # 1 core per tast
#SBATCH —mem=2gb # Job memory request
#SBATCH —time=3-00:00:00 # Time limit days-hrs:min:sec
#SBATCH —tmp=100G # max disk space in $TMPDIR
$HOME/slurm/test.sh
}}}

$HOME/slurm/test.sh — скрипт, который запускается на счётной машине

 

Пример скрипта test.sh ( только для теста):

{{{
#!/bin/bash
echo «Start at: «`date`
U=`echo $USER | cut -c 1-1`
SRCF=file1GB
DSTF=$SRCF.$SLURM_JOB_ID
test X»$SUBMITHOST» = «X» && SUBMITHOST=lxui01.jinr.ru
echo «—— ARGV: 0=\»$0\» 1=\»$1\» 2=\»$2\» 3=\»$3\» 4=\»$4\»»
echo «—— currunt dir»
pwd
OPWD=`pwd`
echo «—— cd $TMPDIR»
cd $TMPDIR
pwd
echo «—— hostname -f»
hostname -f
echo «—— whoami»
whoami
echo «—— id»
id
echo «—— ulimit -a»
ulimit -a
echo «—— klist»
klist
echo «—— tokens»
tokens
echo «—— eos -b whoami»
eos -b whoami
echo «—— cat $HOME/.forward >/dev/null»
cat $HOME/.forward
echo «—— environment»
env | grep -E «^[A-Z]» | grep -v LS_COLORS | sort
echo «—— dd if=/dev/urandom of=$SRCF bs=10M count=100»
dd if=/dev/urandom of=$SRCF bs=10M count=100
for i in `seq -w 1 3 ; do
date
echo «###################################################################### step $i»
echo «—— /bin/rm -f /eos/user/$U/$USER/$DSTF»
/bin/rm -f /eos/user/$U/$USER/$DSTF
echo «—— /bin/time -p cp -pv $SRCF /eos/user/$U/$USER/$DSTF»
/bin/time -p cp -pv $SRCF /eos/user/$U/$USER/$DSTF
echo «—— cmp $SRCF /eos/user/$U/USER/$DSTF»
cmp $SRCF /eos/user/$U/$USER/$DSTF
echo «—— /bin/rm -f /eos/user/$U/$USER/$DSTF»
/bin/rm -f /eos/user/$U/$USER/$DSTF
echo «—— eoscp -n $SRCF /eos/user/$U/$USER/$DSTF»
eoscp -n $SRCF /eos/user/$U/$USER/$DSTF
echo «—— cmp $SRCF /eos/user/$U/USER/$DSTF»
cmp $SRCF /eos/user/$U/$USER/$DSTF
echo «—— /bin/rm -f /eos/user/$U/$USER/$DSTF»
/bin/rm -f /eos/user/$U/$USER/$DSTF
echo «—— eos cp -n $SRCF /eos/user/$U/$USER/$DSTF»
eos cp -n $SRCF /eos/user/$U/$USER/$DSTF
echo «—— cmp $SRCF /eos/user/$U/USER/$DSTF»
cmp $SRCF /eos/user/$U/$USER/$DSTF
echo «—— /bin/rm -f /eos/user/$U/$USER/$DSTF»
/bin/rm -f /eos/user/$U/$USER/$DSTF
echo «—— eos cp -n $SRCF root://eos.jinr.ru//eos/user/$U/$USER/$DSTF»
eos cp -n $SRCF root://eos.jinr.ru//eos/user/$U/$USER/$DSTF
echo «—— cmp $SRCF /eos/user/$U/USER/$DSTF»
cmp $SRCF /eos/user/$U/$USER/$DSTF
echo «—— /bin/rm -f /eos/user/$U/$USER/$DSTF»
/bin/rm -f /eos/user/$U/$USER/$DSTF
echo «—— xrdcp -f $SRCF \»root://eos.jinr.ru//eos/user/$U/$USER/$DSTF?xrd.wantprot=krb5,unix\»»
xrdcp -f $SRCF «root://eos.jinr.ru//eos/user/$U/$USER/$DSTF?xrd.wantprot=krb5,unix» 2>&1 | tr «\r» «\n» | tail -1
echo «—— cmp $SRCF /eos/user/$U/USER/$DSTF»
cmp $SRCF /eos/user/$U/$USER/$DSTF
echo «—— id»
id
echo «—— klist»
klist
echo «—— tokens»
tokens
echo «—— eos -b whoami»
eos -b whoami
echo «—— ps auxwww | grep -E $USER | grep -v [g]rep»
ps auxwww | grep -E «$USER» | grep -v [g]rep
echo «—— ssh -x $SUBMITHOST /bin/true»
ssh -x $SUBMITHOST /bin/true
echo «—— sleep 600»
sleep 600
done
echo «Done «`date`
exit 0
}}}

Логи stdout/stderr будут записыватьcя в текущую директорию под именем slurm-<n>.out , <n> — индекс задачи в SLURM

Посмотреть где она запущена:

 sqstat —user=$USER